From b9bb68c388a651121b9197e921894ab80e386b04 Mon Sep 17 00:00:00 2001 From: Ronan Keryell Date: Mon, 22 Feb 2021 17:11:14 -0800 Subject: [PATCH] Source of Khronos Group SYCL 2020 revision 2 specification --- .gitattributes | 1 + CODE_OF_CONDUCT.md | 1 + COPYRIGHT.txt | 35 + LICENSE.txt | 29 + README.md | 161 + adoc/.gitignore | 1 + adoc/Makefile | 312 + adoc/chapters/acknowledgements.adoc | 80 + adoc/chapters/architecture.adoc | 1862 ++ adoc/chapters/copyright-spec.adoc | 80 + adoc/chapters/device_compiler.adoc | 827 + adoc/chapters/extensions.adoc | 204 + adoc/chapters/feature_sets.adoc | 74 + adoc/chapters/glossary.adoc | 560 + adoc/chapters/host_backend.adoc | 95 + adoc/chapters/information_descriptors.adoc | 80 + adoc/chapters/introduction.adoc | 147 + adoc/chapters/opencl_backend.adoc | 1180 + adoc/chapters/programming_interface.adoc | 21591 ++++++++++++++++ adoc/chapters/references.adoc | 32 + adoc/chapters/what_changed.adoc | 424 + adoc/code/algorithms.cpp | 35 + adoc/code/anatomy.cpp | 39 + adoc/code/aspectTraitExample.cpp | 33 + adoc/code/attributes.cpp | 19 + adoc/code/basicParallelForGeneric.cpp | 13 + adoc/code/basicParallelForIntegral.cpp | 12 + adoc/code/basicParallelForItem.cpp | 13 + adoc/code/basicParallelForNumber.cpp | 13 + adoc/code/basicparallelfor.cpp | 11 + adoc/code/bundle-builtin-kernel.cpp | 33 + adoc/code/bundle-kernel-introspection.cpp | 41 + adoc/code/bundle-pre-compile.cpp | 27 + adoc/code/bundle-spec-constants.cpp | 55 + adoc/code/explicitcopy.cpp | 23 + adoc/code/handlingBackendErrorCode.cpp | 28 + adoc/code/handlingErrorCode.cpp | 16 + adoc/code/handlingException.cpp | 11 + adoc/code/lambdaNameExamples.cpp | 57 + adoc/code/largesample.cpp | 80 + adoc/code/myfunctor.cpp | 27 + adoc/code/mykernel.cpp | 20 + adoc/code/parallelForWithKernelHandler.cpp | 20 + .../parallelForWorkGroupWithKernelHandler.cpp | 33 + adoc/code/parallelfor.cpp | 20 + adoc/code/parallelforbarrier.cpp | 12 + adoc/code/parallelforworkgroup.cpp | 32 + adoc/code/parallelforworkgroup2.cpp | 27 + adoc/code/propertyExample.cpp | 19 + adoc/code/queueShortcuts.cpp | 20 + adoc/code/reduction.cpp | 42 + adoc/code/requires.cpp | 30 + adoc/code/singleTaskWithKernelHandler.cpp | 9 + adoc/code/singletask.cpp | 9 + adoc/code/subbuffer.cpp | 16 + adoc/code/twoOptionalFeatures.cpp | 23 + adoc/code/usingSpecConstants.cpp | 47 + adoc/code/usm_device.cpp | 35 + adoc/code/usm_shared.cpp | 30 + adoc/config/README.md | 30 + adoc/config/asciidoctor-mathematical-ext.rb | 19 + adoc/config/attribs.adoc | 75 + adoc/config/copyright-ccby.txt | 4 + adoc/config/katex_replace.rb | 10 + adoc/config/katex_replace/extension.rb | 43 + adoc/config/khronos.css | 728 + adoc/config/loadable_html.rb | 10 + adoc/config/loadable_html/extension.rb | 51 + adoc/config/optimize-pdf | 99 + adoc/config/rouge/lib/rouge/lexers/sycl.rb | 464 + .../rouge/lib/rouge/themes/sycl_spec.rb | 39 + adoc/config/rouge_sycl.rb | 13 + adoc/config/spec-macros.rb | 13 + adoc/config/spec-macros/extension.rb | 73 + adoc/config/themes/pdf-theme.yml | 340 + adoc/headers/Readme.txt | 12 + adoc/headers/accessMode.h | 18 + adoc/headers/accessProperties.h | 10 + adoc/headers/accessTags.h | 13 + adoc/headers/accessorBuffer.h | 200 + adoc/headers/accessorDeprecatedConstant.h | 89 + adoc/headers/accessorDeprecatedHost.h | 68 + adoc/headers/accessorDeprecatedLocal.h | 60 + adoc/headers/accessorHost.h | 111 + adoc/headers/accessorLocal.h | 79 + adoc/headers/accessorSampledImage.h | 67 + adoc/headers/accessorUnsampledImage.h | 92 + adoc/headers/algorithms/all_of.h | 11 + adoc/headers/algorithms/any_of.h | 11 + adoc/headers/algorithms/exclusive_scan.h | 14 + adoc/headers/algorithms/inclusive_scan.h | 14 + adoc/headers/algorithms/is_group.h | 10 + adoc/headers/algorithms/none_of.h | 11 + adoc/headers/algorithms/permute.h | 5 + adoc/headers/algorithms/reduce.h | 14 + adoc/headers/algorithms/select.h | 5 + adoc/headers/algorithms/shift.h | 8 + adoc/headers/aspectTraits.h | 12 + adoc/headers/atomic.h | 61 + adoc/headers/atomicoperations.h | 62 + adoc/headers/atomicref.h | 222 + adoc/headers/backends.h | 8 + adoc/headers/buffer.h | 189 + adoc/headers/bundle/deviceImageClass.h | 16 + adoc/headers/bundle/freeFunctions.h | 119 + adoc/headers/bundle/kernelBundleClass.h | 52 + adoc/headers/bundle/kernelClass.h | 26 + adoc/headers/bundle/kernelIdClass.h | 13 + adoc/headers/commandGroup.h | 22 + adoc/headers/commandGroupHandler.h | 130 + adoc/headers/common-byval.h | 34 + adoc/headers/common-reference.h | 28 + adoc/headers/context.h | 39 + adoc/headers/contextInfo.h | 17 + adoc/headers/device.h | 49 + adoc/headers/deviceEnumClassAspect.h | 28 + adoc/headers/deviceEvent.h | 12 + adoc/headers/deviceInfo.h | 137 + adoc/headers/deviceSelector.h | 27 + adoc/headers/event.h | 33 + adoc/headers/eventInfo.h | 26 + adoc/headers/exception.h | 84 + .../classKernelHandler.h | 12 + .../classSpecializationId.h | 20 + .../kernelHandlerSynopsis.h | 21 + adoc/headers/functional.h | 51 + adoc/headers/group.h | 73 + adoc/headers/groups/barrier.h | 5 + adoc/headers/groups/broadcast.h | 11 + adoc/headers/handler/useKernelBundle.h | 4 + adoc/headers/hitem.h | 53 + adoc/headers/hostTask/classHandler/hostTask.h | 12 + adoc/headers/hostTask/classInteropHandle.h | 4 + .../classInteropHandle/constructors.h | 10 + .../hostTask/classInteropHandle/getbackend.h | 4 + .../hostTask/classInteropHandle/getnativeX.h | 28 + adoc/headers/hostTask/hostTaskSynopsis.h | 57 + adoc/headers/id.h | 59 + adoc/headers/identity.h | 18 + adoc/headers/imageProperties.h | 27 + adoc/headers/imageSampler.h | 28 + .../interop/templateFunctionGetNative.h | 9 + adoc/headers/interop/templateFunctionMakeX.h | 77 + .../headers/interop/typeTraitsBackendTraits.h | 26 + adoc/headers/item.h | 34 + adoc/headers/kernelInfo.h | 28 + adoc/headers/marray.h | 124 + adoc/headers/memoryOrder.h | 15 + adoc/headers/memoryScope.h | 15 + adoc/headers/multipointer.h | 288 + adoc/headers/multipointerlegacy.h | 187 + adoc/headers/ndRange.h | 20 + adoc/headers/nditem.h | 66 + adoc/headers/openclBackend/createBundle.h | 15 + adoc/headers/openclBackend/samplerImagePair.h | 17 + adoc/headers/openclcInterop.h | 5 + adoc/headers/parallelFor.h | 61 + adoc/headers/platform.h | 30 + adoc/headers/platformInfo.h | 16 + adoc/headers/pointer.h | 59 + adoc/headers/priv.h | 14 + adoc/headers/properties.h | 35 + adoc/headers/queue.h | 206 + adoc/headers/queueInfo.h | 13 + adoc/headers/range.h | 50 + adoc/headers/reducer.h | 42 + adoc/headers/reduction.h | 23 + adoc/headers/sampledImage.h | 61 + adoc/headers/stream.h | 79 + adoc/headers/subgroup.h | 38 + adoc/headers/synchronization.h | 8 + adoc/headers/unsampledImage.h | 104 + adoc/headers/vec.h | 222 + adoc/images/Makefile | 26 + adoc/images/device_to_device1.svg | 329 + adoc/images/device_to_device1.tikz | 34 + adoc/images/device_to_device2.svg | 440 + adoc/images/device_to_device2.tikz | 34 + adoc/images/host-acc.svg | 192 + adoc/images/host-acc.tikz | 31 + adoc/images/makesvg.adoc | 12 + adoc/images/overlap.svg | 214 + adoc/images/overlap.tikz | 28 + adoc/images/three-cg-one-queue.svg | 138 + adoc/images/three-cg-one-queue.tikz | 26 + adoc/images/three-cg-three-queue.svg | 138 + adoc/images/three-cg-three-queue.tikz | 26 + adoc/katex/README.md | 91 + adoc/katex/contrib/auto-render.js | 339 + adoc/katex/contrib/auto-render.min.js | 1 + adoc/katex/contrib/auto-render.mjs | 215 + adoc/katex/contrib/copy-tex.css | 14 + adoc/katex/contrib/copy-tex.js | 213 + adoc/katex/contrib/copy-tex.min.css | 1 + adoc/katex/contrib/copy-tex.min.js | 1 + adoc/katex/contrib/copy-tex.mjs | 85 + adoc/katex/contrib/mathtex-script-type.js | 137 + adoc/katex/contrib/mathtex-script-type.min.js | 1 + adoc/katex/contrib/mathtex-script-type.mjs | 24 + adoc/katex/contrib/mhchem.js | 3241 +++ adoc/katex/contrib/mhchem.min.js | 1 + adoc/katex/contrib/mhchem.mjs | 3109 +++ adoc/katex/contrib/render-a11y-string.js | 858 + adoc/katex/contrib/render-a11y-string.min.js | 1 + adoc/katex/contrib/render-a11y-string.mjs | 741 + adoc/katex/fonts/KaTeX_AMS-Regular.ttf | Bin 0 -> 70972 bytes adoc/katex/fonts/KaTeX_AMS-Regular.woff | Bin 0 -> 38868 bytes adoc/katex/fonts/KaTeX_AMS-Regular.woff2 | Bin 0 -> 32944 bytes adoc/katex/fonts/KaTeX_Caligraphic-Bold.ttf | Bin 0 -> 19316 bytes adoc/katex/fonts/KaTeX_Caligraphic-Bold.woff | Bin 0 -> 11696 bytes adoc/katex/fonts/KaTeX_Caligraphic-Bold.woff2 | Bin 0 -> 10448 bytes .../katex/fonts/KaTeX_Caligraphic-Regular.ttf | Bin 0 -> 18684 bytes .../fonts/KaTeX_Caligraphic-Regular.woff | Bin 0 -> 11460 bytes .../fonts/KaTeX_Caligraphic-Regular.woff2 | Bin 0 -> 10240 bytes adoc/katex/fonts/KaTeX_Fraktur-Bold.ttf | Bin 0 -> 35660 bytes adoc/katex/fonts/KaTeX_Fraktur-Bold.woff | Bin 0 -> 22632 bytes adoc/katex/fonts/KaTeX_Fraktur-Bold.woff2 | Bin 0 -> 20360 bytes adoc/katex/fonts/KaTeX_Fraktur-Regular.ttf | Bin 0 -> 34352 bytes adoc/katex/fonts/KaTeX_Fraktur-Regular.woff | Bin 0 -> 22088 bytes adoc/katex/fonts/KaTeX_Fraktur-Regular.woff2 | Bin 0 -> 19784 bytes adoc/katex/fonts/KaTeX_Main-Bold.ttf | Bin 0 -> 60784 bytes adoc/katex/fonts/KaTeX_Main-Bold.woff | Bin 0 -> 35464 bytes adoc/katex/fonts/KaTeX_Main-Bold.woff2 | Bin 0 -> 30244 bytes adoc/katex/fonts/KaTeX_Main-BoldItalic.ttf | Bin 0 -> 44496 bytes adoc/katex/fonts/KaTeX_Main-BoldItalic.woff | Bin 0 -> 25352 bytes adoc/katex/fonts/KaTeX_Main-BoldItalic.woff2 | Bin 0 -> 21944 bytes adoc/katex/fonts/KaTeX_Main-Italic.ttf | Bin 0 -> 47640 bytes adoc/katex/fonts/KaTeX_Main-Italic.woff | Bin 0 -> 26228 bytes adoc/katex/fonts/KaTeX_Main-Italic.woff2 | Bin 0 -> 22748 bytes adoc/katex/fonts/KaTeX_Main-Regular.ttf | Bin 0 -> 69520 bytes adoc/katex/fonts/KaTeX_Main-Regular.woff | Bin 0 -> 38112 bytes adoc/katex/fonts/KaTeX_Main-Regular.woff2 | Bin 0 -> 32464 bytes adoc/katex/fonts/KaTeX_Math-BoldItalic.ttf | Bin 0 -> 39308 bytes adoc/katex/fonts/KaTeX_Math-BoldItalic.woff | Bin 0 -> 22324 bytes adoc/katex/fonts/KaTeX_Math-BoldItalic.woff2 | Bin 0 -> 19720 bytes adoc/katex/fonts/KaTeX_Math-Italic.ttf | Bin 0 -> 40992 bytes adoc/katex/fonts/KaTeX_Math-Italic.woff | Bin 0 -> 22844 bytes adoc/katex/fonts/KaTeX_Math-Italic.woff2 | Bin 0 -> 20096 bytes adoc/katex/fonts/KaTeX_SansSerif-Bold.ttf | Bin 0 -> 33688 bytes adoc/katex/fonts/KaTeX_SansSerif-Bold.woff | Bin 0 -> 18516 bytes adoc/katex/fonts/KaTeX_SansSerif-Bold.woff2 | Bin 0 -> 15732 bytes adoc/katex/fonts/KaTeX_SansSerif-Italic.ttf | Bin 0 -> 30960 bytes adoc/katex/fonts/KaTeX_SansSerif-Italic.woff | Bin 0 -> 17572 bytes adoc/katex/fonts/KaTeX_SansSerif-Italic.woff2 | Bin 0 -> 15024 bytes adoc/katex/fonts/KaTeX_SansSerif-Regular.ttf | Bin 0 -> 29812 bytes adoc/katex/fonts/KaTeX_SansSerif-Regular.woff | Bin 0 -> 16228 bytes .../katex/fonts/KaTeX_SansSerif-Regular.woff2 | Bin 0 -> 13708 bytes adoc/katex/fonts/KaTeX_Script-Regular.ttf | Bin 0 -> 24620 bytes adoc/katex/fonts/KaTeX_Script-Regular.woff | Bin 0 -> 13428 bytes adoc/katex/fonts/KaTeX_Script-Regular.woff2 | Bin 0 -> 12064 bytes adoc/katex/fonts/KaTeX_Size1-Regular.ttf | Bin 0 -> 12916 bytes adoc/katex/fonts/KaTeX_Size1-Regular.woff | Bin 0 -> 6696 bytes adoc/katex/fonts/KaTeX_Size1-Regular.woff2 | Bin 0 -> 5592 bytes adoc/katex/fonts/KaTeX_Size2-Regular.ttf | Bin 0 -> 12172 bytes adoc/katex/fonts/KaTeX_Size2-Regular.woff | Bin 0 -> 6436 bytes adoc/katex/fonts/KaTeX_Size2-Regular.woff2 | Bin 0 -> 5392 bytes adoc/katex/fonts/KaTeX_Size3-Regular.ttf | Bin 0 -> 8120 bytes adoc/katex/fonts/KaTeX_Size3-Regular.woff | Bin 0 -> 4568 bytes adoc/katex/fonts/KaTeX_Size3-Regular.woff2 | Bin 0 -> 3728 bytes adoc/katex/fonts/KaTeX_Size4-Regular.ttf | Bin 0 -> 11016 bytes adoc/katex/fonts/KaTeX_Size4-Regular.woff | Bin 0 -> 6184 bytes adoc/katex/fonts/KaTeX_Size4-Regular.woff2 | Bin 0 -> 5028 bytes adoc/katex/fonts/KaTeX_Typewriter-Regular.ttf | Bin 0 -> 35924 bytes .../katex/fonts/KaTeX_Typewriter-Regular.woff | Bin 0 -> 20260 bytes .../fonts/KaTeX_Typewriter-Regular.woff2 | Bin 0 -> 17272 bytes adoc/katex/katex.css | 1012 + adoc/katex/katex.js | 17425 +++++++++++++ adoc/katex/katex.min.css | 1 + adoc/katex/katex.min.js | 1 + adoc/katex/katex.mjs | 17021 ++++++++++++ adoc/logos/Khronos_Tagline_500px_June18.png | Bin 0 -> 35792 bytes adoc/logos/SYCL_RGB_June16-inkscape-1500.png | Bin 0 -> 880834 bytes adoc/rewriteTable.py | 383 + adoc/samples/example.adoc | 45 + adoc/scripts/genanchorlinks.py | 25 + adoc/scripts/install-rouge.sh | 25 + adoc/scripts/reflib.py | 637 + adoc/scripts/reflow.py | 814 + adoc/scripts/vuidCounts.py | 8 + adoc/sycl-2020.pdf | Bin 0 -> 2468118 bytes adoc/syclbase.adoc | 138 + adoc/translate_math.js | 26 + sycl_version.txt | 5 + 283 files changed, 83976 insertions(+) create mode 100644 .gitattributes create mode 100644 CODE_OF_CONDUCT.md create mode 100644 COPYRIGHT.txt create mode 100644 LICENSE.txt create mode 100644 README.md create mode 100644 adoc/.gitignore create mode 100644 adoc/Makefile create mode 100644 adoc/chapters/acknowledgements.adoc create mode 100644 adoc/chapters/architecture.adoc create mode 100644 adoc/chapters/copyright-spec.adoc create mode 100644 adoc/chapters/device_compiler.adoc create mode 100644 adoc/chapters/extensions.adoc create mode 100644 adoc/chapters/feature_sets.adoc create mode 100644 adoc/chapters/glossary.adoc create mode 100644 adoc/chapters/host_backend.adoc create mode 100644 adoc/chapters/information_descriptors.adoc create mode 100644 adoc/chapters/introduction.adoc create mode 100644 adoc/chapters/opencl_backend.adoc create mode 100644 adoc/chapters/programming_interface.adoc create mode 100644 adoc/chapters/references.adoc create mode 100644 adoc/chapters/what_changed.adoc create mode 100644 adoc/code/algorithms.cpp create mode 100644 adoc/code/anatomy.cpp create mode 100644 adoc/code/aspectTraitExample.cpp create mode 100644 adoc/code/attributes.cpp create mode 100755 adoc/code/basicParallelForGeneric.cpp create mode 100755 adoc/code/basicParallelForIntegral.cpp create mode 100644 adoc/code/basicParallelForItem.cpp create mode 100755 adoc/code/basicParallelForNumber.cpp create mode 100644 adoc/code/basicparallelfor.cpp create mode 100644 adoc/code/bundle-builtin-kernel.cpp create mode 100644 adoc/code/bundle-kernel-introspection.cpp create mode 100644 adoc/code/bundle-pre-compile.cpp create mode 100644 adoc/code/bundle-spec-constants.cpp create mode 100644 adoc/code/explicitcopy.cpp create mode 100644 adoc/code/handlingBackendErrorCode.cpp create mode 100644 adoc/code/handlingErrorCode.cpp create mode 100644 adoc/code/handlingException.cpp create mode 100644 adoc/code/lambdaNameExamples.cpp create mode 100644 adoc/code/largesample.cpp create mode 100644 adoc/code/myfunctor.cpp create mode 100644 adoc/code/mykernel.cpp create mode 100644 adoc/code/parallelForWithKernelHandler.cpp create mode 100644 adoc/code/parallelForWorkGroupWithKernelHandler.cpp create mode 100644 adoc/code/parallelfor.cpp create mode 100644 adoc/code/parallelforbarrier.cpp create mode 100644 adoc/code/parallelforworkgroup.cpp create mode 100644 adoc/code/parallelforworkgroup2.cpp create mode 100644 adoc/code/propertyExample.cpp create mode 100644 adoc/code/queueShortcuts.cpp create mode 100644 adoc/code/reduction.cpp create mode 100644 adoc/code/requires.cpp create mode 100644 adoc/code/singleTaskWithKernelHandler.cpp create mode 100644 adoc/code/singletask.cpp create mode 100644 adoc/code/subbuffer.cpp create mode 100644 adoc/code/twoOptionalFeatures.cpp create mode 100644 adoc/code/usingSpecConstants.cpp create mode 100644 adoc/code/usm_device.cpp create mode 100644 adoc/code/usm_shared.cpp create mode 100644 adoc/config/README.md create mode 100644 adoc/config/asciidoctor-mathematical-ext.rb create mode 100644 adoc/config/attribs.adoc create mode 100644 adoc/config/copyright-ccby.txt create mode 100644 adoc/config/katex_replace.rb create mode 100644 adoc/config/katex_replace/extension.rb create mode 100644 adoc/config/khronos.css create mode 100644 adoc/config/loadable_html.rb create mode 100644 adoc/config/loadable_html/extension.rb create mode 100755 adoc/config/optimize-pdf create mode 100644 adoc/config/rouge/lib/rouge/lexers/sycl.rb create mode 100644 adoc/config/rouge/lib/rouge/themes/sycl_spec.rb create mode 100644 adoc/config/rouge_sycl.rb create mode 100644 adoc/config/spec-macros.rb create mode 100644 adoc/config/spec-macros/extension.rb create mode 100644 adoc/config/themes/pdf-theme.yml create mode 100644 adoc/headers/Readme.txt create mode 100644 adoc/headers/accessMode.h create mode 100755 adoc/headers/accessProperties.h create mode 100755 adoc/headers/accessTags.h create mode 100644 adoc/headers/accessorBuffer.h create mode 100644 adoc/headers/accessorDeprecatedConstant.h create mode 100644 adoc/headers/accessorDeprecatedHost.h create mode 100644 adoc/headers/accessorDeprecatedLocal.h create mode 100755 adoc/headers/accessorHost.h create mode 100644 adoc/headers/accessorLocal.h create mode 100644 adoc/headers/accessorSampledImage.h create mode 100644 adoc/headers/accessorUnsampledImage.h create mode 100644 adoc/headers/algorithms/all_of.h create mode 100644 adoc/headers/algorithms/any_of.h create mode 100644 adoc/headers/algorithms/exclusive_scan.h create mode 100644 adoc/headers/algorithms/inclusive_scan.h create mode 100644 adoc/headers/algorithms/is_group.h create mode 100644 adoc/headers/algorithms/none_of.h create mode 100644 adoc/headers/algorithms/permute.h create mode 100644 adoc/headers/algorithms/reduce.h create mode 100644 adoc/headers/algorithms/select.h create mode 100644 adoc/headers/algorithms/shift.h create mode 100644 adoc/headers/aspectTraits.h create mode 100644 adoc/headers/atomic.h create mode 100644 adoc/headers/atomicoperations.h create mode 100644 adoc/headers/atomicref.h create mode 100644 adoc/headers/backends.h create mode 100644 adoc/headers/buffer.h create mode 100644 adoc/headers/bundle/deviceImageClass.h create mode 100644 adoc/headers/bundle/freeFunctions.h create mode 100644 adoc/headers/bundle/kernelBundleClass.h create mode 100644 adoc/headers/bundle/kernelClass.h create mode 100644 adoc/headers/bundle/kernelIdClass.h create mode 100644 adoc/headers/commandGroup.h create mode 100644 adoc/headers/commandGroupHandler.h create mode 100644 adoc/headers/common-byval.h create mode 100644 adoc/headers/common-reference.h create mode 100644 adoc/headers/context.h create mode 100644 adoc/headers/contextInfo.h create mode 100644 adoc/headers/device.h create mode 100644 adoc/headers/deviceEnumClassAspect.h create mode 100644 adoc/headers/deviceEvent.h create mode 100644 adoc/headers/deviceInfo.h create mode 100644 adoc/headers/deviceSelector.h create mode 100644 adoc/headers/event.h create mode 100644 adoc/headers/eventInfo.h create mode 100644 adoc/headers/exception.h create mode 100644 adoc/headers/expressingParallelism/classKernelHandler.h create mode 100644 adoc/headers/expressingParallelism/classSpecializationId.h create mode 100644 adoc/headers/expressingParallelism/kernelHandlerSynopsis.h create mode 100644 adoc/headers/functional.h create mode 100644 adoc/headers/group.h create mode 100644 adoc/headers/groups/barrier.h create mode 100644 adoc/headers/groups/broadcast.h create mode 100644 adoc/headers/handler/useKernelBundle.h create mode 100644 adoc/headers/hitem.h create mode 100644 adoc/headers/hostTask/classHandler/hostTask.h create mode 100644 adoc/headers/hostTask/classInteropHandle.h create mode 100644 adoc/headers/hostTask/classInteropHandle/constructors.h create mode 100644 adoc/headers/hostTask/classInteropHandle/getbackend.h create mode 100644 adoc/headers/hostTask/classInteropHandle/getnativeX.h create mode 100644 adoc/headers/hostTask/hostTaskSynopsis.h create mode 100644 adoc/headers/id.h create mode 100644 adoc/headers/identity.h create mode 100644 adoc/headers/imageProperties.h create mode 100644 adoc/headers/imageSampler.h create mode 100644 adoc/headers/interop/templateFunctionGetNative.h create mode 100644 adoc/headers/interop/templateFunctionMakeX.h create mode 100644 adoc/headers/interop/typeTraitsBackendTraits.h create mode 100644 adoc/headers/item.h create mode 100644 adoc/headers/kernelInfo.h create mode 100755 adoc/headers/marray.h create mode 100644 adoc/headers/memoryOrder.h create mode 100644 adoc/headers/memoryScope.h create mode 100644 adoc/headers/multipointer.h create mode 100644 adoc/headers/multipointerlegacy.h create mode 100644 adoc/headers/ndRange.h create mode 100644 adoc/headers/nditem.h create mode 100644 adoc/headers/openclBackend/createBundle.h create mode 100644 adoc/headers/openclBackend/samplerImagePair.h create mode 100644 adoc/headers/openclcInterop.h create mode 100644 adoc/headers/parallelFor.h create mode 100644 adoc/headers/platform.h create mode 100644 adoc/headers/platformInfo.h create mode 100644 adoc/headers/pointer.h create mode 100644 adoc/headers/priv.h create mode 100644 adoc/headers/properties.h create mode 100644 adoc/headers/queue.h create mode 100644 adoc/headers/queueInfo.h create mode 100644 adoc/headers/range.h create mode 100644 adoc/headers/reducer.h create mode 100644 adoc/headers/reduction.h create mode 100644 adoc/headers/sampledImage.h create mode 100644 adoc/headers/stream.h create mode 100644 adoc/headers/subgroup.h create mode 100644 adoc/headers/synchronization.h create mode 100644 adoc/headers/unsampledImage.h create mode 100644 adoc/headers/vec.h create mode 100644 adoc/images/Makefile create mode 100644 adoc/images/device_to_device1.svg create mode 100644 adoc/images/device_to_device1.tikz create mode 100644 adoc/images/device_to_device2.svg create mode 100644 adoc/images/device_to_device2.tikz create mode 100644 adoc/images/host-acc.svg create mode 100644 adoc/images/host-acc.tikz create mode 100644 adoc/images/makesvg.adoc create mode 100644 adoc/images/overlap.svg create mode 100644 adoc/images/overlap.tikz create mode 100644 adoc/images/three-cg-one-queue.svg create mode 100644 adoc/images/three-cg-one-queue.tikz create mode 100644 adoc/images/three-cg-three-queue.svg create mode 100644 adoc/images/three-cg-three-queue.tikz create mode 100644 adoc/katex/README.md create mode 100644 adoc/katex/contrib/auto-render.js create mode 100644 adoc/katex/contrib/auto-render.min.js create mode 100644 adoc/katex/contrib/auto-render.mjs create mode 100644 adoc/katex/contrib/copy-tex.css create mode 100644 adoc/katex/contrib/copy-tex.js create mode 100644 adoc/katex/contrib/copy-tex.min.css create mode 100644 adoc/katex/contrib/copy-tex.min.js create mode 100644 adoc/katex/contrib/copy-tex.mjs create mode 100644 adoc/katex/contrib/mathtex-script-type.js create mode 100644 adoc/katex/contrib/mathtex-script-type.min.js create mode 100644 adoc/katex/contrib/mathtex-script-type.mjs create mode 100644 adoc/katex/contrib/mhchem.js create mode 100644 adoc/katex/contrib/mhchem.min.js create mode 100644 adoc/katex/contrib/mhchem.mjs create mode 100644 adoc/katex/contrib/render-a11y-string.js create mode 100644 adoc/katex/contrib/render-a11y-string.min.js create mode 100644 adoc/katex/contrib/render-a11y-string.mjs create mode 100644 adoc/katex/fonts/KaTeX_AMS-Regular.ttf create mode 100644 adoc/katex/fonts/KaTeX_AMS-Regular.woff create mode 100644 adoc/katex/fonts/KaTeX_AMS-Regular.woff2 create mode 100644 adoc/katex/fonts/KaTeX_Caligraphic-Bold.ttf create mode 100644 adoc/katex/fonts/KaTeX_Caligraphic-Bold.woff create mode 100644 adoc/katex/fonts/KaTeX_Caligraphic-Bold.woff2 create mode 100644 adoc/katex/fonts/KaTeX_Caligraphic-Regular.ttf create mode 100644 adoc/katex/fonts/KaTeX_Caligraphic-Regular.woff create mode 100644 adoc/katex/fonts/KaTeX_Caligraphic-Regular.woff2 create mode 100644 adoc/katex/fonts/KaTeX_Fraktur-Bold.ttf create mode 100644 adoc/katex/fonts/KaTeX_Fraktur-Bold.woff create mode 100644 adoc/katex/fonts/KaTeX_Fraktur-Bold.woff2 create mode 100644 adoc/katex/fonts/KaTeX_Fraktur-Regular.ttf create mode 100644 adoc/katex/fonts/KaTeX_Fraktur-Regular.woff create mode 100644 adoc/katex/fonts/KaTeX_Fraktur-Regular.woff2 create mode 100644 adoc/katex/fonts/KaTeX_Main-Bold.ttf create mode 100644 adoc/katex/fonts/KaTeX_Main-Bold.woff create mode 100644 adoc/katex/fonts/KaTeX_Main-Bold.woff2 create mode 100644 adoc/katex/fonts/KaTeX_Main-BoldItalic.ttf create mode 100644 adoc/katex/fonts/KaTeX_Main-BoldItalic.woff create mode 100644 adoc/katex/fonts/KaTeX_Main-BoldItalic.woff2 create mode 100644 adoc/katex/fonts/KaTeX_Main-Italic.ttf create mode 100644 adoc/katex/fonts/KaTeX_Main-Italic.woff create mode 100644 adoc/katex/fonts/KaTeX_Main-Italic.woff2 create mode 100644 adoc/katex/fonts/KaTeX_Main-Regular.ttf create mode 100644 adoc/katex/fonts/KaTeX_Main-Regular.woff create mode 100644 adoc/katex/fonts/KaTeX_Main-Regular.woff2 create mode 100644 adoc/katex/fonts/KaTeX_Math-BoldItalic.ttf create mode 100644 adoc/katex/fonts/KaTeX_Math-BoldItalic.woff create mode 100644 adoc/katex/fonts/KaTeX_Math-BoldItalic.woff2 create mode 100644 adoc/katex/fonts/KaTeX_Math-Italic.ttf create mode 100644 adoc/katex/fonts/KaTeX_Math-Italic.woff create mode 100644 adoc/katex/fonts/KaTeX_Math-Italic.woff2 create mode 100644 adoc/katex/fonts/KaTeX_SansSerif-Bold.ttf create mode 100644 adoc/katex/fonts/KaTeX_SansSerif-Bold.woff create mode 100644 adoc/katex/fonts/KaTeX_SansSerif-Bold.woff2 create mode 100644 adoc/katex/fonts/KaTeX_SansSerif-Italic.ttf create mode 100644 adoc/katex/fonts/KaTeX_SansSerif-Italic.woff create mode 100644 adoc/katex/fonts/KaTeX_SansSerif-Italic.woff2 create mode 100644 adoc/katex/fonts/KaTeX_SansSerif-Regular.ttf create mode 100644 adoc/katex/fonts/KaTeX_SansSerif-Regular.woff create mode 100644 adoc/katex/fonts/KaTeX_SansSerif-Regular.woff2 create mode 100644 adoc/katex/fonts/KaTeX_Script-Regular.ttf create mode 100644 adoc/katex/fonts/KaTeX_Script-Regular.woff create mode 100644 adoc/katex/fonts/KaTeX_Script-Regular.woff2 create mode 100644 adoc/katex/fonts/KaTeX_Size1-Regular.ttf create mode 100644 adoc/katex/fonts/KaTeX_Size1-Regular.woff create mode 100644 adoc/katex/fonts/KaTeX_Size1-Regular.woff2 create mode 100644 adoc/katex/fonts/KaTeX_Size2-Regular.ttf create mode 100644 adoc/katex/fonts/KaTeX_Size2-Regular.woff create mode 100644 adoc/katex/fonts/KaTeX_Size2-Regular.woff2 create mode 100644 adoc/katex/fonts/KaTeX_Size3-Regular.ttf create mode 100644 adoc/katex/fonts/KaTeX_Size3-Regular.woff create mode 100644 adoc/katex/fonts/KaTeX_Size3-Regular.woff2 create mode 100644 adoc/katex/fonts/KaTeX_Size4-Regular.ttf create mode 100644 adoc/katex/fonts/KaTeX_Size4-Regular.woff create mode 100644 adoc/katex/fonts/KaTeX_Size4-Regular.woff2 create mode 100644 adoc/katex/fonts/KaTeX_Typewriter-Regular.ttf create mode 100644 adoc/katex/fonts/KaTeX_Typewriter-Regular.woff create mode 100644 adoc/katex/fonts/KaTeX_Typewriter-Regular.woff2 create mode 100644 adoc/katex/katex.css create mode 100644 adoc/katex/katex.js create mode 100644 adoc/katex/katex.min.css create mode 100644 adoc/katex/katex.min.js create mode 100644 adoc/katex/katex.mjs create mode 100644 adoc/logos/Khronos_Tagline_500px_June18.png create mode 100644 adoc/logos/SYCL_RGB_June16-inkscape-1500.png create mode 100755 adoc/rewriteTable.py create mode 100644 adoc/samples/example.adoc create mode 100644 adoc/scripts/genanchorlinks.py create mode 100755 adoc/scripts/install-rouge.sh create mode 100644 adoc/scripts/reflib.py create mode 100755 adoc/scripts/reflow.py create mode 100644 adoc/scripts/vuidCounts.py create mode 100644 adoc/sycl-2020.pdf create mode 100644 adoc/syclbase.adoc create mode 100644 adoc/translate_math.js create mode 100644 sycl_version.txt diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..6b96ea34 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +out/pdf/sycl-1.2.1.pdf filter=lfs diff=lfs merge=lfs -text diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..a11610bd --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1 @@ +A reminder that this issue tracker is managed by the Khronos Group. Interactions here should follow the Khronos Code of Conduct (https://www.khronos.org/developers/code-of-conduct), which prohibits aggressive or derogatory language. Please keep the discussion friendly and civil. diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt new file mode 100644 index 00000000..9c993d47 --- /dev/null +++ b/COPYRIGHT.txt @@ -0,0 +1,35 @@ +Copyright (c) 2011-2021 The Khronos Group, Inc. + +This specification is protected by copyright laws and contains material proprietary +to Khronos. Except as described by these terms, it or any components +may not be reproduced, republished, distributed, transmitted, displayed, broadcast +or otherwise exploited in any manner without the express prior written permission +of Khronos. + +Khronos grants a conditional copyright license to use and reproduce the +unmodified Specification for any purpose, without fee or royalty, EXCEPT no licenses +to any patent, trademark or other intellectual property rights are granted under these +terms. Parties desiring to implement the specification and make use of Khronos trademarks +in relation to that implementation, and receive reciprocal patent license protection under +the Khronos IP Policy must become Adopters and confirm the implementation as conformant under +the process defined by Khronos for this specification; see https://www.khronos.org/adopters. + +Khronos makes no, and expressly disclaims any, representations or warranties, +express or implied, regarding this specification, including, without limitation: +merchantability, fitness for a particular purpose, non-infringement of any +intellectual property, correctness, accuracy, completeness, timeliness, and +reliability. Under no circumstances will Khronos, or any of its Promoters, +Contributors or Members, or their respective partners, officers, directors, +employees, agents or representatives be liable for any damages, whether direct, +indirect, special or consequential damages for lost revenues, lost profits, or +otherwise, arising from or in connection with these materials. + +Vulkan is a registered trademark and Khronos, OpenXR, SPIR, SPIR-V, SYCL, WebGL, +WebCL, OpenVX, OpenVG, EGL, COLLADA, glTF, NNEF, OpenKODE, OpenKCAM, StreamInput, +OpenWF, OpenSL ES, OpenMAX, OpenMAX AL, OpenMAX IL, OpenMAX DL, OpenML and DevU are +trademarks of The Khronos Group, Inc. ASTC is a trademark of ARM Holdings PLC, +OpenCL is a trademark of Apple Inc. and OpenGL and OpenML are registered trademarks +and the OpenGL ES and OpenGL SC logos are trademarks of Hewlett Packard Enterprise +all used under license by Khronos. All other product names, trademarks, +and/or company names are used solely for identification and belong to their +respective owners. diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 00000000..54cbc384 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,29 @@ +Copyright (c) 2011-2021 The Khronos Group, Inc. + +The files in, and generated output documents from this SYCL-Docs project are +under a mix of copyright and license statements. Refer to the individual files +for specific information. As a general guideline: + +- the AsciiDoctor sources for the SYCL Specifications and other documention + such are the SYCL code samples + are under the Creative Commons Attribution 4.0 International (CC BY 4.0) + license. Details of the license are at: + https://creativecommons.org/licenses/by/4.0/ + +- the source files for building the specification, such as Makefiles + and some scripts, the SYCL headers and the SYCL code samples are + under the Apache 2.0 license. Details of the license are at: + https://www.apache.org/licenses/LICENSE-2.0.html + +Unless required by applicable law or agreed to in writing, material distributed +under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +CONDITIONS OF ANY KIND, either express or implied. If all or a portion of this +material is re-used, notice substantially similar to the following must be included: + + This SYCL specification includes material developed at The Khronos Group + (http://www.khronos.org/). Khronos supplied such material on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, under + the terms of the Creative Commons Attribution 4.0 International (CC BY 4.0) + License (the "License"), available at https://creativecommons.org/licenses/by/4.0/. + All use of such material is governed by the term of the License. Khronos bears + no responsibility whatsoever for additions or modifications to its material. diff --git a/README.md b/README.md new file mode 100644 index 00000000..069b1b63 --- /dev/null +++ b/README.md @@ -0,0 +1,161 @@ +![SYCL Logo](adoc/logos/SYCL_RGB_June16-inkscape-1500.png) + +[//]: # "to update to newer CI when going public ![Build Status](https://api.travis-ci.com/KhronosGroup/SYCL-Docs.svg?branch=master)"" +[//]: # "to update to newer CI when going public [![SPEC master](https://img.shields.io/badge/SPEC-master-red.svg?logo=adobe-acrobat-reader)](https://khronosgroup.github.io/SYCL-Docs/sycl/sycl.pdf)" +[![SPEC master](https://img.shields.io/badge/SPEC-master-red.svg?logo=adobe-acrobat-reader)](https://gitlab.khronos.org/sycl/Specification/-/jobs) +[![SPEC 2020-1](https://img.shields.io/badge/SPEC-2020--1-orange.svg?logo=adobe-acrobat-reader)](https://www.khronos.org/registry/SYCL/specs/sycl-2020-provisional.pdf) +[![Join the Slack group](https://img.shields.io/badge/chat-on%20slack-blue.svg?logo=slack)](https://khr.io/slack) + +# SYCL Open Source Specification + +This repository contains the source and tool chain used to generate +the formal SYCL specifications found on [https://www.khronos.org/sycl/](https://www.khronos.org/sycl/). + +## Reading the latest version of the SYCL specification + +The GitLab CI pipeline builds the specification. This is accessible +from this page, under the green check symbol, on the top right of the +page or more generally from the rocket symbol on the left side. + +Then on the pipeline page, select the *Jobs* tab and click on the +*download* icon on the bottom right. + + +## Building the SYCL specification + +### Using GitLab CI + +The simplest way to build the specification is not to actually build +it, but to rely on the Khronos continuous integration process which +builds automatically a branch when it is changed on +https://gitlab.khronos.org/sycl/Specification + +Look at CI/CD-Jobs (the rocket-ship icon on the left menu bar or +https://gitlab.khronos.org/sycl/Specification/-/jobs), click on the +`Download` icon for the latest CI job in the branch of interest or +click on `Passed` to dive into more details. Once unzipping the +compilation artifacts, look inside `adoc/out` directory to find the +HTML and PDF version. + +Note that to read the HTML specification correctly with all the +mathematical symbols, you need also to have the `katex` directory +along the `html` one. This might not be the case if your downloading +framework lazily unzips just what you read. + +You can use this CI infrastructure while developing: you can git-push +or git-force-push your branch on the server and go to CI/CD-Jobs to +look at the compiled version. + +All this works because of the existing `.gitlab-ci.yml` recipe. + +### Using pre-configured AsciiDoctor-capable Docker image + +Compiling the specification requires some specific AsciiDoctor related +packages. + +To simplify the setup, Khronos provides a pre-configured Docker Linux +Ubuntu image you can use on a Docker executor to compile the +specification on various OS able to run Docker. + +Assuming you are on Debian/Ubuntu Linux, the first time you need to +install Docker with for example: +```bash +sudo apt update +sudo apt install docker.io +``` + +The base image used to build the specifications can be downloaded or +updated to the latest version via +```bash +docker pull khronosgroup/docker-images:vulkan-docs-base +``` +Or you can manually generate the image using the script provided in +`https://github.com/KhronosGroup/DockerContainers`. + + +To compile the specification you can rely on the `Makefile` inside the +`adoc` directory, for example with: +```bash +cd adoc +make clean docker-html docker-pdf +``` + +There are a few variables defined in the `Makefile` you can set to +change the behavior, such as to display verbosely the compilation +process: +```bash +make QUIET= clean docker-html docker-pdf +``` + +If you need to launch explicitly Docker without using `make` on the +host, look at the `adoc/Makefile` and imitate on your system how +Docker is launched. + +Since the Docker image is old, there is a new path using a script to +upgrade the files inside the Docker image to be used as: +```bash +make DOCKER_COMMAND="make QUIET= --directory=/sycl/adoc clean html pdf" dock +``` + +### Using native computer + +If you are using a Debian/Ubuntu Linux distribution, you can look at +how the previous process works and how the Docker image is done at +https://github.com/KhronosGroup/DockerContainers and specifically +https://github.com/KhronosGroup/DockerContainers/blob/master/Dockerfile.vulkan-docs-base +which gives an idea of the packages to install and +https://github.com/KhronosGroup/DockerContainers/blob/master/entrypoint.vulkan.sh + +*TODO*: find the minimal recipe. +```bash +sudo apt update +sudo apt install bison \ + build-essential \ + cmake \ + flex \ + fonts-lyx \ + g++ \ + ghostscript \ + git \ + libcairo2-dev \ + libffi-dev \ + libgdk-pixbuf2.0-dev \ + libpango1.0-dev \ + libreadline-dev \ + libxml2-dev \ + nodejs \ + node-escape-string-regexp \ + node-he \ + node-lunr \ + poppler-utils \ + python3 \ + ruby-dev + +sudo apt clean + +sudo gem install asciidoctor \ + asciidoctor-diagram \ + asciidoctor-mathematical \ + asciidoctor-pdf \ + coderay \ + json-schema \ + i18n \ + pygments.rb \ + rouge \ + text-hyphen +``` + +Then use for example: +```bash +make QUIET= clean html pdf +``` + +There is also some discussion back-ground in +https://gitlab.khronos.org/sycl/Specification/-/merge_requests/484#note_270338 + + +### Windows recipe + +*TODO*: Investigate the Docker route +https://docs.docker.com/docker-for-windows/install/ , WSL2, CygWin, +VCPKG... diff --git a/adoc/.gitignore b/adoc/.gitignore new file mode 100644 index 00000000..b05eeef3 --- /dev/null +++ b/adoc/.gitignore @@ -0,0 +1 @@ +.asciidoctor diff --git a/adoc/Makefile b/adoc/Makefile new file mode 100644 index 00000000..260a3fd4 --- /dev/null +++ b/adoc/Makefile @@ -0,0 +1,312 @@ +# Copyright (c) 2011-2021 The Khronos Group, Inc. +# +# SPDX-License-Identifier: Apache-2.0 + +# SYCL Specification makefile + +# If a recipe fails, delete its target file. Without this cleanup, the leftover +# file from the failed recipe can falsely satisfy dependencies on subsequent +# runs of `make`. +.DELETE_ON_ERROR: + +# IMAGEOPTS is normally set to generate inline SVG images, but can be +# overridden to an empty string, since the inline option doesn't work +# well with our HTML diffs. +# This select opts as explained in "Taming SVGs" of +# https://asciidoctor.org/docs/user-manual/#taming-svgs +# Do not use inline because it breaks the text of the figures in the +# HTML output. +IMAGEOPTS = + +# The default 'all' target builds the following sub-targets: +# html - HTML single-page API specification +# pdf - PDF single-page API specification + +# Jon: don't build PDF yet - some weird errors (related to code: macro?) +all: html + +# +QUIET ?= @ +PYTHON ?= python3 +ASCIIDOC ?= asciidoctor +# Using such variables allows running local version with: +# BUNDLE_GEMFILE=.../asciidoctor-pdf/Gemfile make QUIET= ASCIIDOCPDF="bundle exec asciidoctor-pdf" pdf +ASCIIDOCPDF ?= asciidoctor-pdf +RUBY = ruby +NODEJS = node +PATCH = patch +RM = rm -f +RMRF = rm -rf +MKDIR = mkdir -p +CP = cp +ECHO = echo +GS_EXISTS = $(shell command -v gs 2> /dev/null) + +# Path to Python scripts used in generation +SCRIPTS = scripts + +# Compute the absolute directory name from the location of this Makefile +# so that we can compile from anywhere even if we use make -f +# : +SYCL_DIR := $(abspath $(dir $(firstword $(MAKEFILE_LIST)))/..) + +# Target directories for output files +# HTMLDIR - 'html' target +# PDFDIR - 'pdf' target +OUTDIR = $(GENERATED)/out +HTMLDIR = $(OUTDIR)/html +PDFDIR = $(OUTDIR)/pdf + +# PDF Equations are written to SVGs, this dictates the location to +# store those files (temporary) +PDFMATHDIR = $(OUTDIR)/equations_temp + +# Set VERBOSE to -v to --verbose to see what asciidoc is doing. +VERBOSE = --verbose + +# Some AsciiDoctor attributes (such as OPENCL_VERSION, +# SYCL_LANGUAGE_VERSION, SYCL_NAME, SYCL_VERSION & SYCL_REVISION) are +# based on this external configuration file: +include $(SYCL_DIR)/sycl_version.txt + +# In particular, SYCL_LANGUAGE_VERSION is derived from other values +SYCL_LANGUAGE_VERSION=$(shell printf "%04d%02d" $(SYCLLANGVERSION) \ + $(SYCLREVISION)) +SYCL_NAME=$(SYCLNAME) +SYCL_VERSION=$(SYCLVERSION) +SYCL_REVISION=$(SYCLREVISION) +# Name the generated spec from the revision +SPEC_BASE_NAME=$(shell echo $(SYCL_NAME)-$(SYCL_VERSION) \ + | tr [:upper:] [:lower:]) + +# asciidoc build attributes to set (defaults are usually OK) +# NOTEOPTS sets options controlling which NOTEs are generated +# ATTRIBOPTS sets the API revision and enables KaTeX generation +# VERSIONATTRIBS sets attributes for enabled API versions +# EXTRAATTRIBS sets additional attributes, if passed to make +# ADOCMISCOPTS miscellaneous options controlling error behavior, etc. +# ADOCEXTS asciidoctor extensions to load +# ADOCOPTS options for asciidoc->HTML5 output + +# Uncomment to get TODO notes +NOTEOPTS = --attribute showtodos + +# Spell out ISO 8601 format as not all date commands support --rfc-3339 +SPECDATE = $(shell echo `date -u "+%Y-%m-%d %TZ"`) + +# Generate Asciidoc attributes for spec remark +# Could use `git log -1 --format="%cd"` to get branch commit date +# This used to be a dependency in the spec html/pdf targets, +# but that's likely to lead to merge conflicts. Just regenerate +# when pushing a new spec for review to the sandbox. +# The dependency on HEAD is per the suggestion in +# http://neugierig.org/software/blog/2014/11/binary-revisions.html +# Get back something clearer from the old LaTeX-based specification by +# name the exact annotated tag. If not, list a path to the closest tag. +SPECREMARK = from git $(shell \ + echo `git describe --exact-match 2> /dev/null \ + || ( git describe 2> /dev/null; echo "on branch:" ; \ + git symbolic-ref --short HEAD 2> /dev/null \ + || echo Git branch not available )`) \ + commit: $(shell echo `git log -1 --format="%H" 2> /dev/null \ + || echo Git commit not available`) + +# Some of the attributes used in building all spec documents: +# chapters - absolute path to chapter sources +# appendices - absolute path to appendix sources +# images - absolute path to images +# code_dir - absolute path of the directory with code samples +# header_dir - absolute path of the directory with header samples +# generated - absolute path to generated sources +# refprefix - controls which generated extension metafiles are +# included at build time. Must be empty for specification, +# 'refprefix.' for refpages (see ADOCREFOPTS below). +ATTRIBOPTS = --attribute revdate="$(SPECDATE)" \ + --attribute revremark="$(SPECREMARK)" \ + --attribute OPENCL_VERSION="$(OPENCLVERSION)" \ + --attribute SYCL_LANGUAGE_VERSION="$(SYCLLANGVERSION)" \ + --attribute SYCL_NAME="$(SYCLNAME)" \ + --attribute SYCL_VERSION="$(SYCLVERSION)" \ + --attribute SYCL_REVISION="$(SYCLREVISION)" \ + --attribute stem=latexmath \ + --attribute imageopts="$(IMAGEOPTS)" \ + --attribute config=$(CURDIR)/config \ + --attribute images=$(IMAGEPATH) \ + --attribute code_dir=$(CODE_DIR) \ + --attribute header_dir=$(HEADER_DIR) \ + --attribute generated=$(GENERATED) \ + --attribute refprefix \ + $(VERSIONATTRIBS) +ADOCMISCOPTS = --require asciidoctor-diagram --failure-level ERROR +ADOCEXTS = --require $(CURDIR)/config/spec-macros.rb \ + --require $(CURDIR)/config/rouge_sycl.rb +ADOCOPTS = --doctype book $(ADOCMISCOPTS) $(ATTRIBOPTS) \ + $(NOTEOPTS) $(VERBOSE) $(ADOCEXTS) + +ADOCHTMLEXTS = --require $(CURDIR)/config/katex_replace.rb \ + --require $(CURDIR)/config/loadable_html.rb + +# ADOCHTMLOPTS relies on the relative runtime path from the output HTML +# file to the katex scripts being set with KATEXDIR. This is overridden +# by some targets. +# ADOCHTMLOPTS also relies on the absolute build-time path to the +# 'stylesdir' containing our custom CSS. +KATEXDIR = katex +ADOCHTMLOPTS = $(ADOCHTMLEXTS) --attribute katexpath=$(KATEXDIR) \ + --attribute stylesheet=khronos.css --attribute stylesdir=$(CURDIR)/config \ + --attribute sectanchors +ADOCPDFEXTS = --require asciidoctor-pdf --require asciidoctor-mathematical \ + --require $(CURDIR)/config/asciidoctor-mathematical-ext.rb +ADOCPDFOPTS = $(ADOCPDFEXTS) --attribute mathematical-format=svg \ + --attribute imagesoutdir=$(PDFMATHDIR) \ + --attribute pdf-stylesdir=$(CURDIR)/config/themes \ + --attribute pdf-theme=pdf \ + --attribute hyphens=en_us + +.PHONY: directories + +# Images used by the spec. These are included in generated HTML now. +IMAGEPATH = $(CURDIR)/images +SVGFILES = $(wildcard $(IMAGEPATH)/*.svg) + +# Code samples +CODE_DIR = $(CURDIR)/code + +# Header samples +HEADER_DIR = $(CURDIR)/headers + +# Top-level spec source file +SPECSRC = syclbase.adoc +# Static files making up sections of the API spec. +SPECFILES = $(wildcard *.adoc) $(wildcard chapters/*.adoc) + +# Shorthand for where different types of generated files go. +# All can be relocated by overriding GENERATED in the make invocation. +GENERATED = $(CURDIR) +# All non-format-specific dependencies +COMMONDOCS = $(SPECFILES) $(GENDEPENDS) + +# Install katex in $(OUTDIR)/katex for reference by all HTML targets +# README.md is a proxy for all the katex files that need to be installed +katexinst: KATEXDIR = katex +katexinst: $(OUTDIR)/$(KATEXDIR)/README.md + +$(OUTDIR)/$(KATEXDIR)/README.md: katex/README.md + $(QUIET)$(MKDIR) $(OUTDIR) + $(QUIET)$(RMRF) $(OUTDIR)/$(KATEXDIR) + $(QUIET)$(CP) --archive katex $(OUTDIR) + +# Script to add href to anchors +GENANCHORLINKS = $(SCRIPTS)/genanchorlinks.py + +# Spec targets +# There is some complexity to try and avoid short virtual targets like 'html' +# causing specs to *always* be regenerated. +ROSWELL = ros +ROSWELLOPTS ?= dynamic-space-size=4000 +CHUNKER = $(HOME)/common-lisp/asciidoctor-chunker/roswell/asciidoctor-chunker.ros +CHUNKINDEX = $(CURDIR)/config/chunkindex +# Only the $(ROSWELL) step is required unless the search index is to be +# generated and incorporated into the chunked spec. +# +# Dropped $(QUIET) for now +# Should set NODE_PATH=/usr/local/lib/node_modules or wherever, outside Makefile +# Copying chunked.js into target avoids a warning from the chunker +chunked: $(HTMLDIR)/$(SPEC_BASE_NAME).html $(SPECSRC) $(COMMONDOCS) + $(QUIET)$(PATCH) $(HTMLDIR)/$(SPEC_BASE_NAME).html \ + -o $(HTMLDIR)/prechunked.html $(CHUNKINDEX)/custom.patch + $(QUIET)$(CP) $(CHUNKINDEX)/chunked.css $(CHUNKINDEX)/chunked.js \ + $(CHUNKINDEX)/lunr.js $(HTMLDIR) + $(QUIET)$(ROSWELL) $(ROSWELLOPTS) $(CHUNKER) \ + $(HTMLDIR)/prechunked.html -o $(HTMLDIR) + $(QUIET)$(RM) $(HTMLDIR)/prechunked.html + $(QUIET)$(RUBY) $(CHUNKINDEX)/generate-index.rb $(HTMLDIR)/chap*html | \ + $(NODEJS) $(CHUNKINDEX)/build-index.js > $(HTMLDIR)/search.index.js + +html: $(HTMLDIR)/$(SPEC_BASE_NAME).html $(SPECSRC) $(COMMONDOCS) + +%.html: KATEXDIR = ../katex +%.html: $(SPECSRC) $(COMMONDOCS) katexinst + $(QUIET)$(ASCIIDOC) --backend html5 $(ADOCOPTS) $(ADOCHTMLOPTS) \ + --out-file $@ $(SPECSRC) + $(QUIET)$(PYTHON) $(GENANCHORLINKS) $@ $@ + $(QUIET)$(NODEJS) translate_math.js $@ + +diff_html: $(HTMLDIR)/diff.html $(SPECSRC) $(COMMONDOCS) + +$(HTMLDIR)/diff.html: KATEXDIR = ../katex +$(HTMLDIR)/diff.html: $(SPECSRC) $(COMMONDOCS) katexinst + $(QUIET)$(ASCIIDOC) --backend html5 $(ADOCOPTS) $(ADOCHTMLOPTS) \ + --attribute diff_extensions="$(DIFFEXTENSIONS)" \ + --require $(CURDIR)/config/extension-highlighter.rb --trace \ + --out-file $@ $(SPECSRC) + $(QUIET)$(NODEJS) translate_math.js $@ + +pdf: $(PDFDIR)/$(SPEC_BASE_NAME).pdf $(SPECSRC) $(COMMONDOCS) + +%.pdf: $(SPECSRC) $(COMMONDOCS) + $(QUIET)$(MKDIR) $(PDFDIR) + $(QUIET)$(MKDIR) $(PDFMATHDIR) + $(QUIET)$(ASCIIDOCPDF) --trace $(ADOCOPTS) $(ADOCPDFOPTS) \ + --out-file $@ $(SPECSRC) +ifndef GS_EXISTS + $(QUIET) echo "Warning: Ghostscript not installed, skipping pdf optimization" +else + $(QUIET)$(CURDIR)/config/optimize-pdf $@ + $(QUIET)rm $@ + $(QUIET)mv $*-optimized.pdf $@ +endif + $(QUIET)rm -rf $(PDFMATHDIR) + +# Reflow text in spec sources +REFLOW = $(SCRIPTS)/reflow.py +REFLOWOPTS = -overwrite + +reflow: + $(QUIET) echo "Warning: please verify the spec outputs build without changes!" + $(PYTHON) $(REFLOW) $(REFLOWOPTS) $(SPECSRC) $(SPECFILES) + +# Clean generated and output files + +clean: clean_html clean_pdf + +clean_html: + $(QUIET)$(RMRF) $(HTMLDIR) $(OUTDIR)/katex + +clean_pdf: + $(QUIET)$(RMRF) $(PDFDIR) + +# Expose docker-TARGET to forward a TARGET inside a Docker container. +# For example: +# make docker-clean docker-html docker-pdf +# Also useful to have a shell inside docker: +# make docker-bash +docker-%: + # Run with current user and group id the published AsciiDoctor + # capable Khronos docker image with current SYCL specification + # directory mounted in /sycl + # Re-set MAKEFLAGS to pass variables to the inner make since + # variables are dropped by docker. + sudo docker run --user `id --user`:`id --group` \ + --interactive --tty --rm \ + --volume $(SYCL_DIR):/sycl khronosgroup/docker-images:vulkan-docs-base \ + $(MAKE) MAKEFLAGS="$(MAKEFLAGS)" --directory=/sycl/adoc $* + +dock: + # First update the Docker image to latest Gem with rouge and run + # $DOCKER_COMMAND with current user and group id the published + # AsciiDoctor capable Khronos docker image with current SYCL + # specification directory mounted in /sycl + sudo docker run \ + --interactive --tty --rm \ + -e USER_ID=`id --user` -e GROUP_ID=`id --group` \ + --volume $(SYCL_DIR):/sycl khronosgroup/docker-images:vulkan-docs-base \ + /sycl/adoc/scripts/install-rouge.sh \ + $(DOCKER_COMMAND) + +# Use a default rule to just execute by the shell the given rule. +# For example "make bash" will run bash, "make env" will display the +# environment to debug the configuration, etc. +# Mainly to be used in docker context. +.DEFAULT: + $@ diff --git a/adoc/chapters/acknowledgements.adoc b/adoc/chapters/acknowledgements.adoc new file mode 100644 index 00000000..83b04d69 --- /dev/null +++ b/adoc/chapters/acknowledgements.adoc @@ -0,0 +1,80 @@ +[[acknowledgements]] += Acknowledgements + +*Editors* + + * Maria Rovatsou, Codeplay + * Lee Howes, Qualcomm + * Ronan Keryell, Xilinx (current) + +*Contributors* + + * Eric Berdahl, Adobe + * Shivani Gupta, Adobe + * David Neto, Altera + * Brian Sumner, AMD + * Thomas Applencourt, Argonne National Laboratory + * Hal Finkel, Argonne National Laboratory + * Kevin Harms, Argonne National Laboratory + * Nevin Liber, Argonne National Laboratory + * Anastasia Stulova, ARM + * Balázs Keszthelyi, Broadcom + * Alexandra Crabb, Caster Communications + * Stuart Adams, Codeplay + * Gordon Brown, Codeplay + * Morris Hafner, Codeplay + * Alexander Johnston, Codeplay + * Marios Katsigiannis, Codeplay + * Paul Keir, Codeplay + * Steffen Larsen, Codeplay + * Victor Lomüller, Codeplay + * Tomas Matheson, Codeplay + * Duncan McBain, Codeplay + * Ralph Potter, Codeplay + * Ruyman Reyes, Codeplay + * Andrew Richards, Codeplay + * Maria Rovatsou, Codeplay + * Panagiotis Stratis, Codeplay + * Michael Wong, Codeplay + * Peter Žužek, Codeplay + * Matt Newport, EA + * Ruslan Arutyunyan, Intel + * Alexey Bader, Intel + * James Brodman, Intel + * Ilya Burylov, Intel + * Jessica Davies, Intel + * Felipe de Azevedo Piovezan, Intel + * Allen Hux, Intel + * Michael Kinsner, Intel + * Greg Lueck, Intel + * John Pennycook, Intel + * Roland Schulz, Intel + * Sergey Semenov, Intel + * Jason Sewall, Intel + * James O'Riordon, Khronos + * Jon Leech, Luna Princeps LLC + * Kathleen Mattson, Miller & Mattson, LLC + * Dave Miller, Miller & Mattson, LLC + * Neil Trevett, NVIDIA + * Lee Howes, Qualcomm + * Chu-Cheow Lim, Qualcomm + * Jack Liu, Qualcomm + * Ruihao Zhang, Qualcomm + * Dave Airlie, Red Hat + * Aksel Alpay, Self + * Dániel Berényi, Self + * Máté Nagy-Egri, Stream HPC + * Tom Deakin, University of Bristol + * Philip Salzmann, University of Innsbruck + * Peter Thoman, University of Innsbruck + * Biagio Cosenza, University of Salerno + * Paul Preney, University of Windsor + * Andrew Gozillon, Xilinx + * Gauthier Harnisch, Xilinx + * Ronan Keryell, Xilinx + * Lin-Ya Yu, Xilinx + +// Jon: in other specs we credit Khronos staff who have helped. +// Ronan: indeed! Just reading this while actually adding the... Khronos +// staff! ;-) +// Could do that here. diff --git a/adoc/chapters/architecture.adoc b/adoc/chapters/architecture.adoc new file mode 100644 index 00000000..500efaa0 --- /dev/null +++ b/adoc/chapters/architecture.adoc @@ -0,0 +1,1862 @@ +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% begin architecture %%%%%%%%%%%%%%%%%%%%%%%%%%%% + +[[architecture]] += SYCL architecture + +This chapter describes the structure of a SYCL application, and how the +SYCL generic programming model lays out on top of a number of <>s. + + +== Overview + +SYCL is an open industry standard for programming a heterogeneous system. The +design of SYCL allows standard {cpp} source code to be written such that it can +run on either an heterogeneous device or on the <>. + +The terminology used for SYCL inherits historically from OpenCL with some +SYCL-specific additions. However SYCL is a generic {cpp} programming model +that can be laid out on top of other heterogeneous APIs apart from OpenCL. +SYCL implementations can provide <>s for various heterogeneous APIs, +implementing the SYCL general specification on top of them. We refer to this +heterogeneous API as the <>. The SYCL general specification +defines the behavior that all SYCL implementations must expose to SYCL users +for a SYCL application to behave as expected. + +A function object that can execute on a <> exposed by a <> +is called a <>. + +To ensure maximum interoperability with different <>s, software +developers can access the <> alongside the SYCL general API +whenever they include the <> interoperability headers. +However, interoperability is a <>-specific feature. +An application that uses interoperability does not conform to the +SYCL general application model, since it is not portable across backends. + +// Note below I leave the reference to OpenCL intentionally + +The target users of SYCL are {cpp} programmers who want all the performance and +portability features of a standard like OpenCL, but with the flexibility to use +higher-level {cpp} abstractions across the host/device code boundary. +Developers can use most of the abstraction features of {cpp}, such as +templates, classes and operator overloading. + +However, some {cpp} language features are not permitted inside +kernels, due to the limitations imposed by the capabilities of the underlying +heterogeneous platforms. +These features include virtual functions, virtual inheritance, +throwing/catching exceptions, and run-time type-information. These features are +available outside kernels as normal. Within these constraints, developers can +use abstractions defined by SYCL, or they can develop their own on top. These +capabilities make SYCL ideal for library developers, middleware providers and +application developers who want to separate low-level highly-tuned algorithms +or data structures that work on heterogeneous systems from higher-level software +development. Software developers can produce templated algorithms that are easily +usable by developers in other fields. + + +[[sec:anatomy]] +== Anatomy of a SYCL application + +Below is an example of a typical <> which schedules a job to run +in parallel on any heterogeneous device available. + +// An AsciiDoctor "feature", the language is specified as the second +// parameter of this attribute, even if we do not want it. So add a +// empty language with ",," so the highlighter can go on using the +// language specified in ":source-highlighter:" +[source,,linenums] +---- +include::{code_dir}/anatomy.cpp[lines=4..-1] +---- + +At line 1, we [code]#{hash}include# the SYCL header files, which +provide all of the SYCL features that will be used. + +A SYCL application runs on a <>. +The application is structured in three scopes which specify the different sections; +<>, <> and <>. +The <> specifies a single kernel function that will +be, or has been, compiled by a <> and executed on a +<>. In this example <> is defined by lines +26 to 29. The <> specifies a unit of work which is +comprised of a <> and <>. In this +example <> is defined by lines 21 to 30. The +<> specifies all other code outside of a +<>. +These three scopes are used to control the application flow and the +construction and lifetimes of the various objects used within SYCL, as +explained in <>. + +A <> is the scoped block of code that will be +compiled using a device compiler. This code may be defined by the +body of a lambda function or by the [code]#operator()# function of +a function object. Each instance of the +<> will be executed as a single, though not +necessarily entirely independent, flow of execution and has to adhere +to restrictions on what operations may be allowed to enable device +compilers to safely compile it to a range of underlying devices. + +The [code]#parallel_for# member function can be templated with a class. +This class is used to manually name the +kernel when desired, such as to avoid a compiler-generated name when debugging +a kernel defined through a lambda, to provide a known name with which to apply +build options to a kernel, or to ensure compatibility with multiple +compiler-pass implementations. + +The [code]#parallel_for# member function creates an instance of a <>, +which is the entity that will be enqueued within a +command group. In the case of [code]#parallel_for# the +<> will be executed over the given range from 0 to 1023. +The different member functions to +execute kernels can be found in <>. + +A <> is the syntactic scope wrapped by the construction +of a <> as seen on line 21. The +<> may invoke only a single +<>, and it takes a parameter of type command group +[code]#handler#, which is constructed by the runtime. + +All the requirements for a kernel to execute are +defined in this <>, as described in +<>. In this case the constructor used +for [code]#myQueue# on line 15 is the default constructor, which allows +the queue to select the best underlying device to execute on, leaving the +decision up to the runtime. + +In SYCL, data that is required within a <> must +be contained within a <>, <>, or <> allocation, as described in +<>. We +construct a buffer on line 18. Access to the <> is controlled via +an <> which is constructed on line 23. +The <> is used to +keep track of access to the data and the <> is used to request +access to the data on a queue, as well as to track the dependencies between +<>. In this example the <> is used to +write to the data buffer on line 28. + + +[[sec:normativerefs]] +== Normative references + +// Jon: are any of the OpenCL specifications normative? They are also +// referred to from the SYCL spec, and some of the definitions appear to be +// required. + +The documents in the following list are referred to within this SYCL +specification, and their content is a requirement for this document. + + . *{cpp17}:* <>, referred to in this + specification as the {cpp} core language. The SYCL specification refers to + language in the following {cpp} defect reports and assumes a compiler that + implements them: <>. + . *{cpp20}:* <>, referred to in this specification as the next {cpp} specification. + +[[sec:nonnormativerefs]] +== Non-normative notes and examples + +Unless stated otherwise, text within this SYCL specification is normative and defines +the required behavior of a SYCL implementation. Non-normative / informational notes +are included within this specification using a "`note`" callout, of the form: + +[NOTE] +==== +Information within a note callout, such as this text, is for informational purposes +and does not impose requirements on or specify behavior of a SYCL implementation. +==== + +Source code examples within the specification are provided to aid with understanding, +and are non-normative. + +In case of any conflict between a non-normative note or source example, and normative +text within the specification, the normative text must be taken to be correct. + +[[sec:platformmodel]] +== The SYCL platform model + +The SYCL platform model is based on the OpenCL platform model. +The model consists of a host connected to one or more heterogeneous devices, +called <>. + +A SYCL <> is constructed, either directly by the user or implicitly +when creating a <>, to hold all the runtime information required by +the SYCL runtime and the <> to operate on a device, or group of devices. +When a group of devices can be grouped together on the same context, they have +some visibility of each other's memory objects. The SYCL runtime can assume that memory +is visible across all devices in the same <>. +Not all devices exposed from the same <> can be grouped together +in the same <>. + +A SYCL application executes on the host as a standard {cpp} program. +<> are exposed through different <> to the SYCL application. +The SYCL application submits <> to <>. +Each <> enables execution on a given device. + +The <> then extracts operations from the +<>, e.g. an explicit copy operation or a +<>. When the operation is a +<>, the <> uses a +<>-specific mechanism to extract the device binary from the SYCL +application and pass it to the heterogeneous API for execution on the +<>. + +A SYCL <> is divided into one or more compute units (CUs) which are each divided +into one or more processing elements (PEs). Computations on a device occur +within the processing elements. +How computation is mapped to PEs is <> and <> specific. +Two devices exposed via two different backends can map computations differently to the +same device. + +When a SYCL application contains <> objects, the SYCL +implementation must provide an offline compilation mechanism that enables the +integration of the device binaries into the SYCL application. +The output of the offline compiler can be an intermediate representation, such as +SPIR-V, that will be finalized during execution or a final device ISA. + +A device may expose special purpose functionality as a _built-in_ function. +The SYCL API exposes functions to query and dispatch said _built-in_ functions. +Some <> and <> may not support programmable kernels, and only support +_built-in_ functions. +// TODO: Conformance of these custom-devices? + + +== The SYCL backend model + +SYCL is a generic programming model for the {cpp} language that can target multiple +heterogeneous APIs, such as OpenCL. + +SYCL implementations enable these target APIs by implementing <>. +For a SYCL implementation to be conformant on said <>, it must execute +the SYCL generic programming model on the backend. All SYCL implementations must +provide at least one backend. + +The present document covers the SYCL generic interface available to +all <>. How the SYCL generic interface maps to a particular +<> is defined either by a separate <> specification +document, provided by the Khronos SYCL group, or by the SYCL +implementation documentation. Whenever there is a <> +specification document, this takes precedence over SYCL implementation +documentation. + +When a SYCL user builds their SYCL application, she decides which of the +<> will be used to build the SYCL application. This is called the set +of _active backends_. Implementations must ensure that the active +backends selected by the user can be used simultaneously by the SYCL +implementation at runtime. If two backends are available at compile time but +will produce an invalid SYCL application at runtime, the SYCL implementation +must emit a compilation error. + +A SYCL application built with a number of active backends does not necessarily +guarantee that said backends can be executed at runtime. +The subset of active backends available at runtime is called +_available backends_. +A backend is said to be _available_ if the host platform where the +SYCL application is executed exposes support for the heterogeneous API +required for the <>. + +It is implementation dependent whether certain backends require third-party +libraries to be available in the system. Failure to have all dependencies +required for all active backends at runtime will cause the SYCL application to +not run. + +Once the application is running, users can query what SYCL platforms are available. +SYCL implementations will expose the devices provided by each backend grouped +into platforms. A backend must expose at least one platform. + +Under the <> model, SYCL objects can contain one or multiple references +to a certain <> native type. +Not all SYCL objects will map directly to a <> native type. +The mapping of SYCL objects to <> native types is defined by the +<> specification document when available, or by the SYCL implementation +otherwise. + +To guarantee that multiple <> objects can interoperate with +each other, SYCL memory objects are not bound to a particular <>. +SYCL memory objects can be accessed from any device exposed by an +_available_ backend. +SYCL Implementations can potentially map SYCL memory objects to +multiple native types in different <>. + +Since SYCL memory objects are independent of any particular <>, +SYCL <> can request access to memory objects allocated +by any <>, and execute it on the backend associated with the <>. +This requires the SYCL implementation to be able to transfer memory objects +across <>. + +USM allocations are subject to the limitations +described in <>. + +When a SYCL application runs on any number of <> without relying on +any <>-specific behavior or interoperability, it is said to be a +SYCL general application, and it is expected to run in any SYCL-conformant +implementation that supports the required features for the application. + + +=== Platform mixed version support + +The SYCL generic programming model exposes a number of <>, each of +them exposing a number of <>. Each <> is bound +to a certain <>. SYCL <> associated with said <> +are associated with that <>. + +Although the APIs in the SYCL generic programming model are defined according +to this specification and their version is indicated by the macro +[code]#SYCL_LANGUAGE_VERSION#, this does not apply to APIs exposed by the +<>. Each <> provides its own document that defines its APIs, +and that document tells how to query for the device and platform versions. + + +== SYCL execution model + +As described in <>, a <> is comprised +of three scopes: <>, <>, and +<>. Code in the <> and +<> runs on the host and is governed by the +_SYCL application execution model_. Code in the kernel scope runs on a +device and is governed by the _SYCL kernel execution model_. + +[NOTE] +==== +A SYCL device does not necessarily correspond to a physical accelerator. +A SYCL implementation may choose to expose some or all of the host's +resources as a SYCL device; such an implementation would execute +code in <> on the host, but that code would still be governed by +the _SYCL kernel execution model_. +==== + + +[[sec:executionmodel]] +=== SYCL application execution model + +The SYCL application defines the execution order of the kernels by grouping +each kernel with its requirements into a <>. +<> are submitted +for execution via a <> object, which defines the device where the kernel +will run. This specification sometimes refers to this as "`submitting the +kernel to a device`". The same <> object can be submitted to +different queues. When a <> is submitted to a SYCL <>, +the requirements of the kernel execution are captured. The implementation can +start executing a kernel as soon as its requirements have been satisfied. + +==== <> resources managed by the SYCL application + +The SYCL runtime integrated with the SYCL application will manage +the resources required by the <> +to manage the heterogeneous devices it is providing access to. +This includes, but is not limited to, resource handlers, memory pools, +dispatch queues and other temporary handler objects. + +The SYCL programming interface represents the lifetime of the resources +managed by the SYCL application using RAII rules. +Construction of a SYCL object will typically entail the creation of multiple +<> objects, which will be properly released on destruction of said +SYCL object. +The overall rules for construction and destruction are detailed in +<>. +Those <> with a <> document will detail how the resource +management from SYCL objects map down to the <> objects. + +In SYCL, the minimum required object for submitting work to devices is +the <>, which contains references to a <>, <> +and a <> internally. + +The resources managed by SYCL are: + +// Note enumerate below was meant originally to showcase SYCL features +// for each OpenCL resource, this is now re-worded to cover for a +// general case of what resources are managed. +// Also, references to the SYCL API are removed to make text independent +// from changes in the programming + + . <>: all features of <>s are implemented by + platforms. A platform can be viewed as a given vendor's runtime and the + devices accessible through it. Some devices will only be accessible to + one vendor's runtime and hence multiple platforms may be present. SYCL + manages the different platforms for the user which are accessible through a + [code]#sycl::platform# object. + . <>: any <> resource that is acquired by the user is + attached to a context. A context contains a collection of devices that + the host can use and manages memory objects that can be shared between + the devices. Devices belonging to the same <> must be able to + access each other's global memory using some implementation-specific + mechanism. A given context can only wrap devices owned by a single + platform. A context is exposed to the user with a + [code]#sycl::context# object. + . <>: platforms provide one or more devices for executing SYCL + kernels. In SYCL, a device is accessible through a + [code]#sycl::device# object. + . <>: the SYCL functions that run on SYCL devices are defined + as {cpp} function objects (a named function object type or a lambda + function). A kernel can be introspected through a + [code]#sycl::kernel# object. ++ +-- +Note that some <> may expose non-programmable functionality as +pre-defined kernels. +-- + . <>: Kernels are stored internally in the SYCL + application as device images, and these device images can be grouped into a + [code]#sycl::kernel_bundle# object. These objects provide a way for the + application to control the online compilation of kernels for devices. + . <>: SYCL kernels execute in command queues. The user must + create a [code]#sycl::queue# object, + which references an associated context, platform and + device. The context, platform and device may be chosen automatically, or + specified by the user. + SYCL queues execute <> on a particular device of a + particular context, but can have dependencies from any device on any + available <>. + +The SYCL implementation guarantees the correct initialization and +destruction of any resource handled by the underlying <>, except +for those the user has obtained manually via the SYCL interoperability API. + +==== SYCL command groups and execution order + +By default, SYCL queues execute kernel functions in an out-of-order fashion +based on dependency information. +Developers only need to specify what data is required to execute a particular +kernel. The SYCL runtime will guarantee that kernels are executed in an order +that guarantees correctness. +By specifying access modes and types of memory, a directed acyclic dependency +graph (DAG) of kernels is built at runtime. This is achieved via the usage of +<> objects. A SYCL <> object defines a set +of requisites (_R_) and a kernel function (_k_). A <> is +_submitted_ to a queue when using the +[code]#sycl::queue::submit# member function. + +A *requisite* (_r~i~_) is a requirement that must be fulfilled for +a kernel-function (_k_) to be executed on a particular device. +For example, a requirement may be that certain data is available on a +device, or that another command group has finished execution. +An implementation may evaluate the requirements of a command group at any +point after it has been submitted. +The _processing of a command group_ is the process by which a SYCL +runtime evaluates all the requirements in a given _R_. +The SYCL runtime will execute _k_ only when all _r~i~_ are satisfied (i.e., +when all requirements are satisfied). +To simplify the notation, in the specification we refer to the set of +requirements of a command group named _foo_ as +_CG~foo~ = r~1~, {ldots}, r~n~_. + +The _evaluation of a requisite_ ({SYCLeval}(_r~i~_)) returns the status of +the requisite, which can be _True_ or _False_. +A _satisfied_ requisite implies the requirement is met. +{SYCLeval}(_r~i~_) never alters the requisite, only observes the current status. +The implementation may not block to check the requisite, and the same check +can be performed multiple times. + +An *action* (_a~i~_) is a collection of implementation-defined +operations that must be performed in order to satisfy a requisite. +The set of actions for a given <> _A_ is permitted +to be empty if no operation is required to satisfy the requirement. +The notation _a~i~_ represents the action required to satisfy _r~i~_. +Actions of different requisites can be satisfied in any order with +respect to +each other without side effects (i.e., given two requirements _r~j~_ and _r~k~_, +_(r~j~, r~k~)_ {equiv} _(r~k~, r~j~)_). The intersection of two +actions is not necessarily empty. +*Actions* can include (but are not limited to): memory copy operations, +mapping operations, host side synchronization, or implementation-specific +behavior. + +Finally, _Performing an action_ ({SYCLperform}(_a~i~_)) executes the +action operations required to satisfy the requisite _r~j~_. Note that, after +{SYCLperform}(_a~i~_), the evaluation {SYCLeval}(_r~j~_) will return _True_ +until the kernel is executed. After the kernel execution, it is not defined +whether a different <> with the same requirements needs to +perform the action again, where actions of different requisites inside the +same <> object can be satisfied in any order with +respect to each +other without side effects: Given two requirements _r~j~_ and _r~k~_, +{SYCLperform}(_a~j~_) followed by {SYCLperform}(_a~k~_) is equivalent to +{SYCLperform}(_a~k~_) followed by {SYCLperform}(_a~j~_). + +The requirements of different <> submitted to the same +or different queues are evaluated in the relative order of submission. +<> objects whose intersection of requirement sets is +not empty are said to depend on each other. +They are executed in order of submission to the queue. +If <> are submitted to different queues or by multiple +threads, the order of execution is determined by the SYCL runtime. +Note that independent <> objects can be submitted +simultaneously without affecting dependencies. + +<> illustrates the execution order of three +<> objects (_CG~a~,CG~b~,CG~c~_) with certain requirements +submitted to the same queue. +Both _CG~a~_ and _CG~b~_ only have one requirement, _r~1~_ and _r~2~_ respectively. +_CG~c~_ requires both _r~1~_ and _r~2~_. +This enables the SYCL runtime to potentially execute _CG~a~_ and _CG~b~_ +simultaneously, whereas _CG~c~_ cannot be executed until both _CG~a~_ and _CG~b~_ +have been completed. +The SYCL runtime evaluates the *requisites* and performs the +*actions* required (if any) for the _CG~a~_ and _CG~b~_. +When evaluating the *requisites* of _CG~c~_, they will be satisfied +once the _CG~a~_ and _CG~b~_ have finished. + +// Formerly in three_cg_one_queue.tex + +// Jon: source code markup doesn't work with embedded asciidoctor markup +// Image is not centered + +[[fig:three-cg-one-queue]] +.Execution order of three command groups submitted to the same queue +[width="100%",options="header",cols="50%,50%"] +|==== +| *SYCL Application Enqueue Order* | *SYCL Kernel Execution Order* +a| +//[source,,subs="quotes"] works only with HTML but hurts the PDF output +[listing,subs="quotes"] +---- +sycl::queue syclQueue; +syclQueue.submit(_CG~a~(r~1~)_); +syclQueue.submit(_CG~b~(r~2~)_); +syclQueue.submit(_CG~c~(r~1~,r~2~)_); +---- + a| +image::{images}/three-cg-one-queue.svg[align="center",opts="{imageopts}"] +|==== + +<> uses three separate SYCL queue objects +to submit the same <> objects as before. +Regardless of using three different queues, the execution order +of the different <> objects is the same. +When different threads enqueue to different queues, the execution order +of the command group will be the order in which the submit member functions are executed. +In this case, since the different <> objects execute on +different devices, the *actions* required to satisfy the +*requirements* may be different (e.g, the SYCL runtime may +need to copy data to a different device in a separate context). + + +// Formerly in three_cg_three_queue.tex + +// Jon: source code markup doesn't work with embedded asciidoctor markup +// Image is not centered + +[[fig:three-cg-three-queue]] +.Execution order of three command groups submitted to the different queues +[width="100%",options="header",cols="50%,50%"] +|==== +| *SYCL Application Enqueue Order* | *SYCL Kernel Execution Order* +a| +//[source,,subs="quotes"] works only with HTML but hurts the PDF output +[listing,subs="quotes"] +---- +sycl::queue syclQueue1; +sycl::queue syclQueue2; +sycl::queue syclQueue3; +syclQueue1.submit(_CG~a~(r~1~)_); +syclQueue2.submit(_CG~b~(r~2~)_); +syclQueue3.submit(_CG~c~(r~1~,r~2~)_); +---- + a| +image::{images}/three-cg-three-queue.svg[align="center",opts="{imageopts}"] +|==== + +==== Controlling execution order with events + +Submitting an action for execution returns an [code]#event# object. Programmers +may use these events to explicitly synchronize programs. Host code can wait for an +event to complete, which will block execution on the host until the action represented +by the event has completed. The [code]#event# class is described in greater detail +in <>. + +Events may also be used to explicitly order the execution of kernels. Host code may +wait for the completion of specific event, which blocks execution on the host until +that event's action has completed. Events may also define requisites between +<>. Using events in this manner informs the runtime +that one or more <> must complete before another +<> may begin executing. See <> for +greater detail. + +=== SYCL kernel execution model + +When a kernel is submitted for execution, an index space is defined. +An instance of the kernel body executes for each point in this index space. +This kernel instance is called a <> and is identified by its +point in the index space, which provides a <> for the work-item. Each +work-item executes the same code but the specific execution pathway through the +code and the data operated upon can vary by using the work-item global id to +specialize the computation. + +==== Basic kernels + +SYCL allows a simple execution model in which a kernel is invoked over an +_N_-dimensional index space defined by [code]#range#, where _N_ is one, two +or three. Each work-item in such a kernel executes independently. + +Each work-item is identified by a value of type [code]#item#. The type +[code]#item# encapsulates a work-item identifier of type [code]#id# and +a [code]#range# representing the number of work-items executing the kernel. + +==== ND-range kernels + +Work-items can be organized into <>, providing a more +coarse-grained decomposition of the index space. Each work-group is assigned a +unique <> with the same dimensionality as the index space used for +the work-items. Work-items are each assigned a <>, unique within the +work-group, so that a single work-item can be uniquely identified by its global +id or by a combination of its local id and work-group id. The work-items in a +given work-group execute concurrently on the processing elements of a single +compute unit. + +When work-groups are used in SYCL, the index space is called an <>. +An ND-range is an +_N_-dimensional index space, where _N_ is one, two or three. In +SYCL, the ND-range is represented via the [code]#nd_range# class. An +[code]#nd_range# is made up of a global range and a local range, each +represented via values of type [code]#range#. +Additionally, there can be a global offset, represented via a value of type [code]#id#; this is deprecated in SYCL 2020. The types +[code]#range# and [code]#id# are each _N_-element +arrays of integers. The iteration space defined via an [code]#nd_range# +is an _N_-dimensional index space starting at the ND-range's global +offset whose size is its global range, split into work-groups of the +size of its local range. + +Each work-item in the ND-range is identified by a value of type +[code]#nd_item#. The type [code]#nd_item# encapsulates a +global id, local id and work-group id, all of type [code]#id# +(the iteration space offset also of type [code]#id#, but this is deprecated in SYCL 2020), as well as +global and local ranges and synchronization operations necessary to +make work-groups useful. Work-groups are assigned ids using a similar +approach to that used for work-item global ids. Work-items are +assigned to a work-group and given a local id with components in the +range from zero to the size of the work-group in that dimension minus +one. Hence, the combination of a work-group id and the local id +within a work-group uniquely defines a work-item. + +==== Backend-specific kernels + +SYCL allows a <> to expose fixed functionality as +non-programmable built-in kernels. The availability and behavior of these +built-in kernels are <>-specific, and are not required to follow the +SYCL execution and memory models. Furthermore the interface exposed utilize +these built-in kernels is also <>-specific. +See the relevant backend specification for details. + +[[sec:memory.model]] +== Memory model + +Since SYCL is a single-source programming model, the memory model affects both +the application and the device kernel parts of a program. +On the SYCL application, the SYCL runtime will make sure data is available +for execution of the kernels. +On the SYCL device kernel, the <> rules describing how the memory +behaves on a specific device are mapped to SYCL {cpp} constructs. Thus it is +possible to program kernels efficiently in pure {cpp}. + + +[[sub.section.memmodel.app]] +=== SYCL application memory model + +The application running on the host uses SYCL <> objects using instances of +the [code]#sycl::buffer# class or <> allocation functions +to allocate memory in the global address +space, or can allocate specialized image memory using the +[code]#sycl::unsampled_image# and [code]#sycl::sampled_image# classes. + +In the SYCL application, memory objects are bound to all devices in which +they are used, regardless of the SYCL context where they reside. +SYCL memory objects (namely, <> and <> objects) +can encapsulate multiple underlying <> memory objects together with +multiple host memory allocations to enable the same object to be shared +between devices in different contexts, platforms or backends. <> +allocations uniquely identify a memory allocation and are bound to a SYCL context. +They are only valid on the backend used by the context. + +The order of execution of <> objects ensures a sequentially +consistent access to the memory from the different devices to the memory +objects. Accessing a USM allocation does not alter the order of execution. +Users must explicitly inform the SYCL runtime of any requirements necessary +for a legal execution. + +To access a memory object, the user must create an <> object +which parameterizes the type of access to the memory object that a kernel or +the host requires. The <> object defines a requirement to access +a memory object, and this requirement is defined by construction of an +accessor, regardless of whether there are any uses in a kernel or by the +host. An accessor object specifies whether the +access is via global memory, constant memory or image samplers and their +associated access functions. The <> also specifies whether the +access is read-only (RO), write-only (WO) or read-write (RW). An optional +[code]#no_init# property can be added to an accessor to tell the system to +discard any previous contents of the data the accessor refers to, so there +are two additional requirement types: no-init-write-only (NWO) and +no-init-read-write (NRW). For simplicity, when a *requisite* represents an +accessor object in a certain access mode, we represent it as +MemoryObject~AccessMode~. For example, an accessor that +accesses memory object *buf1* in *RW* mode is represented as +_buf1~RW~_. A <> object that uses such an accessor is +represented as _CG(buf1~RW~)_. The *action* required to satisfy a +requisite and the location of the latest copy of a memory object will vary +depending on the implementation. + +<> illustrates an example where +<> objects are enqueued to two separate SYCL queues +executing in devices in different contexts. The *requisites* for the +<> execution are the same, but the *actions* to +satisfy them are different. For example, if the data is on the host before +execution, _A(b1~RW~)_ and _A(b2~RW~)_ can potentially be implemented as +copy operations from the host memory to [code]#context1# or +[code]#context2# respectively. After _CG~a~_ and _CG~b~_ are executed, +_A'(b1~RW~)_ will likely be an empty operation, since the result of the +kernel can stay on the device. On the other hand, the results of _CG~b~_ are +now on a different context than _CG~c~_ is executing, therefore _A'(b2~RW~)_ +will need to copy data across two separate contexts using an +implementation specific mechanism. + +// TODO : The example below mentions OpenCL but I think is illustrative of a +// potential implementation and behavior so I am inclined to leave it there + +// Formerly in device_to_device.tex + +// Jon: source code markup doesn't work with embedded asciidoctor markup +// Image is not centered + +[[fig:devicetodevice]] +.Actions performed when three command groups are submitted to two distinct queues +[width="100%",options="header",cols="50%,50%"] +|==== +| *SYCL Application Enqueue Order* | *SYCL Kernel Execution Order* +a| +//[source,,subs="quotes"] works only with HTML but hurts the PDF output +[listing,subs="quotes"] +---- +sycl::queue q1(context1); +sycl::queue q2(context2); +q1.submit(__CG~a~(b1~RW~)__); +q2.submit(_CG~b~(b2~RW~)_); +q1.submit(_CG~c~(b1~RW~,b2~RW~)_); +---- + a| +image::{images}/device_to_device1.svg[align="center",opts="{imageopts}"] +2+a| *Possible implementation by a SYCL Runtime* + +2+a| +image::{images}/device_to_device2.svg[align="center",opts="{imageopts}"] +|==== + +// Jon: The full caption for the above "figure"/table follows - this is hard +// to do in asciidoctor + +<> shows actions performed when three command groups are +submitted to two distinct queues, and potential implementation in an OpenCL +<> by a SYCL runtime. Note that in this example, each SYCL buffer +(_b2,b2_) is implemented as separate [code]#cl_mem# objects per +context} + +Note that the order of the definition of the accessors within the +<> is irrelevant to the requirements they define. +All accessors always apply to the entire <> object where +they are defined. + +When multiple <> in the same <> define different +requisites to the same memory object these requisites must be resolved. + +Firstly, any requisites with different access modes but the same access target +are resolved into a single requisite with the union of the different access +modes according to <>. The atomic access mode acts +as if it was read-write (RW) when determining the combined requirement. The +rules in <> are commutative and associative. + +[[table.access.mode.union]] +.Combined requirement from two different accessor access modes within the same <>. The rules are commutative and associative +[width="100%",options="header",cols="44%,33%,33%"] +|==== +| *One access mode* | *Other access mode* | *Combined requirement* +| read (RO) | write (WO) | read-write (RW) +| read (RO) | read-write (RW) | read-write (RW) +| write (WO) | read-write (RW) | read-write (RW) +| no-init-write (NWO) | no-init-read-write (NRW) | no-init-read-write (NRW) +| no-init-write (NWO) | write (WO) | write (WO) +| no-init-write (NWO) | read (RO) | read-write (RW) +| no-init-write (NWO) | read-write (RW) | read-write (RW) +| no-init-read-write (NRW) | write (WO) | read-write (RW) +| no-init-read-write (NRW) | read (RO) | read-write (RW) +| no-init-read-write (NRW) | read-write (RW) | read-write (RW) +|==== + +The result of this should be that there should not be any requisites with the +same access target. + +Secondly, the remaining requisites must adhere to the following rule. Only +one of the requisites may have write access (_W_ or _RW_), otherwise the +<> must throw an exception. All requisites create a +requirement for the data they represent to be made available in the specified +access target, however only the requisite with write access determines the side +effects of the <>, i.e. only the data which that requisite +represents will be updated. + +For example: + + * _CG(b1^G^~RW~, b1^H^~R~)_ is permitted. + * _CG(b1^G^~RW~, b1^H^~RW~)_ is *not* permitted. + * _CG(b1^G^~W~, b1^C^~RW~)_ is *not* permitted. + +Where _G_ and _C_ correspond to a [code]#target::device# and +[code]#target::constant_buffer# accessor and _H_ corresponds to a host +accessor. + +A buffer created from a range of an existing buffer is called +a [keyword]#sub-buffer#. +A buffer may be overlaid with any number of sub-buffers. +Accessors can be created to operate on these [keyword]#sub-buffers#. +Refer to <> for details on [keyword]#sub-buffer# +creation and restrictions. +A requirement to access a sub-buffer is represented by specifying its +range, e.g. _CG(b1~RW,[0,5)~)_ represents the requirement of accessing +the range _[0,5)_ buffer _b1_ in read write mode. + +If two accessors are constructed to +access the same buffer, but both are to non-overlapping sub-buffers of the +buffer, then the two accessors are said to not [keyword]#overlap#, otherwise the +accessors do overlap. Overlapping is the test that is used to determine the +scheduling order of command groups. +Command-groups with non-overlapping requirements may execute concurrently. + +// Formerly in overlap.tex +// Uses same definitions for cga, cgb, and cgc in code and picture, +// but they're marked up in different languages, so no sharing is possible. + +// Jon: source code markup doesn't work with embedded asciidoctor markup +// Image is not centered + +[[fig:overlap]] +.Requirements on overlapping vs non-overlapping [keyword]#sub-buffer# +[width="100%",options="header",cols="50%,50%"] +|==== +| *SYCL Application Enqueue Order* | *SYCL Kernel Execution Order* +a| +//[source,,subs="quotes"] works only with HTML but hurts the PDF output +[listing,subs="quotes"] +---- +sycl::queue q1(context1); +q1.submit(_CG~a~(b1~{RW,[0,10)}~)_); +q1.submit(_CG~b~(b1~{RW,[10,20)~)_); +q1.submit(_CG~c~(b1~RW,[5,15)~)_); +---- + a| +image::{images}/overlap.svg[align="center",opts="{imageopts}"] +|==== + +It is permissible for command groups that only read data to not copy that data +back to the host or other devices after reading and for the runtime to maintain +multiple read-only copies of the data on multiple devices. + +A special case of requirement is the one defined by a *host accessor*. +Host accessors are represented with +_H(MemoryObject~accessMode~)_, e.g, +_H(b1~RW~)_ represents a host accessor to _b1_ in read-write mode. +Host accessors are a special type of accessor constructed from a memory +object outside a command group, and require that the data associated with +the given memory object is available on the host in the given pointer. +This causes the runtime to block on construction of this object until the +requirement has been satisfied. +*Host accessor* objects are effectively barriers on all accesses to +a certain memory object. +<> shows an example of multiple command groups +enqueued to the same queue. Once the host accessor _H(b1~RW~)_ is reached, +the execution cannot proceed until _CG~a~_ is finished. +However, _CG~b~_ does not have any requirements on _b1_, therefore, it can +execute concurrently with the barrier. +Finally, _CG~c~_ will be enqueued after _H(b1~RW~)_ is finished, +but still has to wait for _CG~b~_ to conclude for all its requirements to +be satisfied. +See <> for details on synchronization rules. + +// Formerly in host_acc.tex +// Uses same definitions for cga, cgb, cgc, and hostA in code and picture, +// but they're marked up in different languages, so no sharing is possible. + +// Jon: source code markup doesn't work with embedded asciidoctor markup +// Image is not centered + +[[fig:host-acc]] +.Execution of command groups when using host accessors +[width="100%",options="header",cols="50%,50%"] +|==== +| *SYCL Application Enqueue Order* | *SYCL Kernel Execution Order* +a| +//[source,,subs="quotes"] works only with HTML but hurts the PDF output +[listing,subs="quotes"] +---- +sycl::queue q1; +q1.submit(_CG~a~(b1~RW~)_); +q1.submit(_CG~b~(b2~RW~)_); + +_H(b1~RW~)_; + +q1.submit(_CG~c~(b1~RW~, b2~RW~)_); +---- + a| +image::{images}/host-acc.svg[align="center",opts="{imageopts}"] +|==== + + +=== SYCL device memory model + +The memory model for SYCL devices is based on the OpenCL 1.2 memory model. +Work-items executing in a kernel have access to three distinct address spaces +(memory regions) and a virtual address space overlapping some concrete address spaces: + + * <> is accessible to all work-items in all work-groups. + Work-items can read from or write to any element of a global memory + object. Reads and writes to global memory may be cached depending on the + capabilities of the device. Global memory is persistent across kernel + invocations, however there is no guarantee that two concurrently + executing kernels can simultaneously write to the same memory object and + expect correct results. + * <> is accessible to all work-items in a single + work-group. Attempting to access local memory in one work-group from + another work group results in undefined behavior. This memory region can be + used to allocate variables that are shared by all work-items in a + work-group. Work-group-level visibility allows local memory to be + implemented as dedicated regions of the device memory where this is + appropriate. + * <> is a region of memory private to a work-item. + Attempting to access private memory in one work-item from another work-item + results in undefined behavior. + * <> is a virtual address space which overlaps the + global, local and private address spaces. + +==== Access to memory + +Accessors in the device kernels provide access to the memory objects, +acting as pointers to the corresponding address space. + +Pointers can be passed directly as kernel arguments if an implementation +supports <>. See <> for information on when it is legal +to dereference pointers passed from the host inside kernels. + +To allocate local memory within a kernel, the user can either pass +a [code]#sycl::local_accessor# object as a argument to an ND-range +kernel (that has a user-defined work-group size), or +can define a variable in work-group scope inside +[code]#sycl::parallel_for_work_group#. + +Any variable defined inside a [code]#sycl::parallel_for# scope or +[code]#sycl::parallel_for_work_item# scope will be allocated in private +memory. Any variable defined inside a [code]#sycl::parallel_for_work_group# +scope will be allocated in local memory. + +Users can create accessors that reference sub-buffers as well as entire buffers. + + +Within kernels, the underlying {cpp} pointer types can be obtained from an +accessor. The pointer types will contain a compile-time deduced address space. +So, for example, if a {cpp} pointer is obtained from an accessor to global memory, +the {cpp} pointer type will have a global address space attribute attached to it. +The address space attribute will be compile-time propagated to other pointer +values when one pointer is initialized to another pointer value using a defined +algorithm. + +When developers need to explicitly state the address space of a pointer value, +one of the explicit pointer classes can be used. There is a different explicit +pointer class for each address space: [code]#sycl::raw_local_ptr#, +[code]#sycl::raw_global_ptr#, [code]#sycl::raw_private_ptr#, + [code]#sycl::raw_generic_ptr#, +[code]#sycl::decorated_local_ptr#, +[code]#sycl::decorated_global_ptr#, [code]#sycl::decorated_private_ptr#, + or [code]#sycl::decorated_generic_ptr#. + +The classes with the [code]#decorated# prefix expose pointers that use an +implementation-defined address space decoration, while the classes with the +[code]#raw# prefix do not. Buffer accessors with an access target +[code]#target::device# or [code]#target::constant_buffer# and local accessors +can be converted into explicit pointer classes ([code]#multi_ptr)#. Explicit +pointer class values cannot be passed as arguments to kernels or stored in +global memory. + +For templates that need to adapt to different address spaces, a +[code]#sycl::multi_ptr# class is defined which is templated +via a compile-time constant enumerator value to specify the address space. + +[[sec:memoryconsistency]] +=== SYCL memory consistency model + +The SYCL memory consistency model is based upon the memory consistency +model of the {cpp} core language. Where SYCL offers extensions to classes and +functions that may affect memory consistency, the default behavior when these +extensions are not used always matches the behavior of standard {cpp}. + +A SYCL implementation must guarantee that the same memory consistency model is +used across host and device code. Every <> must support the +memory model defined by the minimum version of {cpp} described in +<>; SYCL implementations supporting +additional versions of {cpp} must also support the corresponding memory models. + +Within a work-item, operations are ordered according to the _sequenced before_ +relation defined by the {cpp} core language. + +Ensuring memory consistency across different work-items requires careful usage +of <> operations, <> operations and atomic +operations. The ordering of operations across different work-items is +determined by the _happens before_ relation defined by the {cpp} core language, +with a single relation governing all address spaces (memory regions). + +On any SYCL device, local and global memory may be made consistent +across work-items in a single <> through use of a <> +operation. On SYCL devices supporting acquire-release or sequentially +consistent memory orderings, all memory visible to a set of work-items may be +made consistent across the work-items in that set through the use of +<> and atomic operations. + +Memory consistency between the host and SYCL device(s), or different SYCL +devices in the same context, can be guaranteed through synchronization in +the host application as defined in <>. On SYCL devices +supporting concurrent atomic accesses to USM allocations and acquire-release or sequentially +consistent memory orderings, cross-device memory consistency can be +enforced through the use of <> and atomic operations. + +==== Memory ordering + +[source,,linenums] +---- +include::{header_dir}/memoryOrder.h[lines=4..-1] +---- + +The memory synchronization order of a given atomic operation is controlled by a +[code]#sycl::memory_order# parameter, which can take one of the following +values: + + * [code]#sycl::memory_order::relaxed#; + * [code]#sycl::memory_order::acquire#; + * [code]#sycl::memory_order::release#; + * [code]#sycl::memory_order::acq_rel#; + * [code]#sycl::memory_order::seq_cst#. + +The meanings of these values are identical to those defined in the {cpp} core +language. + +The complete set of memory orders is not guaranteed to be supported by every +device, nor across all combinations of devices within a context. The memory +orders supported by a specific device and context can be queried using +functionalities of the [code]#sycl::device# and [code]#sycl::context# classes, +respectively. + +[NOTE] +==== +SYCL implementations are not required to support a memory order equivalent +to [code]#std::memory_order::consume#, and using this ordering within a SYCL +device kernel results in undefined behavior. Developers are encouraged to use +[code]#sycl::memory_order::acquire# instead. +==== + +==== Memory scope + +[source,,linenums] +---- +include::{header_dir}/memoryScope.h[lines=4..-1] +---- + +The set of <> and devices to which the memory ordering +constraints of a given atomic operation apply is controlled by a +[code]#sycl::memory_scope# parameter, which can take one of the following +values: + + * [code]#sycl::memory_scope::work_item# The ordering constraint applies + only to the calling work-item; + * [code]#sycl::memory_scope::sub_group# The ordering constraint applies + only to work-items in the same <> as the calling work-item; + * [code]#sycl::memory_scope::work_group# The ordering constraint applies + only to work-items in the same <> as the calling + work-item; + * [code]#sycl::memory_scope::device# The ordering constraint applies only + to work-items executing on the same device as the calling work-item; + * [code]#sycl::memory_scope::system# The ordering constraint applies to any + work-item or host thread in the system that is currently permitted to + access the memory allocation containing the referenced object, as + defined by the capabilities of <> and <>. + +The broadest scope that can be applied to an atomic operation corresponds to +the set of work-items which can access the associated memory location. For +example, the broadest scope that can be applied to atomic operations in +work-group local memory is [code]#sycl::memory_scope::work_group#. If a +broader scope is supplied, the behavior is as-if the narrowest scope containing +all work-items which can access the associated memory location was supplied. + +[NOTE] +==== +The addition of memory scopes to the {cpp} memory model modifies the +definition of some concepts from the {cpp} core language. For example: +data races, the synchronizes-with relationship and sequential +consistency must be defined in a way that accounts for atomic +operations with differing (but compatible) scopes, in a manner +similar to the <>. Efforts to +formalize the memory model of SYCL are ongoing, and a formal memory model +will be included in a future version of the SYCL specification. +==== + +==== Atomic operations + +Atomic operations can be performed on memory in buffers and USM. The +[code]#sycl::atomic_ref# class must be used to provide safe atomic access +to the buffer or USM allocation from device code. + +==== Forward progress + +Memory consistency guarantees are independent of any forward progress +guarantees. A SYCL implementation must execute work-items concurrently +and must ensure that the work-items in a group obey the semantics of +<>, but are not required to provide any +additional forward progress guarantees. + +Synchronizing work-items via memory operations is unsafe in general, but is +supported if and only if the following conditions are true: + + * acquire-release or sequentially consistent memory ordering is supported + at the scope containing the set of work-items being synchronized; + + * the work-items being synchronized are guaranteed to make forward progress + with respect to one another. + +The ability of work-items to make forward progress with respect to work-items +in other work-groups is implementation-defined. + +// Later, this label will move onto a new subsection - see below +[[sec:progmodel.cpp]] +== The SYCL programming model + +A SYCL program is written in standard {cpp}. Host code and device code is +written in the same {cpp} source file, enabling instantiation of templated +kernels from host code and also enabling kernel source code to be shared +between host and device. +The device kernels are encapsulated {cpp} callable types (a function object +with [code]#operator()# or a lambda function), which have +been designated to be compiled as SYCL kernels. + +SYCL programs target heterogeneous systems. The kernels may be compiled and +optimized for multiple different processor architectures with very different +binary representations. + + +// TODO: Add \subsection{SYCL {cpp} language requirements} before merging +// Don't do until then to avoid changing section numbers +// [[sec:progmodel.cpp]] + +[[sec:progmodel.minimumcppversion]] +=== Minimum version of {cpp} + +The {cpp} features used in SYCL are based on a specific version of {cpp}. +Implementations of SYCL must support this minimum {cpp} version, which defines the +{cpp} constructs that can consequently be used by SYCL feature definitions +(for example, lambdas). + +The minimum {cpp} version of this SYCL specification is determined by the normative {cpp} +core language defined in <>. All implementations +of this specification must support at least this core language, and features within this +specification are defined using features of the core language. Note that not all +core language constructs are supported within <> or code +invoked by a <>, as detailed by +<>. + +Implementations may support newer {cpp} versions than the minimum required by SYCL. +Code written using newer features than the SYCL requirement, though, may +not be portable to other implementations that don't support the same {cpp} version. + + +[[sec:progmodel.futurecppversion]] +=== Alignment with future versions of {cpp} + +Some features of SYCL are aligned with the next {cpp} specification, as defined +in <>. + +The following features are pre-adopted by SYCL 2020 and made available in the +[code]#sycl::# namespace: [code]#std::span#, +[code]#std::bit_cast#. The implementations of pre-adopted features are +compliant with the next {cpp} specification, and are expected to forward directly +to standard {cpp} features in a future version of SYCL. + +The following features of SYCL 2020 use syntax based on the next {cpp} +specification: [code]#sycl::atomic_ref#. These features behave as +described in the next {cpp} specification, barring modifications to ensure +compatibility with other SYCL 2020 features and heterogeneous +programming. Any such modifications are documented in the corresponding +sections of this specification. + +=== Basic data parallel kernels + +Data-parallel <>s that execute as +multiple <>s and where no local synchronization is required are enqueued +with the [code]#sycl::parallel_for# function parameterized by a +[code]#sycl::range# parameter. These kernels will execute the kernel +function body once for each work-item in the specified <>. + +Functionality tied to <> of work-items, including +<> and <>, must not be used +within these kernels. + +Variables with <> semantics can be added to basic data parallel +kernels using the features described in <>. + +=== Work-group data parallel kernels + +Data parallel <>s can also execute in a mode where the set of +<>s is divided into <>s of user-defined dimensions. +The user specifies the global <> and local work-group size as +parameters to the [code]#sycl::parallel_for# function with a +[code]#sycl::nd_range# parameter. In this mode of execution, +kernels execute over the <> in work-groups of the specified +size. It is possible to share data among work-items within the same +work-group in <> or <> and to synchronize between +work-items in the same work-group by calling the +[code]#group_barrier# function. All work-groups in a given +[code]#parallel_for# will be the same size, and the global size +defined in the nd-range must be a multiple of the work-group size in +each dimension. + +Work-groups may be further subdivided into <>s. +The size and number of sub-groups is implementation-defined and may differ for +each kernel, and different devices may make different guarantees with respect +to how sub-groups within a work-group are scheduled. The maximum number of +work-items in any sub-group in a kernel is based on a combination of the kernel +and its dispatch dimensions. The size of any sub-group in the dispatch is +between 1 and this maximum sub-group size, and the size of an individual +sub-group is invariant for the duration of a kernel's execution. Similarly +to work-groups, the work-items within the same sub-group can be synchronized +by calling the [code]#group_barrier# function. + +To maximize portability across devices, developers should not assume that +work-items within a sub-group execute in any particular order, that work-groups +are subdivided into sub-groups in a specific way, nor that two sub-groups +within a work-group will make independent forward progress with respect to one +another. + +Variables with <> semantics can be added to work-group data +parallel kernels using the features described in <>. + + +=== Hierarchical data parallel kernels + +[NOTE] +==== +Based on developer and implementation feedback, the hierarchical +data parallel kernel feature described next is undergoing +improvements to better align with the frameworks and patterns +prevalent in modern programming. As this is a key part of the SYCL +API and we expect to make changes to it, we temporarily recommend +that new codes refrain from using this feature until the new API +is finished in a near-future version of the SYCL specification, +when full use of the updated feature will be recommended for use +in new code. Existing codes using this feature will of course be +supported by conformant implementations of this specification. +==== + +The SYCL compiler provides a way of specifying data parallel kernels +that execute within work-groups via a different syntax which +highlights the hierarchical nature of the parallelism. This mode is +purely a compiler feature and does not change the execution model of +the kernel. Instead of calling [code]#sycl::parallel_for# the +user calls [code]#sycl::parallel_for_work_group# with a +[code]#sycl::range# value representing the number of +work-groups to launch and optionally a second +[code]#sycl::range# representing the size of each work-group +for performance tuning. All code within the +[code]#parallel_for_work_group# scope effectively executes once +per work-group. Within the [code]#parallel_for_work_group# scope, +it is possible to call [code]#parallel_for_work_item# which +creates a new scope in which all work-items within the current +work-group execute. This enables a programmer to write code that looks +like there is an inner work-item loop inside an outer work-group loop, +which closely matches the effect of the execution model. All variables +declared inside the [code]#parallel_for_work_group# scope are +allocated in work-group local memory, whereas all variables declared +inside the [code]#parallel_for_work_item# scope are declared in +private memory. All [code]#parallel_for_work_item# calls within a +given [code]#parallel_for_work_group# execution must have the +same dimensions. + + +=== Kernels that are not launched over parallel instances + +Simple kernels for which only a single instance of the kernel function will be +executed are enqueued with the [code]#sycl::single_task# function. The +kernel enqueued takes no "`work-item id`" parameter and will only execute once. +The behavior is logically equivalent to executing a kernel on a single compute +unit with a single work-group comprising only one work-item. Such kernels may be +enqueued on multiple queues and devices and as a result may be executed in +task-parallel fashion. + + +[[sec:pre-defined-kernels]] +=== Pre-defined kernels + +Some <> may expose pre-defined functionality to users as kernels. +These kernels are not programmable, hence they are not bound by the SYCL +{cpp} programming model restrictions, and how they are written is +implementation-defined. + + +[[sec:synchronization]] +=== Synchronization + +Synchronization of processing elements executing inside a device is handled +by the SYCL device kernel following the SYCL kernel execution model. +The synchronization of the different SYCL device kernels executing with +the host memory is handled by the SYCL application via the SYCL runtime. + +==== Synchronization in the SYCL application + +Synchronization points between host and device(s) are exposed through +the following operations: + + * _Buffer destruction_: The destructors for + [code]#sycl::buffer#, [code]#sycl::unsampled_image# and + [code]#sycl::sampled_image# objects wait for all submitted work on + those objects to complete and to copy the data back to host memory + before returning. These destructors only wait if the object was + constructed with attached host memory and if data needs to be copied + back to the host. ++ +-- +More complex forms of synchronization on buffer destruction +can be specified by the user by constructing buffers with other kinds of +references to memory, such as [code]#shared_ptr# and [code]#unique_ptr#. +-- + * _Host Accessors_: The constructor for a host accessor waits for all + kernels that modify the same buffer (or image) in any queues to complete + and then copies data back to host memory before the constructor returns. + Any command groups with requirements to the same memory object cannot + execute until the host accessor is destroyed as shown on <>. + * _Command group enqueue_: The <> internally ensures + that any command groups added to queues have the correct event + dependencies added to those queues to ensure correct operation. Adding + command groups to queues never blocks. Instead any required + synchronization is added to the queue and events of type + [code]#sycl::event# are returned by the queue's submit function + that contain event information related to the specific command group. + * _Queue operations_: The user can manually use queue operations, + such as [code]#sycl::queue::wait()# to block execution of the calling thread until all + the command groups submitted to the queue have finished execution. Note + that this will also affect the dependencies of those command groups in + other queues. + * _SYCL event objects_: SYCL provides [code]#sycl::event# + objects which can be used for synchronization. If synchronization is + required across SYCL contexts from different <>, then the + <> ensures that extra host-based synchronization is + added to enable the SYCL event objects to operate between contexts + correctly. + +Note that the destructors of other SYCL objects +([code]#sycl::queue#, [code]#sycl::context#,{ldots}) do +not block. Only a [code]#sycl::buffer#, [code]#sycl::sampled_image# or +[code]#sycl::unsampled_image# destructor might block. The rationale is +that an object without any side effect on the host does not need to +block on destruction as it would impact the performance. So it is up +to the programmer to use a member function to wait for completion in some +cases if this does not fit the goal. +See <> for more information +on object life time. + +==== Synchronization in SYCL kernels + +In SYCL, synchronization can be either global or local within a +group of work-items. Synchronization between work-items in a single +group is achieved using a <>. + +All the work-items of a group must execute the barrier before any are +allowed to continue execution beyond the barrier. Note that the +group barrier must be encountered by all work-items of a +group executing the kernel or by none at all. In SYCL, +<> and <> functionality is +exposed via the [code]#group_barrier# function. + +Synchronization between work-items in different work-groups via atomic +operations is possible only on SYCL devices with certain capabilities, +as described in <>. + +=== Error handling + +In SYCL, there are two types of errors: synchronous errors that can be +detected immediately when an API call is made, and <> +that can only be detected later after an API call has returned. +Synchronous errors, such as failure to construct an +object, are reported immediately by the runtime throwing an +exception. <>, such as an error occurring during +execution of a kernel on a device, are reported via an asynchronous +error-handler mechanism. + +<> are not reported immediately as they occur. The +asynchronous error handler for a context or queue is called with a +[code]#sycl::exception_list# object, which contains a list of +asynchronously-generated exception objects, on the conditions described by +<> and <>. + +Asynchronous errors may be generated regardless of whether the user has +specified any asynchronous error handler(s), as described in +<>. + +Some <> can report errors that are specific to the platform +they are targeting, or that are more concrete than the errors provided +by the SYCL API. +Any error reported by a <> must derive from the base +[code]#sycl::exception#. +When a user wishes to capture specifically an error thrown by a <>, +she must include the <>-specific headers for said <>. + +=== Fallback mechanism + +A <> can be submitted either to a single queue +to be executed on, or to a secondary queue. If a +<> fails to be enqueued to the primary queue, then +the system will attempt to enqueue it to the secondary queue, if given as a +parameter to the submit function. If the <> fails to be +queued to both of these queues, then a synchronous SYCL exception will be thrown. + +It is possible that a command group may be successfully enqueued, +but then asynchronously fail to run, for some reason. In this case, it may be +possible for the runtime system to execute the <> +on the secondary queue, instead of the primary queue. The situations where a SYCL +runtime may be able to achieve this asynchronous fall-back is implementation-defined. + +=== Scheduling of kernels and data movement + +A <> takes a reference to a command group +[code]#handler# as a parameter and anything within that scope is +immediately executed and takes the handler object as a parameter. The +intention is that a user will perform calls to SYCL functions, member functions, +destructors and constructors inside that scope. These calls will be non-blocking +on the host, but enqueue operations to the queue that the command group is submitted +to. All user functions within the command group scope will be called on the host +as the <> is executed, but any device kernels it +invokes will be added to the SYCL <>. All kernels added to the <> +will be executed out-of-order from each other, according to their data dependencies. + + +[[sec:managing-object-lifetimes]] +=== Managing object lifetimes + +A SYCL application does not initialize any <> features until a +[code]#sycl::context# object is created. A user does not need to +explicitly create a [code]#sycl::context# object, but they do need to +explicitly create a [code]#sycl::queue# object, for which a +[code]#sycl::context# object will be implicitly created if not provided +by the user. + +All <> objects encapsulated in SYCL objects are reference-counted and will +be destroyed once all references have been released. This means that a user needs +only create a SYCL <> (which will automatically create an SYCL context) for +the lifetime of their application to initialize and release any <> objects +safely. + +There is no global state specified to be required in SYCL implementations. This +means, for example, that if the user creates two queues without explicitly +constructing a common context, then a SYCL implementation does not have to +create a shared context for the two queues. Implementations are free to share or +cache state globally for performance, but it is not required. + +Memory objects can be constructed with or without attached host memory. If no +host memory is attached at the point of construction, then destruction of that +memory object is non-blocking. The user may use {cpp} standard pointer classes +for sharing the host data with the user application and for defining blocking, +or non-blocking behavior of the buffers and images. +If host memory is attached by using a raw pointer, then the default behavior is +followed, which is that the destructor will block until any command groups +operating on the memory object have completed, then, if the contents of the +memory object is modified on a device those contents are copied back to host and +only then does the destructor return. + +In the case where host memory is shared +between the user application and the <> with a +[code]#std::shared_ptr#, then the reference counter +of the [code]#std::shared_ptr# determines whether the buffer needs to copy +data back on destruction, and in that case the blocking or non-blocking behavior +depends on the user application. + +Instead of a [code]#std::shared_ptr#, a [code]#std::unique_ptr# may be +provided, which uses move semantics for initializing and using the +associated host memory. In this case, the behavior of the buffer in +relation to the user application will be non-blocking on destruction. + +As said in <>, the only blocking +operations in SYCL (apart from explicit wait operations) are: + + * host accessor constructor, which waits for any kernels enqueued before + its creation that write to the corresponding object to finish and be + copied back to host memory before it starts processing. The host + accessor does not necessarily copy back to the same host memory as + initially given by the user; + * memory object destruction, in the case where copies back to host memory + have to be done or when the host memory is used as a backing-store. + + +=== Device discovery and selection + +A user specifies which queue to submit a +<> and each <> is +targeted to run on a specific <> (and <>). A user +can specify the actual device on queue creation, or they can specify a +<> which causes the <> to choose a +device based on the user's provided preferences. Specifying a +<> causes the <> to perform device +discovery. No device discovery is performed until a SYCL +<> is passed to a queue constructor. Device +topology may be cached by the <>, but this is not +required. + +Device discovery will return all <> from all <> exposed +by all the supported <>. + +=== Interfacing with the SYCL backend API + +There are two styles of developing a SYCL application: + +. writing a pure SYCL generic application; +. writing a SYCL application that relies on some <> specific behavior. + +When users follow 1., there is no assumption about what <> will be used during +compilation or execution of the SYCL application. Therefore, the <> +is not assumed to be available to the developer. +Only standard {cpp} types and interfaces are assumed to be available, +as described in <>. +Users only need to include the [code]## header to write a +SYCL generic application. + +On the other hand, when users follow 2., they must know what <>s +they are using. In this case, any header required for the normal +programmability of the <> is assumed to be available to the user. +In addition to the [code]## header, users must also +include the <>-specific header as defined in +<>. The <>-specific header +provides the interoperability interface for the SYCL API to interact with +<>. + +The interoperability API is defined in <>. + +== Memory objects + +SYCL memory objects represent data that is handled by the <> and +can represent allocations in one or multiple <> at any time. +Memory objects, both buffers and images, may have one or more underlying +<> to ensure that <> objects +can use data in any device. A SYCL implementation may have multiple +<> for the same device. +The <> is responsible for ensuring the different copies are up-to-date +whenever necessary, using whatever mechanism is available in the system +to update the copies of the underlying <>. + +[NOTE] +.Implementation note +==== +A valid mechanism for this update is to transfer the data from one +<> into the system memory using the <>-specific +mechanism available, and then transfer it to a different device +using the mechanism exposed by the new <>. +==== + +Memory objects in SYCL fall into one of two categories: <> objects +and <> objects. A buffer object stores a one-, two- or +three-dimensional collection of elements that are stored linearly directly back +to back in the same way C or {cpp} stores arrays. An image object is used to store +a one-, two- or three-dimensional texture, frame-buffer or image data that may be +stored in an optimized and device-specific format in memory and must be accessed +through specialized operations. + +Elements of a buffer object can be a scalar data type (such as an +[code]#int# or [code]#float#), vector data type, or a user-defined +structure. In SYCL, a <> object is a templated type +([code]#sycl::buffer#), parameterized by the element type and number of +dimensions. An <> object is stored in one of a limited number of +formats. The elements of an image object are selected from a list of +predefined image formats which are provided by an underlying <> +implementation. Images are encapsulated in the +[code]#sycl::unsampled_image# or [code]#sycl::sampled_image# +types, which are templated by the number of dimensions in the image. The +minimum number of elements in a memory object is one. + +The fundamental differences between a buffer and an image object are: + + * elements in a buffer are stored in an array of 1, 2 or 3 dimensions and + can be accessed using an accessor by a kernel executing on a device. The + accessors for kernels provide a member function to get {cpp} pointer types, or the + [code]#sycl::global_ptr# class; + * elements of an image are stored in a format that is opaque to the user + and cannot be directly accessed using a pointer. SYCL provides image + accessors and samplers to allow a kernel to read from or write to an + image; + * for a buffer object the data is accessed within a kernel in the same + format as it is stored in memory, but in the case of an image object the + data is not necessarily accessed within a kernel in the same format as + it is stored in memory; + * image elements are always a 4-component vector (each component can be a + float or signed/unsigned integer) in a kernel. Accessors that read an + image convert image elements from their storage format into a 4-component + vector. ++ +-- +Similarly, the SYCL accessor member functions provided to write to an +image convert the image element from a 4-component vector to +the appropriate image format specified such as four 8-bit +elements, for example. +-- + +Users may want fine-grained control of the synchronization, memory management +and storage semantics of SYCL image or buffer objects. For example, a user may +wish to specify the host memory for a memory object to use, but may not want the +memory object to block on destruction. + +Depending on the control and the use cases of the SYCL applications, +well established {cpp} classes and patterns can be used for reference counting and +sharing data between user applications and the <>. For control over +memory allocation on the host and mapping between host and device memory, +pre-defined or user-defined {cpp} [code]#std::allocator# classes are +used. For better control of synchronization between a SYCL and a non SYCL +application that share data, [code]#std::shared_ptr# and +[code]#std::mutex# classes are used. + + +== Multi-dimensional objects and linearization + +SYCL defines a number of multi-dimensional objects such as buffers and +accessors. The iteration space of work-items in a kernel may also be +multi-dimensional. The size of each dimension is defined by a [code]#range# +object of one, two or three dimensions, and an element in the multi-dimensional +space can be identified using an [code]#id# object with the same number of +dimensions as the corresponding [code]#range#. + +[[sec:multi-dim-linearization]] +=== Linearization + +Some multi-dimensional objects can be viewed in a linear form. When this +happens, the right-most term in the object's range varies fastest in the +linearization. + +A three-dimensional element [code]#id{id0, id1, id2}# within a +three-dimensional object of range [code]#range{r0, r1, r2}# has a linear +position defined by: +[latexmath] +++++ +id2 + (id1 \cdot r2) + (id0 \cdot r1 \cdot r2) +++++ + +A two-dimensional element [code]#id{id0, id1}# within a two-dimensional +[code]#range{r0, r1}# follows a similar equation: +[latexmath] +++++ +id1 + (id0 \cdot r1) +++++ + +A one-dimensional element [code]#id{id0}# within a one-dimensional range +[code]#range{r0}# is equivalent to its linear form. + + +[[sec:multi-dim-subscript]] +=== Multi-dimensional subscript operators + +Some multi-dimensional objects can be indexed using the subscript operator +where consecutive subscript operators correspond to each dimension. The +right-most operator varies fastest, as with standard {cpp} arrays. Formally, a +three-dimensional subscript access [code]#a[id0][id1][id2]# references the element +at [code]#id{id0, id1, id2}#. A two-dimensional subscript access +[code]#a[id0][id1]# references the element at [code]#id{id0, id1}#. A +one-dimensional subscript access [code]#a[id0]# references the element at +[code]#id{id0}#. + + +== Implementation options + +The SYCL language is designed to allow several different possible +implementations. The contents of this section are non-normative, so +implementations need not follow the guidelines listed here. However, this +section is intended to help readers understand the possible strategies that can +be used to implement SYCL. + +=== Single source multiple compiler passes + +With this technique, known as <>, there are separate host and device +compilers. Each SYCL source file is compiled two times: once by the host +compiler and once by the device compiler. An implementation could support more +than one device compiler, in which case each SYCL source file is compiled +more than two times. The host compiler in this technique could be an +off-the-shelf compiler with no special knowledge of SYCL, but the device +compiler must be SYCL aware. The device compiler parses the source file to +identify each <> and any <> it calls. SYCL is designed so that this analysis can be +done statically. The device compiler then generates code only for the +<> and the <>. + +Typically, the device compilers generate header files which interface between +the host compiler and the <>. Therefore, the device compiler +runs first, and then the host compiler consumes these header files when +generating the host code. + +The device compilers in this technique generate one or more <> for the <>, which +can be read by the <>. Each <> could either +contain native ISA for a device or it could contain an intermediate language +such as SPIR-V. In the later case, the <> must translate the +intermediate language into native device ISA when the <> +is submitted to a device. + +Since this technique has separate host and device compilers, there needs to be +some way to associate a <> (which is compiled by the +device compiler) with the code that invokes it (which is compiled by the host +compiler). Implementations conformant to the reduced feature set +(<>) can do this by using the {cpp} type of the +<>. This type is specified via the <> +template parameter if the <> is a lambda function, or it +is obtained from the class type if the <> is an object. +Implementations conformant to the full feature set (<>) +do not require a <> at the invocation site, so they must implement +some other way to make the association. + + +=== Single source single compiler pass + +With this technique, the vendor implements a custom compiler that reads each +SYCL source file only once, and that compiler generates the host code as well +as the <> for the <>. As in the <> case, each <> could +either contain native device ISA or an intermediate language. + +=== Library-only implementation + +It is also possible to implement SYCL purely as a library, using an +off-the-shelf host compiler with no special support for SYCL. In such an +implementation, each <> may run on the host system. + + +== Language restrictions in kernels + +The SYCL <> are executed on SYCL devices and all of the +functions called from a SYCL kernel are going to be compiled for the device +by a SYCL <>. Due to restrictions of the heterogeneous +devices where the SYCL kernel will execute, there are certain restrictions +on the base {cpp} language features that can be used inside kernel code. For +details on language restrictions please refer +to <>. + +SYCL kernels use arguments that are captured by value in the +<> or are passed from the host to the device using +<>. Sharing data structures between host and device code +imposes certain restrictions, such as using only objects that are +<>, and in general, no pointers +initialized for the host can be used on the device. SYCL memory objects, +such as [code]#sycl::buffer#, [code]#sycl::unsampled_image#, and +[code]#sycl::sampled_image#, cannot be passed to a kernel. Instead, a kernel +must interact with these objects through <>. +No hierarchical structures of +these memory object classes are supported and any other data containers need to be +converted to the SYCL data management classes using the SYCL interface. For +more details on the rules for kernel parameter passing, please refer +to <>. + +Pointers to <> allocations +may be passed to a kernel either directly as arguments or indirectly +inside of other objects. Pointers to <> allocations that are +passed as kernel arguments are treated as being in the global +address space. + +[[sec::device.copyable]] +=== Device copyable + +The SYCL implementation may need to copy data between the host and a device +or between two devices. For example, this may occur when a <> +has a requirement for the contents of a buffer or when the application passes +certain arguments to a <> (as described in +<>). Such data must have a type that is +<> as defined below. + +Any type that is trivially copyable (as defined by the {cpp} core language) is +implicitly device copyable. In addition, the following types from the {cpp} +core language are implicitly device copyable: + + * [code]#std::array#; + * [code]#std::array# if [code]#T# is device copyable; + * [code]#std::optional# if [code]#T# is device copyable; + * [code]#std::pair# if [code]#T1# and [code]#T2# are device copyable; + * [code]#std::tuple<>#; + * [code]#+std::tuple+# if all the types in the parameter pack + [code]#Types# are device copyable; + * [code]#std::variant<>#; + * [code]#+std::variant+# if all the types in the parameter pack + [code]#Types# are device copyable; + * [code]#std::basic_string_view#; + * [code]#std::span# (the [code]#std::span# type has + been introduced in {cpp}20). + +[NOTE] +==== +The types [code]#std::basic_string_view# and +[code]#std::span# are both view types, which reference +underlying data that is not contained within their type. Although these view +types are device copyable, the implementation copies just the view and not +the contained data when doing an inter-device copy. In order to reference the +contained data after such a copy, the application must allocate the contained +data in unified shared memory (USM) that is accessible on both the host and +device (or on both devices in the case of a device-to-device copy). +==== + +In addition, the implementation may allow the application to explicitly declare +certain class types as device copyable. If the implementation has this support, +it must predefine the preprocessor macro [code]#SYCL_DEVICE_COPYABLE# to +[code]#1#, and it must not predefine this preprocessor macro if it does not +have this support. When the implementation has this support, a class type +[code]#T# is device copyable if all of the following statements are true: + + * The application defines the trait [code]#is_device_copyable_v# to + [code]#true#; + * Type [code]#T# has at least one eligible copy constructor, move + constructor, copy assignment operator, or move assignment operator; + * Each eligible copy constructor, move constructor, copy assignment operator, + and move assignment operator is [code]#public#; + * When doing an inter-device transfer of an object of type [code]#T#, the + effect of each eligible copy constructor, move constructor, copy assignment + operator, and move assignment operator is the same as a bitwise copy of the + object; + * Type [code]#T# has a [code]#public# non-deleted destructor; + * The destructor has no effect when executed on the device. + +When the application explicitly declares a class type to be device copyable, +arrays of that type and cv-qualified versions of that type are also device +copyable. + +[NOTE] +==== +It is unspecified whether the implementation actually calls the copy +constructor, move constructor, copy assignment operator, or move assignment +operator of a class declared as [code]#is_device_copyable_v# when doing an +inter-device copy. Since these operations must all be the same as a bitwise +copy, the implementation may simply copy the memory where the object resides. +Likewise, it is unspecified whether the implementation actually calls the +destructor for such a class on the device since the destructor must have no +effect on the device. +==== + +=== SYCL linker + +In SYCL, only offline linking is supported for SYCL programs and libraries, +however the mechanism is optional. +In the case of linking {cpp} functions to a SYCL application, +where the definitions are not available in the +same translation unit of the compiler, then the macro [code]#SYCL_EXTERNAL# +has to be provided. + + +=== Functions and data types available in kernels + +Inside kernels, the functions and data types available are restricted by the +underlying capabilities of <> devices. + + +== Endianness support + +SYCL does not mandate any particular byte order, but the byte order of the +host always matches the byte order of the devices. This allows data to be +copied between the host and the devices without any byte swapping. + +== Example SYCL application + +Below is a more complex example application, combining some of the features +described above. + +[source,,linenums] +---- +include::{code_dir}/largesample.cpp[lines=4..-1] +---- + + +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% end architecture %%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/adoc/chapters/copyright-spec.adoc b/adoc/chapters/copyright-spec.adoc new file mode 100644 index 00000000..fa373956 --- /dev/null +++ b/adoc/chapters/copyright-spec.adoc @@ -0,0 +1,80 @@ +Copyright 2011-2021 The Khronos Group, Inc. + +This Specification is protected by copyright laws and contains material +proprietary to Khronos. Except as described by these terms, it or any +components may not be reproduced, republished, distributed, transmitted, +displayed, broadcast or otherwise exploited in any manner without the +express prior written permission of Khronos. +Khronos grants a conditional copyright license to use and reproduce the +unmodified Specification for any purpose, without fee or royalty, EXCEPT no +licenses to any patent, trademark or other intellectual property rights are +granted under these terms. + +Khronos makes no, and expressly disclaims any, representations or +warranties, express or implied, regarding this Specification, including, +without limitation: merchantability, fitness for a particular purpose, +non-infringement of any intellectual property, correctness, accuracy, +completeness, timeliness, and reliability. +Under no circumstances will Khronos, or any of its Promoters, Contributors +or Members, or their respective partners, officers, directors, employees, +agents or representatives be liable for any damages, whether direct, +indirect, special or consequential damages for lost revenues, lost profits, +or otherwise, arising from or in connection with these materials. + +This Specification has been created under the Khronos Intellectual Property +Rights Policy, which is Attachment A of the Khronos Group Membership +Agreement available at https://www.khronos.org/files/member_agreement.pdf, and which +defines the terms 'Scope', 'Compliant Portion', and 'Necessary Patent Claims'. +Parties desiring to implement the Specification and make use of Khronos trademarks +in relation to that implementation, and receive reciprocal patent license protection +under the Khronos Intellectual Property Rights Policy must become Adopters and +confirm the implementation as conformant under the process defined by Khronos for +this Specification; see https://www.khronos.org/adopters. + +Some parts of this Specification are purely informative and so are EXCLUDED from +the Scope of this Specification. +// Jon: how much do we want to say about Informative spec sections? No +// convention in use at present. Could also add a "technical terminology" +// section and link from the following paragraph. +// The <> section of the +// <> defines how these parts of the Specification are identified. + +Where this Specification uses technical +terminology, defined in the <> or otherwise, that refer to +enabling technologies that are not expressly set forth in this +Specification, those enabling technologies are EXCLUDED from the Scope of +this Specification. +For clarity, enabling technologies not disclosed with particularity in this +Specification (e.g. semiconductor manufacturing technology, hardware +architecture, processor architecture or microarchitecture, memory +architecture, compiler technology, object oriented technology, basic +operating system technology, compression technology, algorithms, and so on) +are NOT to be considered expressly set forth; only those application program +interfaces and data structures disclosed with particularity are included in +the Scope of this Specification. + +For purposes of the Khronos Intellectual Property Rights Policy as it relates +to the definition of Necessary Patent Claims, all recommended or optional +features, behaviors and functionality set forth in this Specification, if +implemented, are considered to be included as Compliant Portions. + +Where this Specification includes +normative references to external documents, only the specifically +identified sections of those external documents are INCLUDED in the Scope of +this Specification. If not created by Khronos, those external documents may +contain contributions from non-members of Khronos not covered by the Khronos +Intellectual Property Rights Policy. + +ifndef::ratified_core_spec[] +This document contains extensions which are not ratified by Khronos, and as +such is not a ratified Specification, though it contains text from (and is a +superset of) the ratified SYCL Specification. The ratified version of the +SYCL Specification can be found at +https://www.khronos.org/registry/SYCL . +endif::ratified_core_spec[] + +Khronos and Vulkan are registered trademarks, and SPIR-V is a trademark of +The Khronos Group Inc. OpenCL is a trademark of Apple Inc. and OpenGL is a +registered trademarks of Hewlett Packard Enterprise, all used under license +by Khronos. All other product names, trademarks, and/or company names are +used solely for identification and belong to their respective owners. diff --git a/adoc/chapters/device_compiler.adoc b/adoc/chapters/device_compiler.adoc new file mode 100644 index 00000000..e7047d81 --- /dev/null +++ b/adoc/chapters/device_compiler.adoc @@ -0,0 +1,827 @@ +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% begin compiler_abi %%%%%%%%%%%%%%%%%%%%%%%%%%%% + +[[chapter.device.compiler]] += SYCL Device Compiler + +This section specifies the requirements of the SYCL device compiler. +Most features described in this section relate to underlying <> +capabilities of target devices and limiting the requirements of device +code to ensure portability. + + +== Offline compilation of SYCL source files + +There are two alternatives for a SYCL <>: a +[keyword]#single-source device compiler# and a device compiler that supports +the technique of <>. + +A SYCL device compiler takes in a {cpp} source file, extracts only the SYCL +kernels and outputs the device code in a form that can be enqueued from host +code by the associated <>. How the <> +invokes the kernels is implementation-defined, but a typical approach is for +a device compiler to produce a header file with the compiled kernel +contained within it. By providing a command-line option to the host +compiler, it would cause the implementation's SYCL header files to +[code]#{hash}include# the generated header file. The SYCL specification has +been written to allow this as an implementation approach in order to allow +<>. However, any of the mechanisms needed from the SYCL compiler, +the <> and build system are implementation-defined, as they +can vary depending on the platform and approach. + +A SYCL single-source device compiler takes in a {cpp} source file and compiles +both host and device code at the same time. This specification specifies how +a SYCL single-source device compiler sees and outputs device code for kernels, +but does not specify the host compilation. + + +[[sec:naming.kernels]] +== Naming of kernels + +SYCL kernels are extracted from {cpp} source files and stored in an +implementation-defined format. In the case of the shared-source compilation model, the kernels +have to be uniquely identified by both host and device compiler. This is +required in order for the host runtime to be able to load the kernel by using +a backend-specific host runtime interface. + +From this requirement the following rules apply for naming the kernels: + + * The kernel name is a [keyword]#{cpp} typename#. + * The kernel name must be forward declarable at namespace scope + (including global namespace scope) and may not be forward declared other + than at namespace scope. If it isn't forward declared + but is specified as a template argument in a kernel invoking interface, + as described in <>, then it may not conflict + with a name in any enclosing namespace scope. + +[NOTE] +==== +The requirement that a kernel name be forward declarable makes some types +for kernel names illegal, such as anything declared in the [code]#std# +namespace (adding a declaration to namespace [code]#std# leads to undefined +behavior). +==== + + * If the kernel is defined as a named function object type, the name can + be the typename of the function object as long as it is either declared + at namespace scope, or does not conflict with any name in an enclosing + namespace scope. + * If the kernel is defined as a lambda, a typename can optionally be + provided to the kernel invoking interface as described + in <>, so that the developer can control the + kernel name for purposes such as debugging or referring to the kernel + when applying build options. + * If a kernel function relies on template parameters, then those template + parameters must be contained by the kernel name. If such a kernel name + is specified as a template argument in a kernel invoking interface, then + the template parameters on which the kernel depends must be forward + declarable at namespace scope. + +In both single-source and shared-source implementations, a device compiler should +detect the kernel invocations (e.g. [code]#parallel_for)# +in the source code and compile the enclosed kernels, storing them with their +associated type name. + +The format of the kernel and the compilation techniques are details of an +implementation and not specified. The interface between the compiler and the +runtime for extracting and executing SYCL kernels on the device is a detail of +an implementation and not specified. + + +== Compilation of functions + +The SYCL device compiler parses an entire {cpp} source file supplied by the +user, including any header files referenced via [code]#{hash}include# +directives. From this source file, the SYCL device compiler must compile +kernels for the device, as well as any functions that the kernels call. + +The device compiler identifies kernels by looking for calls to +<> such as [code]#parallel_for#. One of +the parameters is a function object which is known as a +<>, and this function must always return +[code]#void#. Any function called by the <> is +also compiled for the device, and these functions together with the +<> are known as <>. The device +compiler searches recursively for any functions called from a +<>, and these functions are also compiled for the device and +known as <>. + +To illustrate, the following source code shows three functions and a kernel +invoke with comments explaining which functions need to be compiled for the +device. + +[source,,linenums] +---- +void f(handler& cgh) { + // Function "f" is not compiled for device + + cgh.single_task([=] { + // This code is compiled for device + g(); // This line forces "g" to be compiled for device + }); +} + +void g() { + // Called from kernel, so "g" is compiled for device +} + +void h() { + // Not called from a device function, so not compiled for device +} +---- + +In order for the SYCL device compiler to correctly compile <>, all +functions in the source file, whether <> or not, must be +syntactically correct functions according to this specification. A syntactically +correct function adheres to at least the minimum required {cpp} version +defined in <>. + + +[[sec:language.restrictions.kernels]] +== Language restrictions for device functions + +<> must abide by certain restrictions. The full set of +{cpp} features are not available to these functions. Following is a list of +these restrictions: + + * Pointers and objects containing pointers may be shared. However, when a pointer is + passed between SYCL devices or between the host and a SYCL device, + dereferencing that pointer on the device produces undefined behavior unless + the device supports <> and the pointer is an address within a + <> memory region (see <>). + * Memory storage allocation is not allowed in kernels. All memory allocation + for the device is done on the host using accessor classes or using + <> as explained in <>. + Consequently, the default allocation [code]#operator new# overloads + that allocate storage are disallowed in a SYCL kernel. The placement + [code]#new# operator and any user-defined overloads that do not + allocate storage are permitted. + * Kernel functions must always have a [code]#void# return type. A + kernel lambda trailing-return-type that is not [code]#void# is + therefore illegal, as is a return statement (that would return from the + kernel function) with an expression that does not convert to + [code]#void#. + * The odr-use of polymorphic classes and classes with virtual + inheritance is allowed. However, no virtual member functions are allowed + to be called in a <>. + * No function pointers or references are allowed to be called in a + <>. + * RTTI is disabled inside <>. + * No variadic functions are allowed to be called in a + <>. + * Exception-handling cannot be used inside a + <>. + [code]#noexcept# is allowed. + * Recursion is not allowed in a <>. + * Variables with thread storage duration ([code]#thread_local# + storage class specifier) are not allowed to be odr-used in a + <>. + * Variables with static storage duration that are odr-used inside a + <>, must be [code]#const# + or [code]#constexpr# and zero-initialized or constant-initialized. + +[NOTE] +==== +Amongst other things, this restriction makes it illegal for a +<> to access a global variable that isn't [code]#const# +or [code]#constexpr#. +==== + + * The rules for kernels apply to both the kernel function objects + themselves and all functions, operators, member functions, constructors + and destructors called by the kernel. This means that kernels can only + use library functions that have been adapted to work with SYCL. + Implementations are not required to support any library routines in + kernels beyond those explicitly mentioned as usable in kernels in this + spec. Developers should refer to the SYCL built-in functions + in <> to find functions that are specified to be usable + in kernels. + * Interacting with a special <> class (e.g. SYCL + [code]#accessor# or [code]#stream)# that is stored within a {cpp} union + is undefined behavior. + + +[[subsec:scalartypes]] +== Built-in scalar data types + +In a SYCL device compiler, the device definition of all standard {cpp} +fundamental types from <> must match the +host definition of those types, in both size and alignment. A device +compiler may have this preconfigured so that it can match them based on the +definitions of those types on the platform, or there may be a necessity for +a device compiler command-line option to ensure the types are the same. + +The standard {cpp} fixed width types, e.g. [code]#int8_t#, +[code]#int16_t#, [code]#int32_t#,[code]#int64_t#, +should have the same size as defined by the {cpp} standard for host and +device. + +ifdef::showtodos[] +[NOTE] +.Note +==== +To ensure that pointer types and [code]#size_t# use the same amount of +storage on host and device when inside structures, SYCL also requires that +device compilers use the host sizes for pointers or [code]#size_t#. Devices +may be using a smaller size internally for pointers and [code]#size_t#, +but this should not impact the programming model for users. In the case where +devices use larger pointer size internally than the host, then +[code]#size_t# will match the <> size. For structures shared +between host and device it is recommended to use fixed width types for pointers. +Scalar data types for a SYCL device compiler are described in +<>. +==== +endif::showtodos[] + + + +[[table.types.fundamental]] +.Fundamental data types supported by SYCL +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Fundamental data type @ Description +a@ +[source] +---- +bool +---- + a@ A conditional data type which can be either true or false. The value + true expands to the integer constant 1 and the value false expands to the + integer constant 0. + +a@ +[source] +---- +char +---- + a@ A signed or unsigned 8-bit integer, as defined by the {cpp} core language + +a@ +[source] +---- +signed char +---- + a@ A signed 8-bit integer, as defined by the {cpp} core language + +a@ +[source] +---- +unsigned char +---- + a@ An unsigned 8-bit integer, as defined by the {cpp} core language + +a@ +[source] +---- +short int +---- + a@ A signed integer of at least 16-bits, as defined by the {cpp} core language + +a@ +[source] +---- +unsigned short int +---- + a@ An unsigned integer of at least 16-bits, as defined by the {cpp} core language + +a@ +[source] +---- +int +---- + a@ A signed integer of at least 16-bits, as defined by the {cpp} core language + +a@ +[source] +---- +unsigned int +---- + a@ An unsigned integer of at least 16-bits, as defined by the {cpp} core language + +a@ +[source] +---- +long int +---- + a@ A signed integer of at least 32-bits, as defined by the {cpp} core language + +a@ +[source] +---- +unsigned long int +---- + a@ An unsigned integer of at least 32-bits, as defined by the {cpp} core language + +a@ +[source] +---- +long long int +---- + a@ An integer of at least 64-bits, as defined by the {cpp} core language + +a@ +[source] +---- +unsigned long long int +---- + a@ An unsigned integer of at least 64-bits, as defined by the {cpp} core language + +a@ +[source] +---- +float +---- + a@ A 32-bit floating-point. The float data type must conform to the IEEE 754 + single precision storage format. + +a@ +[source] +---- +double +---- + a@ A 64-bit floating-point. The double data type must conform to the IEEE 754 + double precision storage format. This type is only supported on devices + that have [code]#aspect::fp64#. + +|==== + + + +== Preprocessor directives and macros + +The standard {cpp} preprocessing directives and macros are supported. +The following preprocessor macros must be defined by all conformant +implementations: + + * [code]#SYCL_LANGUAGE_VERSION# substitutes an integer reflecting + the version number and revision of the SYCL language being supported + by the implementation. The version of SYCL defined in this document + will have [code]#SYCL_LANGUAGE_VERSION# substitute the integer + [code]#{SYCL_LANGUAGE_VERSION}#, composed with the general SYCL version + followed by 2 digits representing the revision number; + * [code]#SYCL_DEVICE_COPYABLE# is defined to 1 if the implementation + supports explicitly specified <> types as described in + <>. Otherwise, the implementation's definition of + device copyable falls back to {cpp} trivially copyable and + [code]#sycl::is_device_copyable# is ignored; + * [code]#+__SYCL_DEVICE_ONLY__+# is defined to 1 if the source file is + being compiled with a SYCL device compiler which does not produce host + binary; + * [code]#+__SYCL_SINGLE_SOURCE__+# is defined to 1 if the source file + is being compiled with a SYCL single-source compiler which produces host + as well as device binary; + * [code]#SYCL_FEATURE_SET_FULL# is defined to 1 if the SYCL implementation + supports the full feature set and is not defined otherwise. For more details + see <>; + * [code]#SYCL_FEATURE_SET_REDUCED# is defined to 1 if the SYCL implementation + supports the reduced feature set and not the full feature set, otherwise it + is not defined. For more details see <>; + * [code]#SYCL_EXTERNAL# is an optional macro which enables external + linkage of SYCL functions and member functions to be included in a SYCL kernel. + The macro is only defined if the implementation supports external linkage. + For more details see <> + +In addition, for each <> supported, the preprocessor macros described +in <> must be defined by all conformant implementations. + + +[[sec:optional-kernel-features]] +== Optional kernel features + +A number of kernel features defined by this SYCL specification are optional; +they may be supported on some devices but not on other devices. As described +in <>, an application can test whether a device supports +these features by testing whether the device has an associated aspect. The +following aspects are those that correspond to optional kernel features: + + * [code]#fp16# + * [code]#fp64# + * [code]#atomic64# + +In order to guarantee source code portability of SYCL applications that use +optional kernel features, all SYCL implementations must be able to compile +device code that uses these optional features regardless of whether the +implementation supports the features on any of its devices. + +Of course, applications that make use of optional kernel features should ensure +that a kernel using such a feature is submitted only to a device that supports +the feature. If the application submits a <> using a secondary +queue, then any kernel submitted from the <> should use only +features that are supported by both the primary queue's device and the +secondary queue's device. If an application fails to do this, the +implementation must throw a synchronous exception with the +[code]#errc::kernel_not_supported# error code from the +<> (e.g. [code]#parallel_for()#). + +It is legal for a SYCL application to define several kernels in the same +translation unit even if they use different optional features, as shown in the +following example: + +[source,,linenums] +---- +include::{code_dir}/twoOptionalFeatures.cpp[lines=4..-1] +---- + +An implementation may not raise a compile time diagnostic or a run time +exception merely due to speculative compilation of a kernel for a device when +the application does not actually submit the kernel to that device. To +illustrate using the example above, assume that device [code]#dev1# does not +have [code]#aspect::atomic64# and device [code]#dev2# doe not have +[code]#aspect::fp16#. An implementation cannot raise a diagnostic due to +compilation of [code]#KernelA# for device [code]#dev2# or for compilation of +[code]#KernelB# for device [code]#dev1# because the application does not submit +these kernels to those devices. + +[NOTE] +==== +It is expected that this requirement will have an impact on the way an +implementation bundles kernels into device images. For example, naively +bundling [code]#KernelA# and [code]#KernelB# into the same device image could +run afoul of this requirement if the implementation compiles the entire device +image when [code]#KernelA# is submitted to device [code]#dev1#. +==== + + +[[sec:device.attributes]] +== Attributes for device code + +{cpp} attributes may be used to decorate kernels and device functions in order +to influence the code generated by the device compiler. These attributes are +all defined in the [code]#+[[sycl::]]+# namespace, with the exception of the +deprecated attributes described in <>. + +Each attribute-token defined in this section may be applied at most once for +any particular kernel or device function. Applications that decorate a kernel +or device function with the same attribute-token more than once are ill formed +and the compiler must issue a diagnostic. If a kernel or device function is +decorated with one of these attributes, the decoration must exist on the first +declaration of the kernel or device function in the translation unit. Programs +which fail to do this are ill formed and the compiler must issue a diagnostic. +If a function is declared with an attribute in one translation unit and the +same function is declared without the same attribute in another translation +unit, the program is ill formed and no diagnostic is required. Applying these +attributes to any language construct other than those specified in this section +has implementation-defined effect. + +If any of these attributes is applied to a device function that is also +compiled for the host, it has no effect when the function is compiled for the +host. + + +=== Kernel attributes + +The attributes in <> are applied to the function-type +of kernel function declarations. The example below demonstrates this syntax +using the [code]#[[sycl::reqd_work_group_size(16)]]# attribute. + +[source,,linenums] +---- +include::{code_dir}/attributes.cpp[lines=4..-1] +---- + +[[table.kernel.attributes]] +.Attributes for kernel functions +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ SYCL attribute @ Description +a@ +[source] +---- +reqd_work_group_size(dim0) +reqd_work_group_size(dim0, dim1) +reqd_work_group_size(dim0, dim1, dim2) +---- + a@ Indicates that the kernel must be launched with the specified work-group size. + The order of the arguments matches the constructor of the [code]#group# + class. Each argument to the attribute must be an integral constant expression. The + dimensionality of the attribute variant used must match the dimensionality of + the work-group used to invoke the kernel. + +SYCL device compilers should give a compilation error if the required +work-group size is unsupported. If the kernel is submitted for execution using +an incompatible work-group size, the SYCL runtime must throw an +[code]#exception# with the [code]#errc::nd_range# error code. + +a@ +[source] +---- +work_group_size_hint(dim0) +work_group_size_hint(dim0, dim1) +work_group_size_hint(dim0, dim1, dim2) +---- + a@ Hint to the compiler on the work-group size most likely to be used when + launching the kernel at runtime. Each argument must be an integral constant + expression, and the number of dimensional values defined provide additional + information to the compiler on the dimensionality most likely to be used when + launching the kernel at runtime. The effect of this attribute, if any, is + implementation-defined. + +a@ +[source] +---- +vec_type_hint() +---- + a@ Hint to the compiler on the vector computational width of of the kernel. The + argument must be one of the vector types defined in <>. + The effect of this attribute, if any, is implementation-defined. + +This attribute is deprecated (available for use, but will likely be removed in +a future version of the specification and is not recommended for use in new code). + +a@ +[source] +---- +reqd_sub_group_size(dim) +---- + a@ Indicates that the kernel must be compiled and executed with the specified + sub-group size. The argument to the attribute must be an integral constant + expression. + +SYCL device compilers should give a compilation error if the required sub-group +size is unsupported by the device or incompatible with any language feature used +by the kernel. The set of valid sub-group sizes for a kernel can be queried as +described in <> and +<>. + +a@ +[source] +---- +sycl::requires(has(aspect, ...)) +---- + a@ This attribute may be used to decorate either the declaration of a kernel + function that is defined in the current translation unit or to decorate + the declaration of a non-kernel device function. The following + description applies when the attribute decorates a kernel function. + +The parameter list to the [code]#sycl::requires()# attribute may either be +empty or it may be a single [code]#has()# clause. The parameter list to the +[code]#has()# clause consists of zero or more [code]#constexpr# integral +expressions, where each integer is interpreted as one of the enumerated values +in the [code]#sycl::aspect# enumeration type. Specifying an empty parameter +list to [code]#sycl::requires()# is equivalent to specifying a [code]#has()# +clause with an empty parameter list. + +Specifying this attribute on a kernel has two effects. First, it causes the +<> to throw a synchronous exception with the +[code]#errc::kernel_not_supported# error code if the kernel is submitted to a +device that does not have one of the listed aspects. (This includes the device +associated with the secondary queue if the kernel is submitted from a +<> that has a secondary queue.) Second, it causes the compiler +to issue a diagnostic if the kernel (or any of the functions it calls) uses an +optional feature that is associated with an aspect that is not listed in the +attribute. + +The value of each parameter to the [code]#has()# clause must be equal to one of +the values in the [code]#sycl::aspect# enumeration type (including any extended +values the implementation may provide). If it does not, the program is ill +formed and the compiler must issue a diagnostic. + +See <> for an example of this attribute. + +|==== + +.Example of the [code]#sycl::requires()# attribute +[[listing:requires]] +[source,,linenums] +---- +include::{code_dir}/requires.cpp[lines=4..-1] +---- + + +=== Device function attributes + +The attributes in <> are applied to the declaration +of a non-kernel device function. + +[[table.device.attributes]] +.Attributes for non-kernel device functions +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ SYCL attribute @ Description +a@ +[source] +---- +sycl::requires(has(aspect, ...)) +---- + a@ This attribute may be used to decorate either the declaration of a kernel + function that is defined in the current translation unit or to decorate + the declaration of a non-kernel device function. The following + description applies when the attribute decorates a non-kernel device + function declaration. + +The syntax of this attribute's parameter list is the same as the syntax for +the form of [code]#sycl::requires()# that is specified on a kernel function +(see <>). + +This attribute is required when a non-kernel device function that uses optional +device features is called in one translation unit and defined in another +translation unit via the [code]#SYCL_EXTERNAL# macro. + +When this attribute appears in a translation unit that calls the decorated +device function, it is an assertion that the device function uses optional +features that correspond to the aspects listed in the attribute. The program +is ill formed if the called device function uses optional features that do not +correspond to any of the aspects listed in the attribute, or if the function +uses optional features and the attribute is not specified. No diagnostic is +required in this case. + +When this attribute appears in a translation unit that defines the decorated +device function, it causes the compiler to issue a diagnostic if the device +function (or any of the functions it calls) uses an optional feature that is +associated with an aspect that is not listed in the attribute. + +|==== + + +[[subsec::attributes.deprecated]] +=== Deprecated kernel attribute syntax + +The SYCL 1.2.1 specification (superseded by this version) defined two mechanisms +for kernel attributes to be specified, which are deprecated in this version of +SYCL. The old syntaxes are supported but will be removed in a future version, and +are therefore not recommended for use. Specifically, the following two +attribute syntaxes defined by the SYCL 1.2.1 specification are deprecated: + + . The attribute syntax defined by the OpenCL C specification within device + code like [code]#+__attribute__((attrib))+#. + . The {cpp} attribute specifier syntax in the [code]#+[[cl::]]+# namespace + applied to device functions (not the function-type of a kernel + function), including automatic propagation of the attribute to any + caller of such device functions. + + +== Address-space deduction + +{cpp} has no type-level support to represent address spaces. As a consequence, +the SYCL generic programming model does not directly affect the {cpp} type of +unannotated pointers and references. + +Source level guarantees about address spaces in the SYCL generic +programming model can only be achieved using pointer classes (instances of +[code]#multi_ptr#), which are regular classes that represent pointers +to data stored in the corresponding address spaces. + +In SYCL, the address space of pointer and references are derived from: + + * Accessors that give access to shared data. They can be bound to a memory + object in a command group and passed into a kernel. Accessors are used + in scheduling of kernels to define ordering. Accessors to buffers have a + compile-time address space based on their access mode. + * Explicit pointer classes (e.g. [code]#global_ptr#) holds a pointer + which is known to be addressing the address space represented by the + [code]#access::address_space#. This allows the compiler to + determine whether the pointer references global, local, constant or + private memory and generate code accordingly. + * Raw {cpp} pointer and reference types (e.g. [code]#int*#) are allowed + within SYCL kernels. They can be constructed from the address of local + variables, explicit pointer classes, or accessors. + + +[[subsec:addrspaceAssignment]] +=== Address space assignment + +In order to understand where data lives, the device compiler is +expected to assign address spaces while lowering types for the +underlying target based on the context. Depending on the <> +and mode, address space deducing rules differ slightly. + +If the target of the SYCL backend can represent the generic address space, +then the "common address space deduction rules" in +<> and the "generic as default address space rules" +in <> apply. If the target of the SYCL backend +cannot represent the generic address space, then the "common address space +deduction rules" in <> and the "inferred address +space rules" in <> apply. + +[NOTE] +==== +SYCL address space does not affect the type, address space shall be +understood as memory segment in which data is allocated. For +instance, if [code]#int i;# is allocated to the global address +space, then [code]#decltype(&i)# shall evaluate to +[code]#int*#. +==== + + +[[subsec:commonAddressSpace]] +=== Common address space deduction rules + +The variable declarations get assigned to an address space depending on their +scope and storage class: + + * Namespace scope + ** If the type is [code]#const#, the address space the declaration is assigned to + is implementation-defined. If the target of the SYCL backend can represent the + generic address space, then the assigned address space must be compatible with + the generic address space. + +[NOTE] +==== +Namespace scope non-[code]#const# declarations cannot be used within a kernel, +as restricted in <>. This means that +non-[code]#const# global variables cannot be accessed by any device kernel or +code called by the device kernel. +==== + + * Block scope and function parameter scope + ** Declarations with static storage duration are treated the same way as variables + in namespace scope + ** Otherwise the declaration is assigned to the local address space if + declared in a hierarchical context + ** Otherwise the declaration is assigned to the private address space + * Class scope + ** Static data members are treated the same way as for variable in + namespace scope + +The result of a prvalue-to-xvalue conversion is assigned to the local +address space if it happens in a hierarchical context or to the private +address space otherwise. + + +[[subsec:genericAddressSpace]] +=== Generic as default address space + +For SYCL backends that can represent the generic address space +(see <>), unannotated pointers and +references are considered to be pointing to the generic address space. + + +[[subsec:inferredAddressSpace]] +=== Inferred address space + +[NOTE] +.Note for this version +==== +The address space deduction feature described next is inherited from +the SYCL 1.2.1 specifications. This section will be changed in a future version +to better align with addition of generic address space and generic +as default address space. +==== + +For SYCL backends that cannot represent the generic address space +(see <>), inside kernels the SYCL device +compiler will need to auto-deduce the memory region +of unannotated pointer and reference types during the lowering of types +from {cpp} to the underlying representation. + +If a kernel function or device function contains a pointer or reference type, +then the address space deduction must be attempted using the following rules: + + * If an explicit pointer class is converted into a {cpp} pointer value, then + the {cpp} pointer value will point to same address space as the one + represented by the explicit pointer class. + * If a variable is declared as a pointer type, but initialized in its + declaration to a pointer value with an already-deduced address space, + then that variable will have the same address space as its initializer. + * If a function parameter is declared as a pointer type, and the argument + is a pointer value with a deduced address space, then the function will + be compiled as if the parameter had the same address space as its + argument. It is legal for a function to be called in different places + with different address spaces for its arguments: in this case the + function is said to be "`duplicated`" and compiled multiple times. Each + duplicated instance of the function must compile legally in order to + have defined behavior. + * If a function return type is declared as a pointer type and return + statements use address space deduced expressions, then the function will + be compiled as if the return type had the same address space. To compile + legally, all return expressions must deduce to the same address space. + * The rules for pointer types also apply to reference types. i.e. a + reference variable takes its address space from its initializer. A + function with a reference parameter takes its address space from its + argument. + * If no other rule above can be applied to a declaration of a pointer, + then it is assumed to be in the private address space. + +It is illegal to assign a pointer value addressing one address space to a pointer +variable addressing a different address space. + + +== SYCL offline linking + +// Jon: Section empty, but subsection has content? Odd choice. + + +[[subsec:syclexternal]] +=== SYCL functions and member functions linkage + +The default behavior in SYCL applications is that all the definitions and +declarations of the functions and member functions are available to the SYCL compiler, +in the same translation unit. When this is not the case, all the symbols that +need to be exported to a SYCL library or from a {cpp} library to a SYCL +application need to be defined using the macro: [code]#SYCL_EXTERNAL#. + +The [code]#SYCL_EXTERNAL# macro will only be defined if the implementation +supports offline linking. The macro is implementation-defined, but the following +restrictions apply: + + * [code]#SYCL_EXTERNAL# can only be used on functions; + * if the SYCL backend does not support the generic address space then the + function cannot use raw pointers as parameter or return types. Explicit + pointer classes must be used instead; + * externally defined functions cannot call a + [code]#sycl::parallel_for_work_item# member function; + * externally defined functions cannot be called from a + [code]#sycl::parallel_for_work_group# scope. + +The SYCL linkage mechanism is optional and implementation-defined. + +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% end compiler_abi %%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/adoc/chapters/extensions.adoc b/adoc/chapters/extensions.adoc new file mode 100644 index 00000000..91b49ab0 --- /dev/null +++ b/adoc/chapters/extensions.adoc @@ -0,0 +1,204 @@ +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% begin extensions %%%%%%%%%%%%%%%%%%%%%%%%%%%% + +[[chapter.extensions]] += SYCL Extensions + +This chapter describes the mechanism by which the <> can be +extended. Some parts of this chapter are requirements that all implementations +must follow if they extend the <>, while other parts of the chapter +are merely guidelines. Unless a requirement is specifically stated as +normative, all content in this chapter is a non-normative guideline. + +An extension can be either of two flavors: an extension ratified by the Khronos +SYCL group or a vendor supplied extension. In both cases, an extension is an +optional feature set which an implementation need not implement in order to be +conformant with the <>. + +Vendors may choose to define extensions in order to expose custom features or +to gather feedback on an API that is not yet ready for inclusion in the +<>. Once a vendor extension has stabilized, the vendor is +encouraged to promote it to a future version of the <> or to a +ratified Khronos extension. Thus, vendor extensions can be viewed as a +pipeline of features for consideration in future SYCL versions. + +The Khronos SYCL group may define extensions for features that are not yet +ready for the <> but are implemented by more than one vendor. +These extensions also may be considered for inclusion in a future version of +the <>. + +This chapter does not describe any particular extension to SYCL. Rather, it +describes the _mechanism_ for defining an extension. Each extension is defined +by its own separate document. If an extension is ratified by the Khronos SYCL +group, that group will release a document describing the extension. If a +vendor defines an extension, the vendor is responsible for releasing its +documentation. + + +== Definition of an extension + +An extension can take many possible forms. Some examples include: + + * adding new types or free functions to the SYCL runtime; + * modifying existing SYCL classes, structs, or enumeration types by + adding new members, member functions, or enumerated values; + * adding new overloads for existing free functions or member functions; + * defining new specializations for existing SYCL templates; + * adding new {cpp} attributes; + * adding new predefined macros; + * adding new keywords to the language; + * adding a new backend. + +An extension may also broaden the definition of existing functions defined in +the <> by defining semantics for cases that are left unspecified by +the <>. + + +== Requirements for an extension + +This section is normative. All vendors which provide an extension must abide +by the requirements described here. + +An extension may not change the definition of existing functions defined by the +<> in a way that changes their specified behavior. Also, an +extension may not remove any feature defined by the <>. + +The vendor must choose at least one [code]## which uniquely +identifies the vendor's SYCL implementation. The Khronos SYCL group does not +provide any registry of the strings, so each vendor is responsible for choosing +its own. One way to choose a unique string is to use the vendor's company name +or a marketing name that is associated with the vendor's implementation. +Ultimately, it is each vendor's responsibility to choose a string that is +unique. The strings "khr" and "KHR" are reserved for the Khronos SYCL group +for its own extensions, so vendors may not use these as a +[code]##. + +The implementation must predefine at least one macro of the form +[code]#SYCL_IMPLEMENTATION_# which allows applications to test +whether they are being compiled with that vendor's implementation. For +example, the Acme vendor could predefine a macro whose name is +[code]#SYCL_IMPLEMENTATION_ACME#. + + +== Guidelines for portable extensions + +Vendors who want to ensure that their extension does not collide with other +vendors' extensions or with future versions of the <> should follow +the additional rules specified in this section. However, this is not a +requirement for conformance. + +=== Extension namespace + +If an extension adds new types or free functions, it should avoid adding these +directly in the [code]#sycl::# namespace since future versions of the +<> may also add new identifiers in this namespace. The namespace +[code]#sycl::ext::# is reserved for use by extensions. For +example, the Acme vendor could define extended types and free functions in the +namespace [code]#sycl::ext::acme#, and this would guarantee that they will not +collide with definitions in other vendors' extensions or with future versions +of the <>. + +=== Names for extensions to existing classes or enumerations + +An extension may add new members or member functions to existing SYCL classes +or new values to existing SYCL enumeration types. To ensure these extensions +do not collide, vendors are encouraged to name them with the prefix +[code]#ext__#. For example, the Acme vendor could add a new +member function to the [code]#sycl::device# class named +[code]#device::ext_acme_fancy()# or a new value to the [code]#sycl::aspect# +enumeration named [code]#aspect::ext_acme_fancier#. + +In some cases, an extension does not have the freedom to choose a specific +function name. For example, this could happen if the extension adds a new +constructor overload for an existing SYCL class. In cases like this, the +extension should ensure that one of the function parameters has a type that is +defined in the extension's namespace. For example, the Acme vendor could add +a new constructor for [code]#sycl::context# with the signature +[code]#context(ext::acme::frobber &)#. + +A similar situation can occur if an existing SYCL template is specialized with +an extended enumerated value. +Obviously, the extension cannot rename the template in this case. Instead, +it is sufficient that the template is specialized with an extended enumerated +value, and this guarantees that the extended specialization will not collide. + +[NOTE] +==== +Vendors are encouraged to use the [code]#ext__# prefix form when +possible for additions to existing SYCL classes because this form makes the +extension's vendor name apparent. People reading application code will +immediately know that a member function is an extension, and they will +immediately know which vendor's documentation to consult. +==== + +=== Feature test macros + +Vendors are encouraged to group a related set of extensions together into a +"feature" and to predefine a feature-test macro when the implementation +supports the extensions in that feature. The feature-test macro should have +the following form to ensure it is unique: +[code]#SYCL_EXT__#. For example, the Acme vendor +might define a feature-test macro named [code]#SYCL_EXT_ACME_FANCYFEATURE#. +This allows applications to protect code using the extension with +[code]##ifdef#, so that the code is skipped when compiled with an +implementation that doesn't support the feature. + +Since the interface to an extension might change from one release to another, +vendors are also encouraged to predefine the macro's value to the version of +the extension. Vendors should use a numerical value that monotonically +increases for each revision of the extension API. + +Of course, an extension may also predefine other macros. In order to ensure +that these macro names do not collide with other extensions or future versions +of the <>, the name should start with the prefix +[code]#SYCL_EXT_# or [code]#SYCL_IMPLEMENTATION_#. + +=== Attribute namespace + +An extension may define new {cpp} attributes. The attribute namespace +[code]#sycl::# is reserved for the <>, so vendors should choose a +different namespace for any attributes they add. + +=== Include file paths + +An extension may define new [code]##include# files under the [code]#"sycl"# +path. The path prefix [code]#"sycl/ext/"# is reserved for this +purpose. For example, the Acme vendor could add a header file +[code]#"sycl/ext/acme/fancy.h"# and be guaranteed that it would not conflict +with other extensions or with future versions of the <>. + +=== Optional kernel features + +An extension may also add new optional kernel features -- features which are +supported on some devices but not on others. Vendors are encouraged to follow +the same mechanism outlined in <>. Therefore, +an extended optional kernel feature should have a matching extension to the +[code]#sycl::aspect# enumerated type. + +=== Adding a backend + +An extension may also add a new backend. If it does, the naming of the +backend APIs follows the normal guidelines for extensions and also follows +the naming pattern for backends that are defined in the <>. To +illustrate: + +* The extension should add a new value to the [code]#sycl::backend# enumeration + type using a naming scheme like [code]#ext__#. For + example, if the Acme vendor adds a backend named "foo", it would add an + enumerated value named [code]#sycl::backend::ext_acme_foo#. + +* The extension should define the backend's interop API in a namespace named + [code]#sycl::ext::::#. For our hypothetical Acme + example, this would be a namespace named [code]#sycl::ext::acme::foo#. + +* If the backend interop API is available through a separate header file, that + header should be named + [code]#"sycl/ext//backend/.hpp"#. For our + hypothetical Acme example this would be + [code]#"sycl/ext/acme/backend/foo.hpp"#. + +* The extension should predefine a macro for the backend when it is "active". + The name of this macro should be + [code]#SYCL_EXT__BACKEND_#. For our hypothetical + Acme example this would be [code]#SYCL_EXT_ACME_BACKEND_FOO#. + +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% end extensions %%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/adoc/chapters/feature_sets.adoc b/adoc/chapters/feature_sets.adoc new file mode 100644 index 00000000..94acb198 --- /dev/null +++ b/adoc/chapters/feature_sets.adoc @@ -0,0 +1,74 @@ +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% begin feature_sets %%%%%%%%%%%%%%%%%%%%%%%%%%%% + +[appendix] +[[cha:feature-sets]] += Feature sets + +As of SYCL 2020 there are now two distinct feature sets which a SYCL +implementation can conform to, in order to better fit the requirements of +different domains, such as embedded, mobile, and safety critical, which may have +limitations because of the toolchains used. + +A SYCL implementation can choose to conform to either the full feature set or +the reduced feature set. + + +[[sec:feature-sets.full]] +== Full feature set + +The full feature set includes all features specified in the <> with +no exceptions. + + +[[sec:feature-sets.reduced]] +== Reduced feature set + +The reduced feature set makes certain features optional or restricted to +specific forms. The following list defines all the differences between the +reduced feature set and the full feature set. + + . *Un-named SYCL kernel functions:* <> + which are defined using a lambda expression and therefore have no standard + name are required to be provided a name via the kernel name template parameter + of kernel invocation functions such as [code]#parallel_for#. This overrides + the <> rules for <> naming as specified in + <>. + + . *Address space mode:* The <> mode used in the reduced feature set is not required to be + <>, regardless of SYCL + backend in use. + Instead the <> mode + may always be used. + + . *Declarations:* In addition to the requirements specified in + <>, the reduced feature set does not require + support for odr-use inside <> of variables + declared [code]#const# or [code]#constexpr# with static storage duration. + + +[[sec:feature-sets.compatibility]] +== Compatibility + +In order to avoid introducing any kind of divergence the reduced and full +feature sets are defined such that the full feature set is a subsumption of +the reduced feature set. This means that any applications which are +developed for the reduced feature set will be compatible with both a SYCL +reduced implementation and a SYCL full implementation. + + +[[sec:feature-sets.conformance]] +== Conformance + +One of the reasons for having this be defined in the specification is that +hardware vendors which wish to support SYCL on their platform(s) want to be able +to demonstrate their support for it by passing conformance. However, if passing +conformance means adopting features which they do not believe to be necessary at +an additional development effort then this may deter them. + +Each feature set has its own route for passing conformance allowing adopters of +SYCL to specify the feature set they wish to test conformance against. The +conformance test suite would then alter or disable the tests within the test +suite according to how the feature sets are differentiated above. + +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% end feature_sets %%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/adoc/chapters/glossary.adoc b/adoc/chapters/glossary.adoc new file mode 100644 index 00000000..0df2cd3d --- /dev/null +++ b/adoc/chapters/glossary.adoc @@ -0,0 +1,560 @@ +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% begin glossary %%%%%%%%%%%%%%%%%%%%%%%%%%%% + +// TODO 2019/06/10 +// Look at the remaining [keyword] spans in the document and add the +// lacking entries here + +// The purpose of this glossary is to define the key concepts involved in +// specifying SYCL. This section includes definitions of terminology used +// throughout the specification document. + +[glossary] +[[glossary]] += Glossary + +[glossary] +[[accessor]]accessor:: + An accessor is a class which allows a <> to access data managed + by a <> or <> class or allows a <> + to access local memory on a <>. Accessors are also used to express + the dependencies among the different <>. + For the full description please refer to <> + +[[application-scope]]application scope:: + The application scope starts with the construction first + <> class object and finishes with the destruction of the + last one. Application refers to the {cpp} <> and not + the <>. + +[[aspect]]aspect:: + A characteristic of a <> which determines whether it supports + some optional feature. Aspects are always boolean, so a <> + either has or does not have an aspect. + +[[async-error]]asynchronous error:: + A SYCL asynchronous error is an error occurring after the host API call + invoking the error causing action has returned, such that the error + cannot be thrown as a typical {cpp} exception from a host API call. Such + errors are typically generated from device kernel invocations which are + executed when SYCL task graph dependencies are satisfied, which occur + asynchronously from host code execution. For the full description and + associated asynchronous error handling mechanisms, please refer to + <>. + +[[async-handler]]async_handler:: + An asynchronous error handler object is a function class instance + providing necessary code for handling all the asynchronous errors + triggered from the execution of command groups on a queue, within a + context or an associated event. For the full description please refer to + <>. + +[[barrier]]barrier:: + A barrier is either a <>, or a kernel execution + <> depending on whether it is a synchronization point on + the command queue or on a group of work-items in a kernel execution. + +[[blocking-accessor]]blocking accessor:: + A blocking accessor is an <> which provides immediate access + and continues to provide access until it is destroyed. For the full + description please refer to <> + +[[buffer]]buffer:: ++ +-- +The buffer class manages data for the SYCL {cpp} host application and the +SYCL device kernels. The buffer class may acquire ownership of some host +pointers passed to its constructors according to the constructor kind. + +The buffer class, together with the accessor class, is responsible for +tracking memory transfers and guaranteeing data consistency among the +different kernels. The <> manages the memory allocations +on both the host and the <> within the lifetime of the buffer +object. For the full description please refer to <>. +-- + +[[bundle-state]]bundle state:: + A SYCL bundle state represents the state of a <> and + therefore its capabilities in the SYCL programming API. Possible states + are <>, <> or <>. + +[[command]]command:: + A request to execute work that is submitted to a <> such as the + invocation of a <>, the invocation of a + <> or an asynchronous copy. + +[[command-group]]command group:: + In SYCL, the operations required to process data on a <> are + represented using a <>. Each + <> is given a unique <> + object to perform all the necessary work required to correctly process + data on a <> using a kernel. In this way, the group of + commands for transferring and processing data is enqueued as a command + group on a <> for execution. A command group is submitted + atomically to a SYCL queue. + +[[command-group-function-object]]command group function object:: + A type which is callable with [code]#operator()# that takes a + reference to a <>, that defines a <> which + can be submitted by a <>. The function object can be a named + type, lambda function or [code]#std::function#. + +[[handler]]command group handler:: + The command group handler class provides the interface for the commands + that can be executed inside the <>. It is + provided as a scoped object to all of the data access requests within + the command group scope. For the full description please refer to + <>. + +[[command-group-scope]]command group scope:: + The command group scope is the function scope defined by the + <>. The command group <> + object lifetime is restricted to the command group scope. For more + details see <>. + +[[queue-barrier]]command queue barrier:: + The SYCL API provides two variants for functions that force + synchronization on a SYCL command queue. The + [code]#sycl::queue::wait()# and + [code]#sycl::queue::wait_and_throw()# functions force the SYCL + command queue to wait for the execution of the + <> before it is able to continue + executing. + +[[constant-memory]]constant memory:: + A region of memory that remains constant during the execution of + a kernel. The <> allocates and initializes memory + objects placed into constant memory. + +[[context]]context:: + A <> represents the runtime data structures and state + required by a <> API to interact with a group of <> + associated with a <>. The context is defined as the + [code]#sycl::context# class, for further details please see + <>. + +[[control-flow]]control flow:: + When all <> in a <> are executing the same + sequence of statements, they are said to be executing under _converged_ + control flow. Control flow _diverges_ when different work-items in a + group execute a different sequence of statements, typically as a result + of evaluating conditions differently (e.g. in selection statements or + loops). + +[[core-spec]]core SYCL specification:: + The text of the SYCL language specification (this document), excluding + the text of any backend specifications and excluding the text for any + extensions. + +[[device]]device:: + A SYCL device is an abstraction of a piece of hardware that can execute + <>. + +[[device-compiler]]device compiler:: + A SYCL device compiler is a compiler that produces <> + binaries from a valid <>. For the full description + please refer to <>. + +[[device-copyable]]device copyable:: + Data that is shared between the host and the devices must generally + have a type that abides by the restrictions listed in + <> for a device copyable type. + +[[device-function]]device function:: + A device function is any function in a <> + that can be run on a <>. This includes + <> and, recursively, functions + they call. + +[[device-image]]device image:: + A device image is a representation of one or more <> in an + implementation-defined format. A device image could be a compiled version + of the kernels in an intermediate language representation which needs to be + translated at runtime into a form that can be invoked on a <>, it + could be a compiled version of the kernels in a native code format that is + ready to be invoked without further translation, or it could be a source + code representation which needs to be compiled before it can be invoked. + Other representations are possible too. + +[[device-image-selection-function]]device image selection function:: + A callable object which takes the begin and end iterators of a + <> pointing to a sequence of <> and returns an + iterator to a chosen <>. + +[[device-selector]]device selector:: + A way to select a device used in various places. This is a callable + object taking a <> reference and returning an integer rank. + One of the device with the highest positive value is selected. See + <> for more details. + +[[event]]event:: + A SYCL object that represents the status of an operation that is being + executed by the SYCL runtime. + +[[executable]]executable:: + A state which a <> can be in, representing + <> as an executable. + +[[generic-memory]]generic memory:: + Generic memory is a virtual memory region which can represent + <>, <> and <> region. + +[[global-id]]global id:: + As in OpenCL, a global ID is used to uniquely identify a <> + and is derived from the number of global <> specified + when executing a kernel. A global ID is a one, two or three-dimensional + value that starts at 0 per dimension. + +[[global-memory]]global memory:: + Global memory is a memory region accessible to all <> + executing on a <>. + +[[group]]group:: + A group of work-items within the index space of a SYCL kernel execution, + such as a <> or <>. + +[[group-barrier]]group barrier:: + A synchronization function within a group of <>. All the + <> of a group must execute the barrier construct before any + <> continues execution beyond the barrier. Additionally all work-items + in the group execute a release <> prior to synchronizing at the + barrier, all work-items in the group execute an acquire <> after + synchronizing at the barrier, and there is an implicit synchronization between + these acquire and release fences as if through an atomic operation on an + atomic object internal to the barrier implementation. + +[[h-item]]h-item:: + A unique identifier representing a single <> within the + index space of a SYCL kernel hierarchical execution. Can be one, two or + three dimensional. In the SYCL interface a <> is represented + by the [code]#h_item# class (see <>). + +[[host]]host:: + Host is the system that executes the {cpp} application including the SYCL + API. + +[[host-pointer]]host pointer:: + A pointer to memory on the host. Cannot be accessed directly from a + <>. + +[[host-task]]host task:: + A <> which invokes a native {cpp} callable, scheduled + conforming to SYCL dependency rules. + +[[host-task-command]]host task command:: + A type of command that can be used inside a <> in order + to schedule a native {cpp} function. + +[[id]]id:: + It is a unique identifier of an item in an index space. It can be one, + two or three dimensional index space, since the SYCL kernel execution + model is an <>. It is one of the index space classes. For + the full description please refer to <>. + +[[image]]image:: + Images in SYCL, like buffers, are abstractions of multidimensional + structured arrays. Image can refer to [code]#unsampled_image# and + [code]#sampled_image#. For the full description please refer to + <>. + +[[implementation-defined]]implementation-defined:: + Behavior that is explicitly allowed to vary between conforming + implementations of SYCL. A SYCL implementer is required to document the + implementation-defined behavior. + +[[index-space-classes]]index space classes:: + Like in OpenCL, the kernel execution model defines an + <> index space. + The <> class that defines an <> is the + [code]#sycl::nd_range#, which takes as input the sizes of global + and local work-items, represented using the [code]#sycl::range# + class. The kernel library classes for indexing in the defined + <> are the following classes: ++ + * [code]#sycl::id# : The basic index class representing an <>; + * [code]#sycl::item# : The <> index class that contains the + <> and <>; + * [code]#sycl::nd_item# : The <> index class that contains the + <>, <> and the <>; + * [code]#sycl::group# : The <> class that contains the + <> and the member functions on a <>. + +[[input]]input:: + A state which a <> can be in, representing + <> as a source or intermediate representation + +[[item]]item:: + An item id is an interface used to retrieve the <>, + <> and <>. For further details see + <>. + +[[kernel]]kernel:: + A kernel represents a <> that has been compiled for a + device, including all of the <> it calls. + A kernel is implicitly created when a <> is submitted + to a device via a <>. However, a kernel can + also be created manually by pre-compiling a <> (see + <>). + +[[kernel-bundle]]kernel bundle:: + A kernel bundle is a collection of <> that are + associated with the same <> and with a set of <>. + Kernel bundles have one of three states: <>, <> or + <>. Kernel bundles in the executable state are ready to be + invoked on a device, whereas bundles in the other states need to be + translated into the executable state before they can be invoked. + +[[kernel-handler]]kernel handler:: + A representation of a <> being invoked that is + available to the <>. + +// May conflict with host_task MR + +[[kernel-invocation-command]]kernel invocation command:: + A type of command that can be used inside a <> in order + to schedule a <>, includes + [code]#single_task#, all variants of [code]#parallel_for# and + [code]#parallel_for_workgroup#. + +[[kernel-name]]kernel name:: + A kernel name is a class type that is used to assign a name to the + kernel function, used to link the host system with the kernel object + output by the device compiler. For details on naming kernels please see + <>. + +[[kernel-scope]]kernel scope:: + The function scope of the [code]#operator()# on a + <>. Note that any function or member function called from + the kernel is also compiled in kernel scope. The kernel scope allows {cpp} + language extensions as well as restrictions to reflect the capabilities + of devices. The extensions and restrictions are defined in the + SYCL device compiler specification. + +[[local-id]]local id:: + A unique identifier of a <> among other work-items of a + <>. + +[[local-memory]]local memory:: + Local memory is a memory region associated with a <> and + accessible only by <> in that <>. + +[[native-backend-object]]native backend object:: + An opaque object defined by a specific backend that represents a + high-level SYCL object on said backend. There is no guarantee of having + native backend objects for all SYCL types. + +[[native-specialization-constant]]native-specialization constant:: + A <> in a device image whose value can be used by + an online compiler as an immediate value during the compilation. + + +[[nd-item]]nd-item:: + A unique identifier representing a single <> and + <> within the index space of a SYCL kernel execution. Can + be one, two or three dimensional. In the SYCL interface a <> + is represented by the [code]#nd_item# class (see + <>). + +[[nd-range]]nd-range:: + A representation of the index space of a SYCL kernel execution, the + distribution of <> within into <>. + Contains a <> specifying the number of global + <>, a <> specifying the number of local + <> and a <> specifying the global offset. Can be + one, two or three dimensional. The minimum size of each <> + within the <> is 1 per dimension. In the SYCL interface an + <> is represented by the [code]#nd_range# class (see + <>). + +[[mem-fence]]mem-fence:: + A memory fence provides control over re-ordering of memory load + and store operations when coupled with an atomic operation that + synchronizes two fences with each other (or when the fences are part of + a <> in which case there is implicit synchronization + as if an atomic operation has synchronized the fences). The + [code]#sycl::atomic_fence# function acts as a fence across all + work-items and devices specified by a [code]#memory_scope# + argument. + +[[object]]object:: + A state which a <> can be in, representing + <> as a non-executable object. + +[[platform]]platform:: + A collection of <> managed by a single + <>. + +[[private-memory]]private memory:: + A region of memory private to a <>. Variables defined in one + work-item's private memory are not visible to another work-item. + The [code]#sycl::private_memory# class provides + access to the work-item's private memory for the hierarchical API as it + is described at <>. + +[[queue]]queue:: + A SYCL command queue is an object that holds command groups to be + executed on a SYCL <>. SYCL provides a heterogeneous platform + integration using device queue, which is the minimum requirement for a + SYCL application to run on a SYCL <>. For the full description + please refer to <>. + +[[range]]range:: + A representation of a number of <> or <> + within the index space of a SYCL kernel execution. Can be one, two or + three dimensional. In the SYCL interface a <> is + represented by the [code]#group# class (see <>). + +[[ranged-accessor]]ranged accessor:: + A ranged accessor is a host or buffer <> that was constructed + with a non-zero offset into the data buffer or with an access range smaller + than the range of the data buffer, or both. Please refer to + <> for more info. + +[[reduction]]reduction:: + An operation that produces a single value by combining multiple values + in an unspecified order using a binary operator. If the operator is + non-associative or non-commutative, the behavior of a reduction may be + non-deterministic. + +[[rule-of-five]]rule of five:: + For a given class, if at least one of the copy constructor, move + constructor, copy assignment operator, move assignment operator or + destructor is explicitly declared, all of them should be explicitly + declared. + +[[rule-of-zero]]rule of zero:: + For a given class, if the copy constructor, move constructor, copy + assignment operator, move assignment operator and destructor would all + be inlined, public and defaulted, none of them should be explicitly + declared. + +[[smcp]]SMCP:: + The single-source multiple compiler-passes (SMCP) technique allows a + single source file to be parsed by multiple compilers for building + native programs per compilation target. For example, a standard {cpp} CPU + compiler for targeting <> will parse the <> to + create the {cpp} <> which offloads parts of the + computation to other <>. A SYCL device compiler will parse + the same source file and target only SYCL kernels. + +[[specialization-constant]]specialization constant:: + A constant variable where the value is not known until compilation of + the <>. + +[[specialization-id]]specialization id:: + An identifier which represents a reference to a + <> both in the <> for setting + the value prior to the compilation of a <> and in a + <> for retrieving the value during invocation. + +[[string-kernel-name]]string kernel name:: + The name of a <> in string form, this can be the + name of a kernel function created via interop or a string form of a + <>. + +[[sub-group]]sub-group:: + The SYCL sub-group ([code]#sycl::sub_group# class) is a + representation of a collection of related work-items within a + <> that execute concurrently, and which may make + independent forward progress with respect to other sub-groups in the + same <>. For further details for the + [code]#sycl::sub_group# class see <>. + +[[sub-group-barrier]]sub-group barrier:: + A <> for all <> in a <>. + +[[sub-group-mem-fence]]sub-group mem-fence:: + A <> for all <> in a <>. + +[[sycl-application]]SYCL application:: + A SYCL application is a {cpp} application which uses the SYCL programming + model in order to execute <> on <>. + +[[backend]]SYCL backend:: + An implementation of the SYCL programming model using an heterogeneous + programming API. A SYCL backend exposes one or multiple SYCL + <>. For example, the OpenCL backend, via the ICD loader, + can expose multiple OpenCL <>. + +[[backend-api]]SYCL backend API:: + The exposed API for writing SYCL code against a given <>. + +[[sycl-library]]SYCL {cpp} template library:: + The template library is a set of {cpp} templated classes which provide the + programming interface to the SYCL developer. + +[[sycl-file]]SYCL file:: + A SYCL {cpp} source file that contains SYCL API calls. + +[[sycl-kernel-function]]SYCL kernel function:: + A type which is callable with [code]#operator()# that takes a + <>, <>, <> or <> which can be passed to + kernel enqueue member functions of the <>. A + <> defines an entry point to a <>. The + function object can be a named <> type or lambda + function. + +[[sycl-runtime]]SYCL runtime:: + A SYCL runtime is an implementation of the SYCL API specification. The + SYCL runtime manages the different <>, + <>, <> as well as memory + handling of data between host and <> <> + to enable semantically correct execution of SYCL programs. + +[[type-kernel-name]]type kernel name:: + The name of a <> in type form, this can be either + a <> provided to a <> or the + type of a function object use as a <>. + +[[usm]]USM:: ++ +-- +Unified Shared Memory (USM) provides a pointer-based alternative to the +<> programming model. USM enables: + + * easier integration into existing code bases by representing allocations + as pointers rather than buffers, with full support for pointer + arithmetic into allocations; + * fine-grain control over ownership and accessibility of allocations, to + optimally choose between performance and programmer convenience; + * a simpler programming model, by automatically migrating some allocations + between SYCL <> and the <>. + +See <> +-- + +[[work-group]]work-group:: + The SYCL work-group ([code]#sycl::group# class) is a representation + of a collection of related <> that execute on a single + compute unit. The <> in the group execute the same + kernel-instance and <>. + For further details for the [code]#sycl::group# + class see <>. + +[[work-group-barrier]]work-group barrier:: + A <> for all <> in a <>. + +[[work-group-mem-fence]]work-group mem-fence:: + A <> for all <> in a <>. + +[[work-group-id]]work-group id:: + As in OpenCL, SYCL kernels execute in <>. The group ID + is the ID of the <> that a <> is executing + within. A group ID is an one, two or three dimensional value that starts + at 0 per dimension. + +[[work-group-range]]work-group range:: + A group range is the size of the <> for every dimension. + +[[work-item]]work-item:: + The SYCL work-item is a representation of a <> among a + collection of parallel executions of a kernel invoked on a <> + by a <>. A <> is executed by one or more processing + elements as part of a <> executing on a compute unit. A + <> is distinguished from other <> by its + <> or the combination of its <> and its + <> within a <>. + +:work-items: <> + + +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% end glossary %%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/adoc/chapters/host_backend.adoc b/adoc/chapters/host_backend.adoc new file mode 100644 index 00000000..1c514546 --- /dev/null +++ b/adoc/chapters/host_backend.adoc @@ -0,0 +1,95 @@ +// This appendix is not built into the spec!! +// +// The host backend is no longer required for SYCL conformance, but an +// implementation can still provide some sort of host backend if it wants to. +// We'd like to have a common definition of "host backend" for consistency +// between implementations that provide it, however, we are not yet in +// agreement about the details of this backend. For example, should the +// backend be a faithful emulation of a typical GPU accelerator? Or, should +// it be an optimized backend tailored to run on the host CPU? If we choose +// the later, the host backend could allow kernels to call arbitrary C++ code. +// If we choose the former, we would not allow this. There are likely other +// ramifications of this decision too. +// +// At present, the text below does not reflect an agreed upon definition, but +// it could be a good starting point for future discussions about the "host +// backend". + +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% begin host_backend %%%%%%%%%%%%%%%%%%%%%%%%%%%% + +[appendix] +[[chapter:host-backend]] += Host backend specification + +This chapter describes how SYCL is mapped on the <>. +The <> exposes the host where the SYCL application is executing +as a platform to dispatch SYCL kernels. +The <> exposes at least one <>. + + +== Mapping of the SYCL programming model on the host + +// From Glossary, reworded to match backend + +The SYCL host device implements all functionality required to execute the +SYCL kernels directly on the host, without relying on a third party API. +It has full SYCL capabilities and reports them through the SYCL information retrieval +interface. At least one SYCL host device must be exposed in the SYCL host +backend in all SYCL implementations, and it must always be available. +Any {cpp} application debugger, if available on the system, +can be used for debugging SYCL kernels executing on a SYCL host device. + +// From Architecture, Section 3.3 +When a SYCL implementation executes kernels on the host device, +it is free to use whatever parallel execution facilities available on the +host, as long as it executes within the semantics of the kernel execution model +defined by the SYCL kernel execution model. + +Kernel math library functions on the host must conform to OpenCL math precision +requirements. The SYCL host device needs to be queried for the capabilities it +provides. This ensures consistency when executing any SYCL general application. + +The <> must report as supporting images and therefore support +the minimum image formats. + +The range of image formats supported by the host device is implementation-defined, +but must match the minimum requirements of the OpenCL specification. + +SYCL implementors can provide extensions on the host-device to match any other +backend-specific extension. This allows developers to rely on the host device +to execute their programs when said backend is not available. + + +=== SYCL memory model on the host + +All SYCL device memories are available on devices from the host backend. + +[[table.host.memory]] +.Mapping of SYCL memory regions into host memory regions +[width="40%",options="header",cols="50%,50%"] +|==== +| SYCL | Host +| Global | System memory +| Constant | System memory +| Local | System memory +| Private | Stack +|==== + + +== Interoperability with the host application + +The host backend must ensure all functionality of the SYCL generic programming +model is always available to developers. +However, since there is no heterogeneous API behind the host backend (it +directly targets the host platform), there are no native types for SYCL +objects to map to in the SYCL application. + +Inside SYCL kernels, the host backend must ensure interoperability with +existing host code, so that existing host libraries can be used inside +SYCL kernels executing on the host. +In particular, when retrieving a raw pointer from a multi pointer object, +the pointer returned must be usable by any library accessible by the +SYCL application. + + +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% end host_backend %%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/adoc/chapters/information_descriptors.adoc b/adoc/chapters/information_descriptors.adoc new file mode 100644 index 00000000..8da6dff5 --- /dev/null +++ b/adoc/chapters/information_descriptors.adoc @@ -0,0 +1,80 @@ +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% begin descriptors %%%%%%%%%%%%%%%%%%%%%%%%%%%% + +[appendix] +[[sec:information-descriptors]] += Information descriptors + +The purpose of this chapter is to include all the headers of the +memory object descriptors, which are described in detail in +<>, for platform, +context, device, and queue. + + +[[appendix.platform.descriptors]] +== Platform information descriptors + +The following interface includes all the information descriptors for the +[code]#platform# class as described in <>. +[source,,linenums] +---- +include::{header_dir}/platformInfo.h[lines=4..-1] +---- + + +[[appendix.context.descriptors]] +== Context information descriptors + +The following interface includes all the information descriptors for the +[code]#context# class as described in <>. +[source,,linenums] +---- +include::{header_dir}/contextInfo.h[lines=4..-1] +---- + + +[[appendix.device.descriptors]] +== Device information descriptors + +The following interface includes all the information descriptors for the +[code]#device# class as described in <>. +[source,,linenums] +---- +include::{header_dir}/deviceInfo.h[lines=4..-1] +---- + + +[[appendix.queue.descriptors]] +== Queue information descriptors + +The following interface includes all the information descriptors for the +[code]#queue# class as described in <>. +[source,,linenums] +---- +include::{header_dir}/queueInfo.h[lines=4..-1] +---- + + +[[appendix.kernel.descriptors]] +== Kernel information descriptors + +The following interface includes all the information descriptors +that apply to kernels as described in <>. +[source,,linenums] +---- +include::{header_dir}/kernelInfo.h[lines=4..-1] +---- + + +[[appendix.event.descriptors]] +== Event information descriptors + +The following interface includes all the information descriptors +for the [code]#event# class as described in <> +and <>. +[source,,linenums] +---- +include::{header_dir}/eventInfo.h[lines=4..-1] +---- + + +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% end descriptors %%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/adoc/chapters/introduction.adoc b/adoc/chapters/introduction.adoc new file mode 100644 index 00000000..35a36d41 --- /dev/null +++ b/adoc/chapters/introduction.adoc @@ -0,0 +1,147 @@ +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% begin introduction %%%%%%%%%%%%%%%%%%%%%%%%%%%% + +[[introduction]] += Introduction + +SYCL (pronounced "`sickle`") is a royalty-free, cross-platform +abstraction {cpp} programming model for heterogeneous computing. SYCL +builds on the underlying concepts, portability and efficiency of +parallel API or standards like OpenCL while adding much of the ease of +use and flexibility of single-source {cpp}. + +Developers using SYCL are able to write standard modern {cpp} code, with +many of the techniques they are accustomed to, such as inheritance and +templates. At the same time, developers have access to the full range +of capabilities of the underlying implementation (such as OpenCL) both +through the features of the SYCL libraries and, where necessary, +through interoperation with code written directly using the underneath +implementation, via their APIs. + +To reduce programming effort and increase the flexibility with which +developers can write code, SYCL extends the concepts found in +standards like OpenCL model in a few ways beyond the general use of {cpp} +features: + + * execution of parallel kernels on a heterogeneous device is made + simultaneously convenient and flexible. Common parallel patterns are + prioritized with simple syntax, which through a series {cpp} types allow + the programmer to express additional requirements, such as synchronization, + if needed; + * when using buffers and accessors, data access in SYCL is separated from + data storage. By relying on the {cpp}-style resource acquisition is + initialization (RAII) idiom to capture data dependencies between device + code blocks, the runtime library can track data movement and provide + correct behavior without the complexity of manually managing event + dependencies between kernel instances and without the programmer having to + explicitly move data. This approach enables the data-parallel task-graphs + that might be already part of the execution model to be built up easily + and safely by SYCL programmers; + * Unified Shared Memory (<>) provides a mechanism for explicit data + allocation and movement. This approach enables the use of pointer-based + algorithms and data structures on heterogeneous devices, and allows for + increased re-use of code across host and device; + * the hierarchical parallelism syntax offers a way of expressing + data parallelism similar to the OpenCL device or OpenMP target + device execution model in an easy-to-understand modern {cpp} form. It + more cleanly layers parallel loops and synchronization points to + avoid fragmentation of code and to more efficiently map to CPU-style + architectures. + +SYCL retains the execution model, runtime feature set and device +capabilities inspired by the OpenCL standard. This standard imposes +some limitations on the full range of {cpp} features that SYCL is able +to support. This ensures portability of device code across as wide a +range of devices as possible. As a result, while the code can be +written in standard {cpp} syntax with interoperability with standard {cpp} +programs, the entire set of {cpp} features is not available in SYCL +device code. In particular, SYCL device code, as defined by this +specification, does not support virtual function calls, function +pointers in general, exceptions, runtime type information or the full +set of {cpp} libraries that may depend on these features or on features +of a particular host compiler. Nevertheless, these basic restrictions +can be relieved by some specific Khronos or vendor extensions. + +SYCL implements an <> design which offers the power of source +integration while allowing toolchains to remain flexible. The <> +design supports embedding of code intended to be compiled for a device, +for example a GPU, inline with host code. This embedding of code offers three +primary benefits: + +Simplicity:: + For novice programmers using frameworks like OpenCL, the separation of + host and device source code in OpenCL can become complicated to deal + with, particularly when similar kernel code is used for multiple + different operations on different data types. A single compiler flow and + integrated tool chain combined with libraries that perform a lot of + simple tasks simplifies initial OpenCL programs to a minimum complexity. + This reduces the learning curve for programmers new to heterogeneous programming and allows + them to concentrate on parallelization techniques rather than syntax. +Reuse:: + {cpp}'s type system allows for complex interactions between different code + units and supports efficient abstract interface design and reuse of + library code. For example, a [keyword]#transform# or [keyword]#map# + operation applied to an array of data may allow specialization on both + the operation applied to each element of the array and on the type of + the data. The <> design of SYCL enables this interaction to + bridge the host code/device code boundary such that the device code to + be specialized on both of these factors directly from the host code. +Efficiency:: + Tight integration with the type system and reuse of library code enables + a compiler to perform inlining of code and to produce efficient + specialized device code based on decisions made in the host code without + having to generate kernel source strings dynamically. + +The use of {cpp} features such as generic programming, templated code, +functional programming and inheritance on top of existing +heterogeneous execution model opens a wide scope for innovation in +software design for heterogeneous systems. Clean integration of device +and host code within a single {cpp} type system enables the development +of modern, templated generic and adaptable libraries that build +simple, yet efficient, interfaces to offer more developers access to +heterogeneous computing capabilities and devices. SYCL is intended to +serve as a foundation for innovation in programming models for +heterogeneous systems, that builds on open and widely implemented +standard foundation like OpenCL or Vulkan. + +SYCL is designed to be as close to standard {cpp} as possible. In +practice, this means that as long as no dependence is created on +SYCL's integration with the underlying implementation, a +standard {cpp} compiler can compile SYCL programs and they will run +correctly on a host CPU. Any use of specialized low-level features can +be masked using the C preprocessor in the same way that +compiler-specific intrinsics may be hidden to ensure portability +between different host compilers. + +SYCL is designed to allow a compilation flow where the source file is passed +through multiple different compilers, including a standard {cpp} host compiler of +the developer's choice, and where the resulting application combines the results +of these compilation passes. This is distinct from a single-source flow that +might use language extensions that preclude the use of a standard host compiler. +The SYCL standard does not preclude the use of a single compiler flow, but is +designed to not require it. SYCL can also be implemented purely as a library, +in which case no special compiler support is required at all. + +The advantages of this design are two-fold. First, it offers better integration +with existing tool chains. An application that already builds using a chosen +compiler can continue to do so when SYCL code is added. Using the SYCL tools on +a source file within a project will both compile for a device and let +the same source file be compiled using the same host compiler that the rest of +the project is compiled with. Linking and library relationships are unaffected. +This design simplifies porting of pre-existing applications to SYCL. Second, the +design allows the optimal compiler to be chosen for each device where different +vendors may provide optimized tool-chains. + +To summarize, SYCL enables computational kernels to be written inside +{cpp} source files as normal {cpp} code, leading to the concept of +"`single-source`" programming. This means that software developers can +develop and use generic algorithms and data structures using standard +{cpp} template techniques, while still supporting multi-platform, +multi-device heterogeneous execution. Access to the low level APIs of +an underlying implementation (such as OpenCL) is also supported. +The specification has been designed to enable implementation +across as wide a variety of platforms as possible as well as ease of +integration with other platform-specific technologies, thereby letting +both users and implementers build on top of SYCL as an open platform +for system-wide heterogeneous processing innovation. + +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% end introduction %%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/adoc/chapters/opencl_backend.adoc b/adoc/chapters/opencl_backend.adoc new file mode 100644 index 00000000..1c96ad7f --- /dev/null +++ b/adoc/chapters/opencl_backend.adoc @@ -0,0 +1,1180 @@ +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% begin opencl_backend %%%%%%%%%%%%%%%%%%%%%%%%%%%% + +[appendix] +[[chapter:opencl-backend]] += OpenCL backend specification + +This chapter describes how the SYCL general programming model is mapped on top +of OpenCL, and how the SYCL generic interoperability interface must be +implemented by vendors providing SYCL for OpenCL implementations to ensure SYCL +applications written for the OpenCL backend are interoperable. + + +[[sec:opencl:native-interop-application]] +== SYCL application interoperability native backend objects + +For each <> class which supports <> interoperability, +specializations of [code]#backend_traits::input_type# +and [code]#backend_traits::return_type# must be defined as the +type of <> interoperability <> +associated with [code]#SyclType# for the <>. + +The types of the native backend objects for <> +interoperability are described in <>. + +[[sec:opencl:native-interop-kernel]] +== Kernel function interoperability native backend objects + +For each <> class which supports kernel function interoperability, +a specialization of [code]#backend_traits::return_type# must be defined as the type of kernel +function interoperability <> associated with [code]#SyclType# +for the <>. + +The types of the native backend objects for kernel function interoperability are +described in <>. + +[[table.opencl.kernelfunctioninterop.nativeobjects]] +.Types of native backend objects kernel function interoperability +[width="100%",options="header",cols="60%,40%"] +|==== +| [code]#SyclType# | [code]#backend_return_t# +| [code]#accessor# | [code]#__global T*# +| [code]#accessor# | [code]#__constant T*# +| [code]#accessor# | [code]#__local T*# +| [code]#local_accessor# | [code]#__local T*# +| [code]#sampled_image_accessor# | [code]#sampler_1dimage_pair_t# +| [code]#sampled_image_accessor# | [code]#sampler_2dimage_pair_t# +| [code]#sampled_image_accessor# | [code]#sampler_3dimage_pair_t# +| [code]#unsampled_image_accessor# | [code]#image1d_t# +| [code]#unsampled_image_accessor# | [code]#image2d_t# +| [code]#unsampled_image_accessor# | [code]#image3d_t# +| [code]#stream# | [code]#__global cl_char*# +| [code]#device_event# | [code]#event_t# +|==== + +The [code]#sampler_1dimage_pair_t#, [code]#sampler_1dimage_pair_t# and +[code]#sampler_1dimage_pair_t# types must be implemented as described below. + +[source,,linenums] +---- +include::{header_dir}/openclBackend/samplerImagePair.h[lines=4..-1] +---- + +[[sec:opencl:native-interop-destruction]] +== Destruction of interop constructed objects with reference semantics + +On destruction of the last copy of an instance of a SYCL class which is +specified to have reference semantics as described in +<> that was constructed using one of the <> +interoperability [code]#make_*# functions specified in +<> additional lifetime related operations may +be performed which are required for the underlying <>. + +The additional behavior performed by the OpenCL <> for each SYCL class +is described in <>. + +[[table.opencl.interop.destructors]] +.Destructor behavior of interop constructed objects with reference semantics +[width="100%",options="header",cols="30%,70%"] +|==== +| SYCL object | Destructor behavior +| accessor | No additional behavior is performed. +| buffer | [code]#clReleaseMemObject# will be called on the native [code]#cl_mem# object provided during construction. +| context | [code]#clReleaseContext# will be called on the native [code]#cl_context# object provided during construction. +| device | [code]#clReleaseDevice# will be called on the native [code]#cl_device# object provided during construction. +| event | [code]#clReleaseEvent# will be called on the native [code]#cl_event# object provided during construction. +| kernel | [code]#clReleaseKernel# will be called on the native [code]#cl_kernel# objects provided during construction. +| kernel_bundle | [code]#clReleaseProgram# will be called on the native [code]#cl_program# objects provided during construction. +| platform | No additional behavior is performed. +| queue | [code]#clReleaseCommandQueue# will be called on the native [code]#cl_command_queue# object provided during construction. +| sampled_image | [code]#clReleaseMemObject# will be called on the native [code]#cl_mem# object provided during construction. +| unsampled_image | [code]#clReleaseMemObject# will be called on the native [code]#cl_mem# object provided during construction. +|==== + +// From 3.8 SYCL for OpenCL Framework +== SYCL for OpenCL framework + +The SYCL framework allows applications to +use a host and one or more OpenCL devices as a single heterogeneous parallel +computer system. The framework contains the following components: + + * <>: The template library provides a set of {cpp} templates + and classes which provide the programming model to the user. It enables + the creation of runtime classes such as SYCL queues, buffers and images, + as well as access to some underlying OpenCL runtime object, such as + contexts, platforms, devices and program objects. + * <>: The <> interfaces with the + underlying OpenCL implementations and handles scheduling of commands in + queues, moving of data between host and devices, manages contexts, + programs, kernel compilation and memory management. + * [keyword]#OpenCL Implementation(s)#: The SYCL system assumes the + existence of one or more OpenCL implementations available on the host + machine. + * SYCL <>: The SYCL <> compile + SYCL {cpp} kernels into a format which can be executed on an OpenCL device + at runtime. There may be more than one SYCL device compiler in a SYCL + implementation. The format of the compiled SYCL kernels is not defined. + A SYCL device compiler may, or may not, also compile the host parts of + the program. + +The OpenCL backend is enabled using the [code]#sycl::backend::opencl# +value of [code]#enum class backend#. That means that when the OpenCL +backend is active, the value of +[code]#sycl::is_backend_active::value# will be +[code]#true#. + + +== Mapping of SYCL programming model on top of OpenCL + +The SYCL programming model was originally designed as a high-level model +for the OpenCL API, hence the mapping of SYCL on the OpenCL API is +mostly straightforward. + +When the OpenCL backend is active on a SYCL application, all visible +OpenCL platforms are exported as SYCL platforms. + +// From Architecture, Section 3.3 +When a SYCL implementation executes kernels on an OpenCL +device, it achieves this by enqueuing OpenCL *commands* to +execute computations on the processing elements within a device. The +processing elements within an OpenCL compute unit may execute a single +stream of instructions as ALUs within a SIMD unit (which execute in +lockstep with a single stream of instructions), as independent SPMD +units (where each PE maintains its own program counter) or as some +combination of the two. + + +// From Architecture, Section 3.3.1 (Platform mixed version support) +=== Platform mixed version support + +The SYCL system presents the user with a set of devices, grouped into some +number of platforms. +The device version is an indication of the device's +capabilities, as represented by the device information returned by the +[code]#sycl::device::get_info()# member function. Examples of attributes +associated with the device version are resource limits and information +about functionality beyond the requirements in the <>. +The version returned corresponds to the highest version of the OpenCL +specification for which the device is conformant, but is not higher than +the version of the device's platform which bounds the overall capabilities +of the runtime operating the device. + + +=== OpenCL memory model + +The memory model for SYCL devices running on OpenCL platforms follows the +memory model of the OpenCL version they conform to. + +In addition to <> , <> and <> memory, +the OpenCL backend permits the use of <> space in SYCL: + + * <> is a region of memory that remains constant + during the execution of a kernel. A pointer to the generic address space cannot + represent an address to this memory region. + +Work-items executing in a kernel have access to four distinct memory regions, +with the mapping between SYCL and OpenCL described in <>. + +[[table.opencl.memory]] +.Mapping of SYCL memory regions into OpenCL memory regions +[width="40%",options="header",cols="50%,50%"] +|==== +| SYCL | OpenCL +| Global | Global memory +| Constant | Constant memory +| Local | Local memory +| Private | Private memory +|==== + +=== OpenCL interface for buffer command accessors + +The enumerator [code]#target::constant_buffer# is deprecated, but will remain a +part of the OpenCL backend as an extension. This enables SYCL kernel functions +to access the contents of a buffer through the OpenCL device’s constant memory. + +// From 3.4.1.1 OpenCL resources managed by SYCL Application +=== OpenCL resources managed by SYCL application + +In OpenCL, a developer must create a <> to be able to execute +commands on a device. Creating a context involves choosing a <> +and a list of <>. In SYCL, contexts, platforms and devices all +exist, but the user can choose whether to specify them or have the SYCL +implementation create them automatically. The minimum required object for +submitting work to devices in SYCL is the <>, which contains +references to a platform, device and context internally. + +The resources managed by SYCL are: + + . <>: all features of OpenCL are implemented by platforms. A + platform can be viewed as a given hardware vendor's runtime and the + devices accessible through it. Some devices will only be accessible to + one vendor's runtime and hence multiple platforms may be present. SYCL + manages the different platforms for the user. In SYCL, a platform + resource is accessible through a [code]#sycl::platform# object. + . <>: any OpenCL resource that is acquired by the user is + attached to a context. A context contains a collection of devices that + the host can use and manages memory objects that can be shared between + the devices. Data movement between devices within a context may be + efficient and hidden by the underlying OpenCL runtime while data + movement between contexts may involve the host. A given context can only + wrap devices owned by a single platform. In SYCL, a context resource is + accessible through a [code]#sycl::context# object. + . <>: platforms provide one or more devices for executing + kernels. In SYCL, a device is accessible through a + [code]#sycl::device# object. + . <>: OpenCL objects that store implementation + data for the SYCL kernels. These objects are only required for advanced use + in SYCL and are encapsulated in the [code]#sycl::kernel_bundle# class. + . <>: SYCL kernels execute in command queues. The user must + create a queue, which references an associated context, platform and + device. The context, platform and device may be chosen automatically, or + specified by the user. In SYCL, command queues are accessible through + [code]#sycl::queue# objects. + +// Removed from OpenCL Spec document +// In OpenCL, queues can operate using in-order execution or out-of-order +// execution. In SYCL, the implementation must provide out-of-order +// execution ordering when possible, regardless of whether the underlying +// OpenCL queue is in-order or out-of-order. + + +[[sec:opencl:interfacing-with-opencl]] +== Interoperability with the OpenCL API + +// Original sections from 1.2.1 +// From Architecture, 3.1; +// +// To ensure maximum backward-compatibility, a software developer can produce +// a program that mixes standard OpenCL C kernels and OpenCL API code with +// SYCL code and expect fully compatible interoperability. + +The OpenCL backend for SYCL ensures maximum compatibility between SYCL +and OpenCL kernels and API. This includes supporting devices with +different capabilities and support for different versions of the +OpenCL C language, in addition to supporting SYCL kernels written in {cpp}. + +// Original from 3.6.11, Interfacing with OpenCL +// https://cvs.khronos.org/bugzilla/show_bug.cgi?id=10426 + +<> classes which encapsulate an OpenCL opaque type such as +SYCL [code]#context# or SYCL [code]#queue# must provide an +interoperability constructor taking an instance of the OpenCL opaque type. +These constructors must retain that instance to increase the reference count +of the OpenCL resource. + +The destructor for the <> classes which encapsulate an +OpenCL opaque type must release that instance to decrease the reference +count of the OpenCL resource. + +Note that an instance of a <> class which encapsulates an +OpenCL opaque type can encapsulate any number of instances of the OpenCL +type, unless it was constructed via the interoperability constructor, in +which case it can encapsulate only a single instance of the OpenCL type. + +The lifetime of a <> class that encapsulates an OpenCL +opaque type and the instance of that opaque type retrieved via the +[code]#get_native()# free function are not tied in either direction given +correct usage of OpenCL reference counting. For example if a user were to +retrieve a [code]#cl_command_queue# instance from a SYCL +[code]#queue# instance and then immediately destroy the SYCL +[code]#queue# instance, the [code]#cl_command_queue# instance is +still valid. Or if a user were to construct a SYCL [code]#queue# +instance from a [code]#cl_command_queue# instance and then immediately +release the [code]#cl_command_queue# instance, the SYCL +[code]#queue# instance is still valid. + +Note that a <> class that encapsulates an OpenCL opaque type +is not responsible for any incorrect use of OpenCL reference counting +outside of the <>. For example if a user were to retrieve a +[code]#cl_command_queue# instance from a SYCL [code]#queue# +instance and then release the [code]#cl_command_queue# instance more +than once without any prior retain then the SYCL [code]#queue# instance +that the [code]#cl_command_queue# instance was retrieved from is now +undefined. + +Note that an instance of the SYCL [code]#buffer# or SYCL +[code]#image# class templates constructed via the interoperability +constructor is free to copy from the [code]#cl_mem# into another memory +allocation within the <> to achieve normal SYCL semantics, +for as long as the SYCL [code]#buffer# or SYCL [code]#image# +instance is alive. + +<> relates SYCL objects +to their OpenCL native type in the SYCL application. + +[[table.opencl.interop]] +.List of native types per SYCL object in the OpenCL backend +[width="100%",options="header",separator="@",cols="15%,15%,15%,55%"] +|==== +@ [code]#SyclType# + @ [code]#backend_input_t# + @ [code]#backend_return_t# + @ Description +a@ +[source] +---- +device +---- + a@ [code]#cl_device_id# + a@ [code]#cl_device_id# + a@ A SYCL device object encapsulates an OpenCL device object. +a@ +[source] +---- +context +---- + a@ [code]#cl_context# + a@ [code]#cl_context# + a@ A SYCL context object encapsulates an OpenCL context object. +a@ +[source] +---- +kernel +---- + a@ [code]#cl_kernel# + a@ [code]#cl_kernel# + a@ A SYCL kernel object encapsulates an OpenCL kernel object. +a@ +[source] +---- +template +kernel_bundle +---- + a@ [code]#cl_program# + a@ [code]#std::vector# + a@ A SYCL kernel bundle can encapsulate one or more OpenCL program objects. + It can also encapsulate one or more OpenCL kernel objects + which can be retrieved using the appropriate [code]#kernel# object. +a@ +[source] +---- +event +---- + a@ [code]#std::vector# + a@ [code]#std::vector# + a@ // Original from 3.6.5.1 Synchronization in the SYCL application + +A SYCL event can encapsulate one or multiple OpenCL events, +representing a number of dependencies in the same or different contexts, +that must be satisfied for the SYCL event to be complete. +a@ +[source] +---- +buffer +---- + a@ [code]#cl_mem# + a@ [code]#std::vector# + a@ SYCL buffers containing OpenCL memory objects + can handle multiple [code]#cl_mem# objects in the same or different context. + The interoperability interface will return a list of active buffers in the SYCL runtime. +a@ +[source] +---- +sampled_image +---- + a@ [code]#cl_mem# + a@ [code]#std::vector# + a@ SYCL sampled images containing OpenCL image objects + can handle multiple underlying [code]#cl_mem# objects + at the same time in the same or different OpenCL contexts. + The interoperability interface will return a list of active images in the SYCL runtime. +a@ +[source] +---- +unsampled_image +---- + a@ [code]#cl_mem# + a@ [code]#std::vector# + a@ SYCL unsampled images containing OpenCL image objects + can handle multiple underlying [code]#cl_mem# objects + at the same time in the same or different OpenCL contexts. + The interoperability interface will return a list of active images in the SYCL runtime. +|==== + +Inside the SYCL kernel, the SYCL API offers interoperability with OpenCL device types. +<> describes the mapping of kernel types. + +[[table.opencl.kerneltypes]] +.List of native types per SYCL object on kernel code +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ SYCL kernel native types in OpenCL @ Description +a@ +[source] +---- +multi_ptr::get_decorated() +---- + a@ Returns a pointer in the OpenCL address space + corresponding to the type of multi pointer object +|==== + +// \section{SYCL Programming interface} +// From 3.6 SYCL programming model (eliminated) +// SYCL programs are explicitly parallel and expose the full heterogeneous +// parallelism of the underlying machine model of OpenCL. This includes exposing +// the data-parallelism, multiple execution devices and multiple memory storage +// spaces of OpenCL. However, SYCL adds on top of OpenCL a higher level of +// abstraction allowing developers to hide much of the complexity from the source +// code, when a developer so chooses. + + +// From 3.7 memory object +When a buffer or image is allocated on more than +one OpenCL device, if these devices are on separate contexts then multiple +[code]#cl_mem# objects may be allocated for the memory object, depending on +whether the object has actively been used on these devices yet or not. + + +// From 3.10 Language restrictions in kernels + +Some types in SYCL vary according to pointer size or vary on the host +according to the host ABI, such as [code]#size_t# or [code]#long#. In order +for the SYCL device compiler to ensure that the sizes of +these types match the sizes on the host and to enable data of these types +to be shared between host and device, the OpenCL interoperability types +are defined, [code]#sycl::cl_int# and [code]#sycl::cl_size_t#. + +The OpenCL C function qualifier [code]#+__kernel+# and the access +qualifiers: [code]#+__read_only+#, [code]#+__write_only+# and [code]#+__read_write+# +are not exposed in SYCL via keywords, but are instead encapsulated in +SYCL's parameter passing system inside accessors. Users wishing to +achieve the OpenCL equivalent of these qualifiers in SYCL should +instead use SYCL accessors with equivalent semantics. + +// From 3.10.1 SYCL Linker +Any OpenCL C function included in a pre-built OpenCL library can be +defined as an [code]#extern "C"# function and the OpenCL program +has to be linked against any SYCL program that contains kernels using +the external function. In this case, the data types used have to comply with +the interoperability aliases defined in <>. + + +== Programming interface + +The following section describes the OpenCL-specific API. +All free functions are available in the [code]#sycl::opencl# namespace. + +=== Construct SYCL objects from OpenCL ones + +[width="100%",options="header",separator="@",cols="40%,60%"] +|==== +@ OpenCL interoperability function @ Description +a@ +[source] +---- +context make_context( + const cl_context &clContext, + const async_handler &asyncHandler = {}) +---- + a@ Constructs a SYCL [code]#context# instance from an OpenCL [code]#cl_context# in accordance with the requirements described in <>. +a@ +[source] +---- +sycl::event make_event(const cl_event &clEvent, + const sycl::context &syclContext) +---- + a@ Constructs a SYCL [code]#event# instance from an OpenCL [code]#cl_event# in accordance with the requirements described in <>. +a@ +[source] +---- +sycl::device make_device( + const cl_device_id &clDeviceId) +---- + a@ Constructs a SYCL [code]#device# instance from an OpenCL [code]#cl_device_id# in accordance with the requirements described in <>. +a@ +[source] +---- +sycl::platform make_platform( + const cl_platform_id &clPlatformId) +---- + a@ Constructs a SYCL [code]#platform# instance from an OpenCL [code]#cl_platform_id# in accordance with the requirements described in <>. +a@ +[source] +---- +sycl::queue make_queue( + const cl_command_queue &clQueue, + const sycl::context &syclContext, + const sycl::async_handler &asyncHandler = {}) +---- + a@ Constructs a SYCL [code]#queue# instance with an optional + [code]#async_handler# from an OpenCL [code]#cl_command_queue# + in accordance with the requirements described + in <>. +a@ +[source] +---- +template >> +sycl::buffer make_buffer( + const cl_mem &clMemObject, + const sycl::context &syclContext, + sycl::event availableEvent) +---- + a@ Available only when: [code]#dimensions == 1#. + +Constructs a SYCL [code]#buffer# instance from an OpenCL [code]#cl_mem# in accordance with the requirements described in <>. +The instance of the SYCL [code]#buffer# class template being constructed must wait for the SYCL [code]#event# parameter, [code]#availableEvent# to signal that the [code]#cl_mem# instance is ready to be used. +The SYCL [code]#context# parameter [code]#syclContext# is the context associated with the memory object. + +a@ +[source] +---- +template >> +sycl::buffer make_buffer( + const cl_mem &clMemObject, + const sycl::context &syclContext) +---- + a@ Available only when: [code]#dimensions == 1#. + +Constructs a SYCL [code]#buffer# instance from an OpenCL [code]#cl_mem# in accordance with the requirements described in <>. + +a@ +[source] +---- +template +sycl::sampled_image make_sampled_image( + const cl_mem &clMemObject, + const context &syclContext, + event availableEvent) +---- + a@ Constructs a SYCL [code]#sampled_image# instance from an OpenCL [code]#cl_mem# in accordance with the requirements described in <>. + The instance of the SYCL [code]#image# class template being constructed must wait for the SYCL [code]#event# parameter, [code]#availableEvent# to signal that the [code]#cl_mem# instance is ready to be used. + The SYCL [code]#context# parameter [code]#syclContext# is the context associated with the memory object. + +a@ +[source] +---- +template +sycl::sampled_image make_sampled_image( + const cl_mem &clMemObject, + const context &syclContext) +---- + a@ Constructs a SYCL [code]#sampled_image# instance from an OpenCL [code]#cl_mem# in accordance with the requirements described in <>. + The SYCL [code]#context# parameter [code]#syclContext# is the context associated with the memory object. + +a@ +[source] +---- +template +sycl::unsampled_image make_unsampled_image( + const cl_mem &clMemObject, + const sycl::context &syclContext, + sycl::image_sampler syclImageSampler, + event availableEvent) +---- + a@ Constructs a SYCL [code]#unsampled_image# instance from an OpenCL [code]#cl_mem# in accordance with the requirements described in <>. + The instance of the SYCL [code]#image# class template being constructed must wait for the SYCL [code]#event# parameter, [code]#availableEvent# to signal that the [code]#cl_mem# instance is ready to be used. + The SYCL [code]#context# parameter [code]#syclContext# is the context associated with the memory object. + +a@ +[source] +---- +template +sycl::unsampled_image make_unsampled_image( + const cl_mem &clMemObject, + const sycl::context &syclContext, + sycl::image_sampler syclImageSampler) +---- + a@ Constructs a SYCL [code]#unsampled_image# instance from an OpenCL [code]#cl_mem# in accordance with the requirements described in <>. +a@ +[source] +---- +kernel make_kernel(const cl_kernel &clKernel, + const context &syclContext); +---- + a@ Constructs a SYCL [code]#kernel# instance from an OpenCL kernel object. +a@ +[source] +---- +template +kernel_bundle make_kernel_bundle( + const cl_program &clProgram, + const context& syclContext) +---- + a@ Constructs a SYCL [code]#kernel_bundle# instance from an OpenCL + [code]#cl_program# for the devices in [code]#syclContext# + in accordance with the requirements described in <>. + The SYCL [code]#context# must represent the same underlying OpenCL + context associated with the OpenCL program object. + +The [code]#state# specifies the expected [code]#kernel_bundle# state. + The mapping between the [code]#kernel_bundle# state + and OpenCL program state ([code]#CL_PROGRAM_BINARY_TYPE#) is as follows: + + * [code]#bundle_state::input# - [code]#CL_PROGRAM_BINARY_TYPE_NONE# + * [code]#bundle_state::object# - + [code]#CL_PROGRAM_BINARY_TYPE_COMPILED_OBJECT# or + [code]#CL_PROGRAM_BINARY_TYPE_INTERMEDIATE# or + [code]#CL_PROGRAM_BINARY_TYPE_LIBRARY#. + * [code]#bundle_state::executable# - [code]#CL_PROGRAM_BINARY_TYPE_EXECUTABLE# + +If the internal state of the OpenCL program doesn't match [code]#state#, + the kernel bundle will be compiled and linked as necessary. + If the OpenCL program is already an executable binary, + but the specified [code]#state# is not [code]#bundle_state::executable#, + an [code]#exception# with the [code]#errc::invalid# error code is thrown. + If the specified [code]#state# is [code]#bundle_state::input#, + but the OpenCL program already has a binary associated with it, + an [code]#exception# with the [code]#errc::invalid# error code is thrown. + +Throws an [code]#exception# with the [code]#errc::invalid# error code + if any error is produced by the <>. +|==== + + +=== Extension query + +Platforms and devices with an OpenCL backend may support extensions. +For convenience, the extensions supported by a platform or device can be queried +through the following functions provided in the [code]#sycl::opencl# namespace. + +[width="100%",options="header",separator="@",cols="35%,65%"] +|==== +@ Extension query @ Description +a@ +[source] +---- +bool has_extension( + const sycl::platform &syclPlatform, + const std::string &extension) +---- + a@ Returns true if the OpenCL platform associated with [code]#syclPlatform# + supports the extension identified by [code]#extension#, otherwise it returns + false. If [code]#syclPlatform.get_backend() != sycl::backend::opencl# an + [code]#exception# with the [code]#errc::backend_mismatch# error code is + thrown. +a@ +[source] +---- +bool has_extension( + const sycl::device &syclDevice, + const std::string &extension) +---- + a@ Returns true if the OpenCL device associated with [code]#syclDevice# + supports the extension identified by [code]#extension#, otherwise it returns + false. If [code]#syclDevice.get_backend() != sycl::backend::opencl# an + [code]#exception# with the [code]#errc::backend_mismatch# error code is + thrown. +|==== + +=== Reference counting + +All OpenCL objects are reference counted. The SYCL general programming model +doesn't require that native objects are reference counted. However, for +convenience, the following function is provided in the +[code]#sycl::opencl# namespace. + +[width="100%",options="header",separator="@",cols="35%,65%"] +|==== +@ Reference counting @ Description +a@ +[source] +---- +template + cl_uint get_reference_count(openCLT obj) +---- + a@ Returns the reference count of the given object +|==== + + +=== Errors and limitations + +If there is an OpenCL error associated with an exception triggered, then the +OpenCL error code can be obtained by the free function [code]#cl_int sycl::opencl::get_error_code(sycl::exception&)#. In the case where there is +no OpenCL error associated with the exception triggered, the OpenCL error +code will be [code]#CL_SUCCESS#. + + +// TODO: Errors and limitations +// The only exception to +// this rule is when a buffer is constructed from a [code]#cl_mem# +// object to interoperate with OpenCL. Use of an interoperability +// buffer on a queue mapping to a context other than that in which the +// [code]#cl_mem# was created is an error. + +// Since data management and storage is handled by the <>, the +// [code]#event# class is used for providing the appropriate interface for +// OpenCL/SYCL interoperability. In the case where SYCL objects contain +// OpenCL memory objects created outside of the SYCL mechanism, then events +// can be used to provide the <> with the initial events that it has +// to synchronize against. However, the events mechanism does not provide +// full interoperability with OpenCL during SYCL code execution. +// Interoperability is achieved by using the synchronization rules with the +// [code]#buffer# and [code]#image# classes. + + +[[sec:opencl:interop-kernel-bundle]] +=== Interoperability with kernel bundles + +In <> any kernel function that is enqueued over an nd-range +is represented by a [code]#cl_kernel# and must be compiled and linked via a +[code]#cl_program# using [code]#clBuildProgram#, +[code]#clCompileProgram# and [code]#clLinkProgram#. + +For OpenCL <> this detail is abstracted away by <> and +a [code]#kernel_bundle# object containing all <> +is retrieved by calling the free function [code]#get_kernel_bundle#. + +The OpenCL <> specification provides additional free functions +which provide convenience functions for constructing kernel bundles +from OpenCL specific objects. + +[source,,linenums] +---- +include::{header_dir}/openclBackend/createBundle.h[lines=4..-1] +---- + +[source,,linenums] +---- +template +kernel_bundle create_bundle(const context &ctxt, + const std::vector &devs, + const std::vector &clPrograms) +---- + . _Preconditions:_ The <> specified by [code]#ctxt# + must be associated with the OpenCL <>. + All devices in [code]#devs# must be associated with [code]#ctxt#. + All OpenCL programs in [code]#clPrograms# must be associated with [code]#ctxt#. ++ +-- +_Effects:_ Constructs a <> in the specified [code]#bundle_state# +from the provided list of OpenCL programs and associated with the +<> specified by [code]#syclContext# by invoking the necessary OpenCL APIs. +Follows the same rules as calling [code]#make_kernel_bundle# on a single OpenCL program, +except that the rules apply to all OpenCL programs in [code]#clPrograms#. +Multiple programs will be linked together into a single one +if required by the requested [code]#State#. +The constructed [code]#kernel_bundle# will retain all provided OpenCL programs +and will also release them on destruction. + +_Throws:_ An [code]#exception# with the [code]#errc::build# error code if any error is produced +by invoking the OpenCL APIs. +-- + +[source,,linenums] +---- +kernel_bundle +create_bundle(const context &ctxt, const std::vector &devs, + const std::vector &clKernels) +---- + . _Preconditions:_ The <> specified by [code]#ctxt# + must be associated with the OpenCL <>. + All devices in [code]#devs# must be associated with [code]#ctxt#. + All OpenCL kernels in [code]#clKernels# must be associated with [code]#ctxt#. ++ +-- +_Effects:_ Constructs an executable <> +from the provided list of OpenCL kernels and associated with the +<> specified by [code]#syclContext# by invoking the necessary OpenCL APIs. +[code]#cl_kernel# objects might be associated with different [code]#cl_program# objects, +the kernel bundle will encapsulate all of them. + +_Throws:_ An [code]#exception# with the [code]#errc::build# error code if any error is produced +by invoking the OpenCL APIs. +-- + + +=== Interoperability with kernels + +A [code]#kernel_bundle# object contains one or multiple OpenCL programs +and one or multiple OpenCL kernels. +Calling [code]#kernel_bundle::get_kernel# returns a [code]#kernel# object + which can be invoked by any of +<> such as [code]#parallel_for# which take +a [code]#kernel# but not <>. + +Calling [code]#make_kernel# must trigger a call to [code]#clRetainKernel# +and the resulting [code]#kernel# object must call +[code]#clReleaseKernel# on destruction. + +It is also possible to construct a <> from previously created OpenCL +[code]#cl_kernel# objects by calling the free function [code]#create_bundle# +as described in <>. + +The kernel arguments for the OpenCL C kernel kernel can either be set prior to +creating the [code]#kernel# object or by calling [code]#set_arg# or [code]#set_args# +member functions of the [code]#handler# class. + +If kernel arguments are set prior to creating the [code]#kernel# object the +<> is not responsible for managing the data of these arguments. + + +[[sec:opencl:kernel-conventions-sycl]] +=== OpenCL kernel conventions and SYCL + +OpenCL and SYCL use opposite conventions for the unit stride dimension. SYCL +aligns with {cpp} conventions, which is important to understand from a +performance perspective when porting code to SYCL. The unit stride +dimension, at least for data, is implicit in the linearization equations in +SYCL (<>) and OpenCL. SYCL aligns with +{cpp} array subscript ordering [code]#arr[a][b][c]#, in that range +constructor dimension ordering used to launch a kernel (e.g. +[code]#range<3> R{a,b,c}#) and range and ID queries within a kernel, +are ordered in the same way as the {cpp} multi-dimensional subscript operators +(unit stride on the right). + +When specifying a [code]#range# as the global or local size +in a [code]#parallel_for# that invokes an OpenCL interop kernel (through +[code]#cl_kernel# interop), +the highest dimension of the range in SYCL will map to the +lowest dimension within the OpenCL kernel. That statement applies to both +an underlying enqueue operation such as [code]#clEnqueueNDRangeKernel# +in OpenCL, and also ID and size queries within the OpenCL kernel. +For example, a 3D global range specified in SYCL as: + +[source] +---- +range<3> R{r0,r1,r2}; +---- + +maps to an [code]#clEnqueueNDRangeKernel# [code]#global_work_size# argument +of: + +[source] +---- +size_t cl_interop_range[3] = {r2,r1,r0}; +---- + +Likewise, a 2D global range specified in SYCL as: + +[source] +---- +range<2> R{r0,r1}; +---- + +maps to an [code]#clEnqueueNDRangeKernel# [code]#global_work_size# argument +of: + +[source] +---- +size_t cl_interop_range[2] = {r1,r0}; +---- + +The mapping of highest dimension in SYCL to lowest dimension in OpenCL applies to all +operations where a multi-dimensional construct must be mapped, such as when mapping SYCL +explicit memory operations to OpenCL APIs like [code]#clEnqueueCopyBufferRect#. + +Work-item and work-group ID and range queries have the same reversed +convention for unit stride dimension between SYCL and OpenCL. For example, +with three, two, or one dimensional SYCL global ranges, OpenCL and SYCL +kernel code queries relate to the range as shown in +<>. The "SYCL kernel query" column +applies for SYCL-defined kernels, and the "OpenCL kernel query" column +applies for kernels defined through OpenCL interop. + +// Jon: Need to code-format most of these cells and use gray backgrounds on +// column-spanning sub-titles. + +[[table.syclOpenCL.mapping]] +.Example range mapping from SYCL enqueued three dimensional global [code]#range# to OpenCL and SYCL queries +[width="100%",options="header",cols="60%,20%,20%"] +|==== +| SYCL kernel query | OpenCL kernel query | Returned Value + +3+|With enqueued 3D SYCL global [code]#range# of [code]#range<3> R{r0,r1,r2}# +| nd_item::get_global_range(0) / item::get_range(0) + | get_global_size(2) + | [code]#r0# +| nd_item::get_global_range(1) / item::get_range(1) + | get_global_size(1) + | [code]#r1# +| nd_item::get_global_range(2) / item::get_range(2) + | get_global_size(0) + | [code]#r2# +| nd_item::get_global_id(0) / item::get_id(0) + | get_global_id(2) + | Value in range 0..([code]#r0-1)}# +| nd_item::get_global_id(1) / item::get_id(1) + | get_global_id(1) + | Value in range 0..([code]#r1-1)}# +| nd_item::get_global_id(2) / item::get_id(2) + | get_global_id(0) + | Value in range 0..([code]#r2-1)}# + +3+|With enqueued 2D SYCL global [code]#range# of [code]#range<2> R{r0,r1}# +| nd_item::get_global_range(0) / item::get_range(0) + | get_global_size(1) + | [code]#r0# +| nd_item::get_global_range(1) / item::get_range(1) + | get_global_size(0) + | [code]#r1# +| nd_item::get_global_id(0) / item::get_id(0) + | get_global_id(1) + | Value in range 0..([code]#r0-1)}# +| nd_item::get_global_id(1) / item::get_id(1) + | get_global_id(0) + | Value in range 0..([code]#r1-1)}# + +3+|With enqueued 1D SYCL global [code]#range# of [code]#range<1> R{r0}# +| nd_item::get_global_range(0) / item::get_range(0) + | get_global_size(0) + | [code]#r0# +| nd_item::get_global_id(0) / item::get_id(0) + | get_global_id(0) + | Value in range 0..([code]#r0-1)}# + +|==== + + +=== Data types + +The OpenCL C language standard <> defines its own built-in +scalar data types, and these have additional requirements in terms of size and +signedness on top of what is guaranteed by ISO {cpp}. For the purpose of +interoperability and portability, SYCL defines a set of aliases to {cpp} types +within the [code]#sycl::opencl# namespace using the [code]#cl_# +prefix. These aliases are described in <> + + +[[table.types.aliases]] +.Scalar data type aliases supported by SYCL OpenCL backend +[width="100%",options="header",separator="@",cols="25%,75%"] +|==== +@ Scalar data type alias @ Description +a@ +[source] +---- +cl_bool +---- + a@ Alias to a conditional data type which can be either true or false. The value + true expands to the integer constant 1 and the value false expands to the + integer constant 0. + +a@ +[source] +---- +cl_char +---- + a@ Alias to a signed 8-bit integer, as defined by the {cpp} core language. + +a@ +[source] +---- +cl_uchar +---- + a@ Alias to an unsigned 8-bit integer, as defined by the {cpp} core language. + +a@ +[source] +---- +cl_short +---- + a@ Alias to a signed 16-bit integer, as defined by the {cpp} core language. + +a@ +[source] +---- +cl_ushort +---- + a@ Alias to an unsigned 16-bit integer, as defined by the {cpp} core language. + +a@ +[source] +---- +cl_int +---- + a@ Alias to a signed 32-bit integer, as defined by the {cpp} core language. + +a@ +[source] +---- +cl_uint +---- + a@ Alias to an unsigned 32-bit integer, as defined by the {cpp} core language. + +a@ +[source] +---- +cl_long +---- + a@ Alias to a signed 64-bit integer, as defined by the {cpp} core language. + +a@ +[source] +---- +cl_ulong +---- + a@ Alias to an unsigned 64-bit integer, as defined by the {cpp} core language. + +a@ +[source] +---- +cl_float +---- + a@ Alias to a 32-bit floating-point. The float data type must conform to the IEEE + 754 single precision storage format. + +a@ +[source] +---- +cl_double +---- + a@ Alias to a 64-bit floating-point. The double data type must conform to the IEEE + 754 double precision storage format. + +a@ +[source] +---- +cl_half +---- + a@ Alias to a 16-bit floating-point. The half data type must conform to + the IEEE 754-2008 half precision storage format. Kernels using this type + are only supported on devices that have [code]#aspect::fp16#, as described + in <>. + +|==== + + + +== Preprocessor directives and macros + + * [code]#SYCL_BACKEND_OPENCL# substitutes to [code]#1# if the OpenCL <> + is active while building the SYCL application. + + +=== Offline linking with OpenCL C libraries + +SYCL supports linking <> with OpenCL C libraries +during offline compilation or during online compilation by the +<> within a SYCL application. + +Linking with OpenCL C kernel functions offline is an optional feature +and is unspecified. Linking with OpenCL C kernel functions online is +performed by using the SYCL [code]#kernel_bundle# class to compile and +link an OpenCL C source; using the [code]#compile_with_source# or +[code]#build_with_source# member functions. + +OpenCL C functions that are linked with, using either offline or online +compilation, must be declared as [code]#extern "C"# function +declarations. The function parameters of these function declarations must be +defined as the OpenCL C interoperability aliases; [code]#pointer# of +the [code]#multi_ptr# class template, [code]#vector_t# of the +[code]#vec# class template and scalar data type aliases described in +<>. + +// \include{opencl_extensions} +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% begin opencl_extensions %%%%%%%%%%%%%%%%%%%%%%%%%%%% + +== SYCL support of non-core OpenCL features + +In addition to the OpenCL core features, SYCL also provides support for OpenCL +extensions which provide features in OpenCL via khr extensions. + +Some extensions are natively supported within the SYCL interface, however some +can only be used via the OpenCL interoperability interface. The SYCL interface +required for native extensions must be available. However if the respective +extension is not supported by the executing SYCL [code]#device#, the +<> must throw an [code]#exception# with the +[code]#errc::feature_not_supported# or [code]#errc::kernel_not_supported# error +codes. + +The OpenCL backend exposes some khr extensions to SYCL applications through the +[code]#sycl::aspect# enumerated type. Therefore, applications can query +for the existence of these khr extensions by calling the [code]#device::has()# +or [code]#platform::has()# member functions. + +All OpenCL extensions are available through the OpenCL interoperability +interface, but some can also be used through core SYCL APIs. +<> shows which these are. +<> also shows the mapping from each OpenCL +extension name to its associated SYCL device [code]#aspect# when one is +available. + + +[[table.extensionsupport]] +.SYCL support for OpenCL 1.2 extensions +[width="100%",options="header",cols="43%,37%,20%"] +|==== +| SYCL Aspect | OpenCL Extension | Core SYCL API +| [code]#aspect::atomic64# | [code]#cl_khr_int64_base_atomics# | Yes +| [code]#aspect::atomic64# | [code]#cl_khr_int64_extended_atomics# | Yes +| [code]#aspect::fp16# | [code]#cl_khr_fp16# | Yes +| - | [code]#cl_khr_3d_image_writes# | Yes +| - | [code]#cl_khr_gl_sharing# | No +| - | [code]#cl_apple_gl_sharing# | No +| - | [code]#cl_khr_d3d10_sharing# | No +| - | [code]#cl_khr_d3d11_sharing# | No +| - | [code]#cl_khr_dx9_media_sharing# | No +|==== + + + +[[sec:opencl:extension-fp16]] +=== Half precision floating-point + +The half scalar data type: [code]#half# and the half vector data types: +[code]#half1#, [code]#half2#, [code]#half3#, +[code]#half4#, [code]#half8# and [code]#half16# must be +available at compile-time. However a kernel using these types is only +supported on devices that have [code]#aspect::fp16#, as described in +<>. + +The conversion rules for half precision types follow the same rules as in +the OpenCL 1.2 extensions specification <>. + +The math functions for half precision types follow the same rules as in the +OpenCL 1.2 extensions specification <>. The allowed error in ULP(Unit in the Last Place) is +less than 8192, corresponding to <>. + + +=== Writing to 3D image memory objects + +The [code]#unsampled_image_accessor# class +in SYCL supports member functions for writing +3D image memory objects, but this functionality is only allowed on a device +if the extension [code]#cl_khr_3d_image_writes# is +supported on that <>. + +// TODO: Should opencl::aspect::3d_image_writes be promoted to a core SYCL aspect? + + +=== Interoperability with OpenGL + +Interoperability between SYCL and OpenGL is not directly provided by the SYCL interface, +however can be achieved via the SYCL OpenCL interoperability interface. + + +== Correspondence of some OpenCL features to SYCL + +This section describes the correspondence between some OpenCL features and +features in the <> that provide similar functionality. All content +in this section is non-normative. + +=== Work-item functions + +The OpenCL 1.2 specification document <> +defines work-item functions that tell various information about the currently +executing work item in an OpenCL kernel. SYCL provides equivalent +functionality through the item and group classes that are defined in +<>, <> and <>. + +=== Vector data load and store functions + +The functionality from the OpenCL functions as defined in the OpenCL 1.2 +specification document <> is available in SYCL through +the [code]#vec# class in <>. + +=== Synchronization functions + +In SYCL the OpenCL [keyword]#synchronization functions# are available through +the [code]#nd_item# class (<>), as they are applied to +work-items for local or global address spaces. Please +see <>. + +=== [code]#printf# function + +The functionality of the [code]#printf# function is covered by the +[code]#stream# class (<>), which has the +capability to print to standard output all of the SYCL classes and primitives, +and covers the capabilities defined in the OpenCL 1.2 specification +document <>. + +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% end opencl_extensions %%%%%%%%%%%%%%%%%%%%%%%%%%%% + +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% end opencl_backend %%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/adoc/chapters/programming_interface.adoc b/adoc/chapters/programming_interface.adoc new file mode 100644 index 00000000..74bd5427 --- /dev/null +++ b/adoc/chapters/programming_interface.adoc @@ -0,0 +1,21591 @@ +[[chapter:sycl-programming-interface]] += SYCL programming interface + +The SYCL programming interface provides a common abstracted feature set to +one or more <> APIs. This section describes the {cpp} library +interface to the <> which executes across those <>. + +The entirety of the SYCL interface defined in this section is required to be +available for any <>, with the exception of the interoperability +interface, which is described in general terms in this document, not +pertaining to any particular <>. + +SYCL guarantees that all the member functions and special member functions of +the SYCL classes described are thread safe. + + +[[sec:backends]] +== Backends + +The <> that are available to a SYCL implementation can be identified +using the [code]#enum class backend#. + +[source,,linenums] +---- +include::{header_dir}/backends.h[lines=4..-1] +---- + +The [code]#enum class backend# is implementation-defined and must be +populated with a unique identifier for each <> that the SYCL +implementation supports. + +Each named <> enumerated in the [code]#enum class backend# +must be associated with a <> specification. +Many sections of this specification +will refer to the associated <> specification. + + +[[sec:backend-macros]] +=== Backend macros + +As the identifiers defined in [code]#enum class backend# are +implementation-defined, +a SYCL implementation must also define a preprocessor macro for each of +these identifiers. If the <> is defined by the Khronos SYCL group, the +name of the macro has the form [code]#SYCL_BACKEND_#, where +_backend_name_ is the associated identifier from [code]#backend# in +all upper-case. See <> for the name of the macro +if the vendor defines the <> outside of the Khronos SYCL group. + + +[[sec:generic-vs-non-generic]] +== Generic vs non-generic SYCL + +The SYCL programming API is split into two categories; generic SYCL and +non-generic SYCL. Almost everything in the SYCL programming API is considered +generic SYCL. However any usage of the [code]#enum class backend# is +considered non-generic SYCL and should only be used for <> specialized +code paths, as the identifiers defined in [code]#backend# are +implementation-defined. + +In any non-generic SYCL application code where the [code]#backend# enum +class is used, the expression must be guarded with a preprocessor +[code]#{hash}ifdef# guard using the associated preprocessor macro to ensure that +the SYCL application will compile even if the SYCL implementation does not +support that <> being specialized for. + + +[[sec:headers-and-namespaces]] +== Header files and namespaces + +SYCL provides one standard header file: [code]##, which needs to +be included in every translation unit that uses the SYCL programming API. + +All SYCL classes, constants, types and functions defined by this +specification should exist within the [code]#::sycl# namespace. + +For compatibility with SYCL 1.2.1, SYCL provides another standard +header file: [code]##, which can be included in +place of [code]##. In that case, all SYCL classes, constants, +types and functions defined by this specification should exist within the +[code]#::cl::sycl# {cpp} namespace. + +For consistency, the programming API will only refer to the +[code]## header and the [code]#::sycl# namespace, but this +should be considered synonymous with the SYCL 1.2.1 header and namespace. + +Include paths starting with [code]#"sycl/ext/"# and [code]#"sycl/backend/"# are +reserved for extensions to SYCL and for backend interop headers respectively. +Other include paths starting with [code]#"sycl/"# and the [code]#sycl::detail# +namespace are reserved for implementation details. + +When a <> is defined by the Khronos SYCL group, functionality +for that <> is available via the header +[code]#"sycl/backend/.hpp"#, and all <>-specific +functionality is made available in the namespace [code]#sycl::# +where [code]## is the name of the <> as defined in the +<> specification. + +<> defines the allowable header files and +namespaces for any extensions that a vendor may provide, including any +<> that the vendor may define outside of the Khronos SYCL group. + +== Class availability + +In SYCL some <> classes are available to the SYCL application, +some are available within a <> and some are available +on both and can be passed as arguments to a <>. + +Each of the following <> classes: +[code]#buffer#, +[code]#buffer_allocator#, +[code]#context#, +[code]#device#, +[code]#device_image#, +[code]#event#, +[code]#exception#, +[code]#handler#, +[code]#host_accessor#, +[code]#host_sampled_image_accessor#, +[code]#host_unsampled_image_accessor#, +[code]#id#, +[code]#image_allocator#, +[code]#kernel#, +[code]#kernel_id#, +[code]#marray#, +[code]#kernel_bundle#, +[code]#nd_range#, +[code]#platform#, +[code]#queue#, +[code]#range#, +[code]#sampled_image#, +[code]#image_sampler#, +[code]#stream#, +[code]#unsampled_image# and +[code]#vec# +must be available to the host application. + +Each of the following <> classes: +[code]#accessor#, +[code]#atomic_ref#, +[code]#device_event#, +[code]#group#, +[code]#h_item#, +[code]#id#, +[code]#item#, +[code]#local_accessor#, +[code]#marray#, +[code]#multi_ptr#, +[code]#nd_item#, +[code]#range#, +[code]#reducer#, +[code]#sampled_image_accessor#, +[code]#stream#, +[code]#sub_group#, +[code]#unsampled_image_accessor# and +[code]#vec# +must be available within a <>. + +Each of the following <> classes: +[code]#accessor#, +[code]#id#, +[code]#local_accessor#, +[code]#marray#, +[code]#range#, +[code]#reducer#, +[code]#sampled_image_accessor#, +[code]#stream#, +[code]#unsampled_image_accessor# and +[code]#vec# +are permitted as arguments to a <>. + +== Common interface + +When a dimension template parameter is used in SYCL classes, it is +defaulted as 1 in most cases. + + +[[sec:backend-interoperability]] +=== Backend interoperability + +Many of the <> classes may be implemented such that they +encapsulate an object unique to the <> that underpins the +functionality of that class. Where appropriate, these classes may provide an +interface for interoperating between the <> object and the +<> in order to support interoperability within an +application between SYCL and the associated <>. + +There are two forms of interoperability with <> classes: +interoperability on the <> with the <> +and interoperability within a <> with the equivalent +kernel language types of the <>. <> +interoperability and <> interoperability are +provided via different interfaces and may have different +<> types. + +<> interoperability may be provided for +[code]#buffer#, +[code]#context#, +[code]#device#, +[code]#device_image#, +[code]#event#, +[code]#kernel#, +[code]#kernel_bundle#, +[code]#platform#, +[code]#queue#, +[code]#sampled_image#, and +[code]#unsampled_image#. + +<> interoperability may be provided for +[code]#accessor#, +[code]#device_event#, +[code]#local_accessor#, +[code]#sampled_image_accessor#, +[code]#stream# and +[code]#unsampled_image_accessor# +inside <> only and is not available outside of that scope. + +Support for <> interoperability is optional and therefore not required +to be provided by a SYCL implementation. A SYCL application using <> +interoperability is considered to be non-generic SYCL. + +Details on the interoperability for a given <> are available on the +<> specification document for that <>. + +==== Type traits [code]#backend_traits# + +[source,,linenums] +---- +include::{header_dir}/interop/typeTraitsBackendTraits.h[lines=4..-1] +---- + +A series of type traits are provided for <> interoperability, +defined in the [code]#backend_traits# class. + +A specialization of [code]#backend_traits# must be provided for each named +<> enumerated in the enum class [code]#backend#. + + * For each <> class [code]#T# which supports + <> interoperability with the <>, a + specialization of [code]#input_type# must be defined as the type + of <> interoperability <> + associated with [code]#T# for the <>, specified in the + <> specification. + [code]#input_type# is used when constructing SYCL objects + from backend specific native objects. + See the relevant backend specification for details. + * For each <> class [code]#T# which supports + <> interoperability with the <>, a + specialization of [code]#return_type# must be defined as the type + of <> interoperability <> + associated with [code]#T# for the <>, specified in the + <> specification. + [code]#return_type# is used when retrieving + the backend specific native object from a SYCL object. + See the relevant backend specification for details. + * For each <> class [code]#T# which supports kernel + function interoperability with the <>, a specialization of + [code]#return_type# within [code]#backend_traits# must be + defined as the type of the kernel function interoperability + <> associated with [code]#T# for the + <>, specified in the backend specification. + See the relevant backend specification for details. + * A specialization of [code]#errc# must be defined as the + <> error code type. + +The type alias [code]#backend_input_t# is provided +to enable less verbose access to the [code]#input_type# type +within [code]#backend_traits# for a specific SYCL object of type [code]#T#. +The type alias [code]#backend_return_t# is provided +to enable less verbose access to the [code]#return_type# type +within [code]#backend_traits# for a specific SYCL object of type [code]#T#. + +==== Template function [code]#get_native# + +[source,,linenums] +---- +include::{header_dir}/interop/templateFunctionGetNative.h[lines=4..-1] +---- + +For each <> class [code]#T# which supports +<> interoperability, a specialization of +[code]#get_native# must be defined, which takes an instance of +[code]#T# and returns a <> interoperability +<> associated with [code]#syclObject# which +can be used for <> interoperability. The lifetime of the +object returned are backend-defined and specified in the backend +specification. + +For each <> class [code]#T# which supports kernel +function interoperability, a specialization of [code]#get_native# must +be defined, which takes an instance of [code]#T# and returns the kernel +function interoperability <> associated with +[code]#syclObject# which can be used for kernel function +interoperability. The availability and behavior of these template +functions is defined by the <> specification document. + +The [code]#get_native# function +must throw an [code]#exception# with the +[code]#errc::backend_mismatch# error code +if the backend of the SYCL object +doesn't match the target backend. + +[[sec:backend-interoperability-make]] +==== Template functions [code]#make_*# + +[source,,linenums] +---- +include::{header_dir}/interop/templateFunctionMakeX.h[lines=4..-1] +---- + +For each <> class [code]#T# which supports +<> interoperability, a specialization of the appropriate +template function [code]#make_{sycl_class}# where +[code]#{sycl_class}# is the class name of [code]#T#, must be +defined, which takes a <> interoperability +<> and constructs and returns an instance of +[code]#T#. The availability and behavior of these template +functions is defined by the <> specification document. + +Overloads of the [code]#make_{sycl_class}# function +which take a SYCL <> object as an argument +must throw an [code]#exception# with the +[code]#errc::backend_mismatch# error code +if the backend of the provided SYCL context +doesn't match the target backend. + +[[sec:reference-semantics]] +=== Common reference semantics + +Each of the following <> classes: +[code]#accessor#, +[code]#buffer#, +[code]#context#, +[code]#device#, +[code]#device_image#, +[code]#event#, +[code]#host_accessor#, +[code]#host_sampled_image_accessor#, +[code]#host_unsampled_image_accessor#, +[code]#kernel#, +[code]#kernel_id#, +[code]#kernel_bundle#, +[code]#local_accessor#, +[code]#platform#, +[code]#queue#, +[code]#sampled_image#, +[code]#sampled_image_accessor#, +[code]#unsampled_image# and +[code]#unsampled_image_accessor# +must obey the following statements, where [code]#T# is the runtime class type: + + * [code]#T# must be copy constructible and copy assignable on the + host application and within SYCL kernel functions in the case that + [code]#T# is a valid kernel argument. Any instance of + [code]#T# that is constructed as a copy of another instance, via + either the copy constructor or copy assignment operator, must behave + as-if it were the original instance and as-if any action performed on it + were also performed on the original instance and must represent the same + underlying <> as the original instance where + applicable. + * [code]#T# must be destructible on the host application and within + SYCL kernel functions in the case that [code]#T# is a valid kernel + argument. When any instance of [code]#T# is destroyed, including as + a result of the copy assignment operator, any behavior specific to + [code]#T# that is specified as performed on destruction is only + performed if this instance is the last remaining host copy, in + accordance with the above definition of a copy. + * [code]#T# must be move constructible and move assignable on the + host application and within SYCL kernel functions in the case that T is + a valid kernel argument. Any instance of T that is constructed as a move + of another instance, via either the move constructor or move assignment + operator, must replace the original instance rendering said instance + invalid and must represent the same underlying <> as + the original instance where applicable. + * [code]#T# must be equality comparable on the host application. + Equality between two instances of [code]#T# (i.e. [code]#a == b#) must be true if one instance is a copy of the other and non-equality + between two instances of [code]#T# (i.e. [code]#a != b#) must + be true if neither instance is a copy of the other, in accordance with + the above definition of a copy, unless either instance has become + invalidated by a move operation. By extension of the requirements above, + equality on [code]#T# must guarantee to be reflexive (i.e. [code]#a == a#), + symmetric (i.e. [code]#a == b# implies [code]#b == a# and [code]#a != b# + implies [code]#b != a#) and transitive (i.e. [code]#a == b && b == c# + implies [code]#c == a#). + * A specialization of [code]#std::hash# for [code]#T# must exist + on the host application that returns a unique value such that if two + instances of T are equal, in accordance with the above definition, then + their resulting hash values are also equal and subsequently if two hash + values are not equal, then their corresponding instances are also not + equal, in accordance with the above definition. + +Some <> classes will have additional behavior associated +with copy, movement, assignment or destruction semantics. If these are +specified they are in addition to those specified above unless stated +otherwise. + +Each of the runtime classes mentioned above must provide a common +interface of special member functions in order to fulfill the copy, +move, destruction requirements and hidden friend functions in order to +fulfill the equality requirements. + +A hidden friend function is a function first declared via a +[code]#friend# declaration with no additional out of class or namespace +scope declarations. Hidden friend functions are only visible to ADL +(Argument Dependent Lookup) and are hidden from qualified and unqualified +lookup. Hidden friend functions have the benefits of avoiding accidental +implicit conversions and faster compilation. + +These common special member functions and hidden friend functions are +described in <> and +<> respectively. + +[source,,linenums] +---- +include::{header_dir}/common-reference.h[lines=4..-1] +---- + +[[table.specialmembers.common.reference]] +.Common special member functions for reference semantics +[width="100%",options="header",separator="@",cols="1,2"] +|==== +@ Special member function @ Description +a@ +[source] +---- +T(const T &rhs) +---- + a@ Constructs a [code]#T# instance as a copy of the RHS SYCL + [code]#T# in accordance with the requirements set out above. + +a@ +[source] +---- +T(T &&rhs) +---- + a@ Constructs a SYCL [code]#T# instance as a move of the RHS SYCL + [code]#T# in accordance with the requirements set out above. + +a@ +[source] +---- +T &operator=(const T &rhs) +---- + a@ Assigns this SYCL [code]#T# instance with a copy of the RHS SYCL + [code]#T# in accordance with the requirements set out above. + +a@ +[source] +---- +T &operator=(T &&rhs) +---- + a@ Assigns this SYCL [code]#T# instance with a move of the RHS SYCL + [code]#T# in accordance with the requirements set out above. + +a@ +[source] +---- +~T() +---- + a@ Destroys this SYCL [code]#T# instance in accordance with the + requirements set out in <>. On destruction + of the last copy, may perform additional lifetime related operations + required for the underlying <> specified in + the <> specification document, if this SYCL [code]#T# instance + was originally constructed using one of the backend interoperability + [code]#make_*# functions specified in + <>. + See the relevant backend specification for details. + +|==== + +[[table.hiddenfriends.common.reference]] +.Common hidden friend functions for reference semantics +[width="100%",options="header",separator="@"] +|==== +@ Hidden friend function @ Description +a@ +[source] +---- +bool operator==(const T &lhs, const T &rhs) +---- + a@ Returns true if this LHS SYCL [code]#T# is equal to the RHS SYCL + [code]#T# in accordance with the requirements set out above, + otherwise returns false. + +a@ +[source] +---- +bool operator!=(const T &lhs, const T &rhs) +---- + a@ Returns true if this LHS SYCL [code]#T# is not equal to the RHS + SYCL [code]#T# in accordance with the requirements set out above, + otherwise returns false. + +|==== + + +[[sec:byval-semantics]] +=== Common by-value semantics + +Each of the following <> classes: [code]#id#, +[code]#range#, [code]#item#, [code]#nd_item#, +[code]#h_item#, [code]#group#, [code]#sub_group# and +[code]#nd_range# must follow the following statements, where +[code]#T# is the runtime class type: + + * [code]#T# must be default copy constructible and copy assignable on + the host application (in the case where T is available on the host) and + within SYCL kernel functions. + * [code]#T# must be default destructible on the host application (in + the case where T is available on the host) and within SYCL kernel + functions. + * [code]#T# must be default move constructible and default move + assignable on the host application (in the case where T is available on + the host) and within SYCL kernel functions. + * [code]#T# must be equality comparable on the host application (in + the case where T is available on the host) and within SYCL kernel + functions. Equality between two instances of [code]#T# (i.e. + [code]#a == b#) must be true if the value of all members are equal + and non-equality between two instances of [code]#T# (i.e. + [code]#a != b#) must be true if the value of any members are not + equal, unless either instance has become invalidated by a move + operation. By extension of the requirements above, equality on + [code]#T# must guarantee to be reflexive (i.e. [code]#a == a#), + symmetric (i.e. [code]#a == b# implies [code]#b == a# and [code]#a != b# + implies [code]#b != a#) and transitive (i.e. [code]#a == b && b == c# + implies [code]#c == a#). + +Some <> classes will have additional behavior associated +with copy, movement, assignment or destruction semantics. If these are +specified they are in addition to those specified above unless stated +otherwise. + +Each of the runtime classes mentioned above must provide a common +interface of special member functions and member functions in order to +fulfill the copy, move, destruction and equality requirements, +following the <> and the <>. + +These common special member functions and hidden friend functions are +described in <> and +<> respectively. + +[source,,linenums] +---- +include::{header_dir}/common-byval.h[lines=4..-1] +---- + +[[table.specialmembers.common.byval]] +.Common special member functions for by-value semantics +[width="100%",options="header",separator="@",cols="2,1"] +|==== +@ Special member function _(see <> and <>)_ @ Description +a@ +[source] +---- +T(const T &rhs); +---- + a@ Copy constructor. + +a@ +[source] +---- +T(T &&rhs); +---- + a@ Move constructor. + +a@ +[source] +---- +T &operator=(const T &rhs); +---- + a@ Copy assignment operator. + +a@ +[source] +---- +T &operator=(T &&rhs); +---- + a@ Move assignment operator. + +a@ +[source] +---- +~T(); +---- + a@ Destructor. + +|==== + +[[table.hiddenfriends.common.byval]] +.Common hidden friend functions for by-value semantics +[width="100%",options="header",separator="@",cols="1,1"] +|==== +@ Hidden friend function @ Description +a@ +[source] +---- +bool operator==(const T &lhs, const T &rhs) +---- + a@ Returns true if this LHS SYCL [code]#T# is equal to the RHS SYCL [code]#T# in accordance with the requirements set out above, otherwise returns false. + +a@ +[source] +---- +bool operator!=(const T &lhs, const T &rhs) +---- + a@ Returns true if this LHS SYCL [code]#T# is not equal to the RHS SYCL [code]#T# in accordance with the requirements set out above, otherwise returns false. + +|==== + +=== Properties + +Each of the following <> classes: +[code]#accessor#, +[code]#buffer#, +[code]#host_accessor#, +[code]#host_sampled_image_accessor#, +[code]#host_unsampled_image_accessor#, +[code]#context#, +[code]#local_accessor#, +[code]#queue#, +[code]#sampled_image#, +[code]#sampled_image_accessor#, +[code]#stream#, +[code]#unsampled_image#, +[code]#unsampled_image_accessor# and +[code]#usm_allocator# +provide an optional parameter in each of +their constructors to provide a [code]#property_list# which +contains zero or more properties. Each of those properties augments +the semantics of the class with a particular feature. Each of those +classes must also provide [code]#has_property# and +[code]#get_property# member functions for querying for a +particular property. + +The listing below illustrates the usage of various buffer properties, +described in <>. + +The example illustrates how using properties does not affect the type +of the object, thus, does not prevent the usage of SYCL objects in +containers. + +[source,,linenums] +---- +include::{code_dir}/propertyExample.cpp[lines=4..-1] +---- + +Each property is represented by a unique class and an instance of a property +is an instance of that type. Some properties can be default constructed +while others will require an argument on construction. A property may be +applicable to more than one class, however some properties may not be +compatible with each other. See the requirements for the properties of the +SYCL [code]#buffer# class, SYCL [code]#unsampled_image# class and +SYCL [code]#sampled_image# class in <> +and <> respectively. + +Properties can be passed to a <> class +via an instance of [code]#property_list#. +These properties get tied to the <> class instance +and copies of the object will contain the same properties. + +A SYCL implementation or a <> may provide additional properties +other than those defined here, provided they are defined in accordance with +the requirements described in <>. + +==== Properties interface + +Each of the runtime classes mentioned above must provide a common +interface of member functions in order to fulfill the property +interface requirements. + +A synopsis of the common properties interface, the SYCL +[code]#property_list# class and the SYCL property classes is provided +below. The member functions of the common properties interface are listed in +<>. The constructors of the SYCL +[code]#property_list# class are listed in +<>. + +[source,,linenums] +---- +include::{header_dir}/properties.h[lines=4..-1] +---- + + +[[table.traits.properties]] +.Traits for properties +[width="100%",options="header",separator="@"] +|==== +@ Traits @ Description +a@ +[source] +---- +template +struct is_property +---- + a@ An explicit specialization of [code]#is_property# that inherits + from [code]#std::true_type# must be provided for each property, + where [code]#propertyT# is the class defining the property. + This includes both standard properties described in this + specification and any additional non-standard properties defined by + an implementation. All other specializations of + [code]#is_property# must inherit from + [code]#std::false_type#. +a@ +[source,c++] +---- +template +inline constexpr bool is_property_v; +---- + a@ Variable containing value of [code]#is_property#. + +a@ +[source] +---- +template +struct is_property_of +---- + a@ An explicit specialization of [code]#is_property_of# that + inherits from [code]#std::true_type# must be provided for each + property that can be used in constructing a given SYCL class, where + [code]#propertyT# is the class defining the property and + [code]#syclObjectT# is the SYCL class. This includes both + standard properties described in this specification and any + additional non-standard properties defined by an implementation. All + other specializations of [code]#is_property_of# must inherit + from [code]#std::false_type#. +a@ +[source,c++] +---- +template +inline constexpr bool is_property_of_v; +---- + a@ Variable containing value of [code]#is_property_of#. + +|==== + + + +[[table.members.propertyinterface]] +.Common member functions of the SYCL [code]#property# interface +[width="100%",options="header",separator="@",cols="2,3"] +|==== +@ Member function @ Description +a@ +[source] +---- +template +bool has_property() const noexcept +---- + a@ Returns true if [code]#T# was constructed with the property + specified by [code]#propertyT#. Returns false if it was + not. + +a@ +[source] +---- +template +propertyT get_property() const +---- + a@ Returns a copy of the property of type [code]#propertyT# + that [code]#T# was constructed with. Must throw an + [code]#exception# with the [code]#errc::invalid# + error code if [code]#T# was not constructed with the + [code]#propertyT# property. + +|==== + + + +[[table.constructors.propertylist]] +.Constructors of the SYCL [code]#property_list# class +[width="100%",options="header",separator="@",cols="2,3"] +|==== +@ Constructor @ Description +a@ +[source] +---- +template +property_list(propertyTN... props) +---- + a@ Available only when: [code]#is_property::value# + evaluates to [code]#true# where [code]#property# is each + property in [code]#propertyTN#. + +Construct a SYCL [code]#property_list# with zero or more properties. + +|==== + + + +== SYCL runtime classes + + +[[sec:device-selection]] +=== Device selection + +Since a system can have several SYCL-compatible devices attached, it +is useful to have a way to select a specific device or a set of +devices to construct a specific object such as a +[code]#device# (see <>) or a +[code]#queue# (see <>), or +perform some operations on a device subset. + +Device selection is done either by already having a specific instance +of a [code]#device# (see <>) or by +providing a <> which is a ranking function that will give +an integer ranking value to all the devices on the system. + + +[[sec:device-selector]] +==== Device selector + +The actual interface for a <> is a callable +taking a [code]#const device# reference and returning a +value implicitly convertible to an [code]#int#. + +At any point where the <> needs to select a SYCL +[code]#device# using a <>, the system will query +all available SYCL [code]#devices# from all <> in the +system, will call the <> on each device and select the one +which returns the highest score. If the highest value is strictly +negative no device is selected. + +In places where only one device has to be picked and the high score is +obtained by more than one device, then one of the tied devices will be +returned, but which one is not defined and may depend on enumeration +order, for example, outside the control of the SYCL runtime. + +Some predefined <> are provided by the system as +described on <> in a header file with +some definition similar to the following: + + +[[table.device.selectors]] +.Standard device selectors included with all SYCL implementations +[width="100%",options="header",separator="@",cols="50%,50%"] +|==== +@ SYCL device selectors @ Description +a@ +[source] +---- +default_selector_v +---- + a@ Select a SYCL [code]#device# from any supported <> + based on an implementation-defined heuristic. Since all + implementations must support at least one device, this selector + must always return a device. + +[NOTE] +==== +Implementations may choose to return an emulated device (with +[code]#aspect::emulated#) as a fallback if there is no physical device +available on the system. +==== + +a@ +[source] +---- +gpu_selector_v +---- + a@ Select a SYCL [code]#device# from any supported <> + for which the device type is + [code]#info::device_type::gpu#. The SYCL class + constructor using it must throw an [code]#exception# + with the [code]#errc::runtime# error code if no + device matching this requirement can be found. + +a@ +[source] +---- +accelerator_selector_v +---- + a@ Select a SYCL [code]#device# from any supported <> + for which the device type is + [code]#info::device_type::accelerator#. The SYCL + class constructor using it must throw an [code]#exception# + with the [code]#errc::runtime# error code if no device + matching this requirement can be found. + +a@ +[source] +---- +cpu_selector_v +---- + a@ Select a SYCL [code]#device# from any supported <> + for which the device type is + [code]#info::device_type::cpu#. The SYCL class + constructor using it must throw an [code]#exception# + with the [code]#errc::runtime# error code + if no device matching this requirement can be found. + +a@ +[source] +---- +__unspecified_callable__ aspect_selector( + const std::vector &aspectList, + const std::vector &denyList = {}); + +template +__unspecified_callable__ aspect_selector(aspectListTN... aspectList); + +template +__unspecified_callable__ aspect_selector(); +---- +a@ The free function [code]#aspect_selector# has several overloads, +each of which returns a selector object that selects a +SYCL [code]#device# from any supported <> +which contains all the requested aspects, +i.e. for the specific device [code]#dev# +and each aspect [code]#devAspect# from [code]#aspectList# +[code]#dev.has(devAspect)# equals [code]#true#. +If no aspects are passed in, +the generated selector behaves like [code]#default_selector#. + +Required aspects can be passed in as a vector, as function arguments, +or as template parameters, depending on the function overload. +The function overload that takes [code]#aspectList# as a vector +takes another vector argument [code]#denyList# +where the user can specify all the aspects that have to be avoided, +i.e. for the specific device [code]#dev# +and each aspect [code]#devAspect# from [code]#denyList# +[code]#dev.has(devAspect)# equals [code]#false#. + +The SYCL class constructor using the generated selector +must throw an [code]#exception# with the [code]#errc::runtime# error code +if no device matching this requirement can be found. +There are multiple overloads of this function, +please refer to <> for full definitions +and to <> for examples. + +|==== + + +// Interface of the device selector +[[header:device-selector]] +[source,,linenums] +---- +include::{header_dir}/deviceSelector.h[lines=4..-1] +---- + +Typical examples of default and user-provided <> could be: + +[source,,linenums] +---- +sycl::device my_gpu { sycl::gpu_selector_v }; + +sycl::queue my_accelerator { sycl::accelerator_selector_v }; + +int prefer_my_vendor(const sycl::device & d) { + // Return 1 if the vendor name is "MyVendor" or 0 else. + // 0 does not prevent another device to be picked as a second choice + return d.get_info() == "MyVendor"; +} + +// Get the preferred device or another one if not available +sycl::device preferred_device { prefer_my_vendor }; + +// This throws if there is no such device in the system +sycl::queue half_precision_controller { + // Can use a lambda as a device ranking function. + // Returns a negative number to fail in the case there is no such device + [] (auto &d) { return d.has(sycl::aspect::fp16) ? 1 : -1; } +}; + +// To ease porting SYCL 1.2.1 code, there are types whose +// construction leads to the equivalent predefined device selector +sycl::queue my_old_style_gpu { sycl::gpu_selector {} }; +---- + +Examples of using [code]#aspect_selector#: + +[[example:aspect-selector]] +[source,,linenums] +---- +using namespace sycl; // (optional) avoids need for "sycl::" before SYCL names + +// Unrestrained selection, equivalent to default_selector +auto dev0 = device{aspect_selector()}; + +// Pass aspects in a vector +// Only accept CPUs that support half +auto dev1 = device{aspect_selector(std::vector{aspect::cpu, aspect::fp16})}; + +// Pass aspects without a vector +// Only accept GPUs that support half +auto dev2 = device{aspect_selector(aspect::gpu, aspect::fp16)}; + +// Pass aspects as compile-time parameters +// Only accept devices that can be debugged on host and support half +auto dev3 = device{aspect_selector()}; + +// Pass aspects in an allowlist and a denylist +// Only accept devices that support half and double floating point precision, +// but exclude emulated devices and devices of type "custom" +auto dev4 = device{aspect_selector( + std::vector{aspect::fp16, aspect::fp64}, + std::vector{aspect::emulated, aspect::custom} +)}; +---- + +[NOTE] +==== +In SYCL 1.2.1 the predefined device selectors were actually types +that had to be instantiated to be used. Now they are just +instances. To simplify porting code using the old type +instantiations, a backward-compatible API is still provided, such as +[code]#sycl::default_selector#. The new predefined device +selectors have their new names appended with "_v" to avoid +conflicts, thus following the naming style used by traits in the {cpp} +standard library. There is no requirement for the implementation to +have for example [code]#sycl::gpu_selector_v# being an instance +of [code]#sycl::gpu_selector#. +==== + +NOTE: Implementation note: the SYCL API might rely on SFINAE or {cpp20} +concepts to resolve some ambiguity in constructors with default +parameters. + + +[[sec:platform-class]] +=== Platform class + +The SYCL [code]#platform# class encapsulates a single SYCL platform on +which SYCL kernel functions may be executed. A SYCL platform must be +associated with a single <>. + +A SYCL [code]#platform# is also associated with one or more SYCL +[code]#devices# associated with the same <>. + +All member functions of the [code]#platform# class are synchronous and +errors are handled by throwing synchronous SYCL exceptions. + +The execution environment for a SYCL application has a fixed number of +platforms which does not vary as the application executes. The application +can get a list of all these platforms via [code]#platform::get_platforms()#. +The [code]#platform# class also provides constructors, but constructing a new +[code]#platform# instance merely creates a new object that is a copy of one +of the objects returned by [code]#platform::get_platforms()#. + +The SYCL [code]#platform# class provides the common reference semantics +(see <>). + +==== Platform interface + +A synopsis of the SYCL [code]#platform# class is provided below. The +constructors, member functions and static member functions of the SYCL +[code]#platform# class are listed in +<>, <> and +<> respectively. The additional common +special member functions and common member functions are listed in +<> in +<> and +<> respectively. + +// Interface of platform class +[source,,linenums] +---- +include::{header_dir}/platform.h[lines=4..-1] +---- + + +[[table.constructors.platform]] +.Constructors of the SYCL [code]#platform# class +// Jon: Dims{6.7cm}{8.3cm} +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +platform() +---- + a@ Constructs a SYCL [code]#platform# instance that is a copy of the + [code]#platform# which contains the device returned by + [code]#default_selector_v#. + +a@ +[source] +---- +template + explicit platform(const DeviceSelector &) +---- + a@ Constructs a SYCL [code]#platform# instance that is a copy of the + [code]#platform# which contains the device returned by the + <> parameter. + +|==== + + + +[[table.members.platform]] +.Member functions of the SYCL [code]#platform# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +backend get_backend() const noexcept +---- + a@ Returns a [code]#backend# identifying the <> associated + with this [code]#platform#. + +a@ +[source] +---- +template typename param::return_type get_info() const +---- + a@ Queries this SYCL [code]#platform# for information requested by + the template parameter [code]#param#. + The type alias [code]#param::return_type# must be defined in + accordance with the info parameters in <> to + facilitate returning the type associated with the [code]#param# + parameter. + +a@ +[source] +---- +template typename param::return_type get_backend_info() const +---- + a@ Queries this SYCL [code]#platform# for <>-specific + information requested by the template parameter [code]#param#. + The type alias [code]#param::return_type# must be defined in + accordance with the <> specification. + Must throw an [code]#exception# with the [code]#errc::backend_mismatch# + error code if the <> that corresponds with [code]#param# is different + from the <> that is associated with this [code]#platform#. + +a@ +[source] +---- +bool has(aspect asp) const +---- + a@ Returns true if all of the SYCL [code]#devices# associated with this + SYCL [code]#platform# have the given <>. + +a@ +[source] +---- +bool has_extension(const std::string & extension) const +---- + a@ Deprecated, use [code]#has()# instead. + +Returns true if this SYCL [code]#platform# supports the extension queried by the [code]#extension# parameter. A SYCL [code]#platform# can only support an extension if all associated SYCL [code]#devices# support that extension. + +a@ +[source] +---- +std::vector get_devices( + info::device_type deviceType = + info::device_type::all) const +---- + a@ Returns a [code]#std::vector# containing all SYCL + [code]#devices# associated with this SYCL [code]#platform# + which have the device type encapsulated by [code]#deviceType#. + +|==== + + + +[[table.staticmembers.platform]] +.Static member functions of the SYCL [code]#platform# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Static member function @ Description +a@ +[source] +---- +static std::vector get_platforms() +---- + a@ Returns a [code]#std::vector# containing all SYCL + [code]#platforms# from all <> available in the system. + +|==== + + + +==== Platform information descriptors + +A <> can be queried for information using the [code]#get_info# +member function of the [code]#platform# class, specifying one of the info +parameters in [code]#info::platform#. Every <> +must produce a valid value for each info parameter. The possible values for +each info parameter and any restrictions are defined in the specification +of the <> associated with the <>. All info parameters in +[code]#info::platform# are specified in <> and the +synopsis for [code]#info::platform# is described in +<>. + + +[[table.platform.info]] +.Platform information descriptors +// Jon: Dims{5cm}{2cm}{7cm} +[width="100%",options="header",separator="@",cols="37%,19%,44%"] +|==== +@ Platform descriptors @ Return type @ Description +a@ +[source] +---- +info::platform::version +---- + + @ [.code]#std::string# + a@ Returns the software driver version of the <>. + +a@ +[source] +---- +info::platform::name +---- + + @ [.code]#std::string# + a@ Returns the name of the <>. + +a@ +[source] +---- +info::platform::vendor +---- + + @ [.code]#std::string# + a@ Returns the name of the vendor providing the <>. + +a@ +[source] +---- +info::platform::extensions +---- + + @ [.code]#std::vector# + a@ Deprecated, use [code]#device::get_info()# with + [code]#info::device::aspects# instead. + +Returns the extensions supported by the <>. + +|==== + + + +[[sec:interface.context.class]] +=== Context class + +The <> class represents a SYCL <>. A <> +represents the runtime data structures and state required by a <> +API to interact with a group of devices associated with a platform. + +The SYCL [code]#context# class provides the common reference semantics +(see <>). + + +==== Context interface + +The constructors and member functions of the SYCL [code]#context# class +are listed in <> and +<>, respectively. The additional common special +member functions and common member functions are listed in +<> in +<> and +<>, respectively. + +All member functions of the <> class are synchronous and errors +are handled by throwing synchronous SYCL exceptions. + +All constructors of the SYCL <> class will construct an +instance associated with a particular <>, determined by the +constructor parameters or, in the case of the default constructor, the +SYCL [code]#device# produced by the +[code]#default_selector_v#. + +A SYCL [code]#context# can optionally be constructed with an +[code]#async_handler# parameter. In this case the +[code]#async_handler# is used to report asynchronous SYCL exceptions, +as described in <>. + +Information about a SYCL <> may be queried through the +[code]#get_info()# member function. + +// Interface for class: context +[source,,linenums] +---- +include::{header_dir}/context.h[lines=4..-1] +---- + + +[[table.constructors.context]] +.Constructors of the SYCL [code]#context# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +explicit context(async_handler asyncHandler = {}) +---- + a@ Constructs a SYCL [code]#context# instance using an instance of + [code]#default_selector_v# to select the associated SYCL + [code]#platform# and [code]#device(s)#. The <> that + are associated with the constructed <> are implementation-defined + but must contain the <> chosen by the device selector. The + constructed SYCL [code]#context# will use the [code]#asyncHandler# + parameter to handle exceptions. + +a@ +[source] +---- +explicit context(const device &dev, + async_handler asyncHandler = {}) +---- + a@ Constructs a SYCL [code]#context# instance using the [code]#dev# parameter as the associated SYCL [code]#device# and the SYCL [code]#platform# associated with the [code]#dev# parameter as the associated SYCL [code]#platform#. The constructed SYCL [code]#context# will use the [code]#asyncHandler# parameter to handle exceptions. + +a@ +[source] +---- +explicit context(const std::vector & deviceList, + async_handler asyncHandler = {}) +---- + a@ Constructs a SYCL [code]#context# instance using the SYCL [code]#device(s)# in the [code]#deviceList# parameter as the associated SYCL [code]#device(s)# and the SYCL [code]#platform# associated with each SYCL [code]#device# in the [code]#deviceList# parameter as the associated SYCL [code]#platform#. This requires that all SYCL [code]#devices# in the [code]#deviceList# parameter have the same associated SYCL [code]#platform#. The constructed SYCL [code]#context# will use the [code]#asyncHandler# parameter to handle exceptions. + +|==== + + + +[[table.members.context]] +.Member functions of the [code]#context# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +backend get_backend() const noexcept +---- + a@ Returns a [code]#backend# identifying the <> associated + with this [code]#context#. + +a@ +[source] +---- +template typename param::return_type get_info() const +---- + a@ Queries this SYCL [code]#context# for information requested by the + template parameter [code]#param#. + The type alias [code]#param::return_type# must be defined in + accordance with the info parameters in <> to + facilitate returning the type associated with the [code]#param# + parameter. + +a@ +[source] +---- +template +typename param::return_type get_backend_info() const +---- + a@ Queries this SYCL [code]#context# for <>-specific information + requested by the template parameter [code]#param#. + The type alias [code]#param::return_type# must be defined in + accordance with the <> specification. + Must throw an [code]#exception# with the [code]#errc::backend_mismatch# + error code if the <> that corresponds with [code]#param# is different + from the <> that is associated with this [code]#context#. + +a@ +[source] +---- +platform get_platform() const +---- + a@ Returns the SYCL [code]#platform# that is associated with this SYCL [code]#context#. The value returned must be equal to that returned by [code]#get_info()#. + +a@ +[source] +---- +std::vector + get_devices() const +---- + a@ Returns a [code]#std::vector# containing all SYCL [code]#devices# that are associated with this SYCL [code]#context#. The value returned must be equal to that returned by [code]#get_info()#. + +|==== + + + +==== Context information descriptors + +A <> can be queried for information using the [code]#get_info# +member function of the [code]#context# class, specifying one of the info +parameters in [code]#info::context#. Every <> +must produce a valid value for each info parameter. The possible values for +each info parameter and any restrictions are defined in the specification of +the <> associated with the <>. All info parameters in +[code]#info::context# are specified in <> and the synopsis +for [code]#info::context# is described in <>. + + +[[table.context.info]] +.Context information descriptors +// Jon: Dims{5cm}{4.4cm}{5cm} +[width="100%",options="header",separator="@",cols="37%,19%,44%"] +|==== +@ Context Descriptors @ Return type @ Description +a@ +[source] +---- +info::context::platform +---- + + @ [.code]#platform# + a@ Returns the <> associated with the <>. + +a@ +[source] +---- +info::context::devices +---- + + @ [.code]#std::vector# + a@ Returns all of the <> associated with the <>. + +a@ +[source] +---- +info::context::atomic_memory_order_capabilities +---- + + @ [.code]#std::vector# + a@ Returns the set of memory orderings supported by atomic operations on all + devices in the context, which is guaranteed to include [code]#relaxed#. + +The memory ordering of the context determines the behavior of atomic operations applied +to any memory that can be concurrently accessed by multiple devices in the context. + +a@ +[source] +---- +info::context::atomic_fence_order_capabilities +---- + + @ [.code]#std::vector# + a@ Returns the set of memory orderings supported by [code]#atomic_fence# + on all devices in the context, which is guaranteed to include + [code]#relaxed#. + +The memory ordering of the context determines the behavior of fence operations applied +to any memory that can be concurrently accessed by multiple devices in the context. + +a@ +[source] +---- +info::context::atomic_memory_scope_capabilities +---- + + @ [.code]#std::vector# + a@ Returns the set of memory scopes supported by atomic operations on all devices in the context, which is guaranteed to include [code]#work_group#. + +a@ +[source] +---- +info::context::atomic_fence_scope_capabilities +---- + + @ [.code]#std::vector# + a@ Returns the set of memory orderings supported by [code]#atomic_fence# on all devices in the context, which is guaranteed to include [code]#work_group#. + +|==== + + + +[[sec:context-properties]] +==== Context properties + +The [code]#property_list# constructor parameters are present for extensibility. + +// \input{device_class} +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% begin device_class %%%%%%%%%%%%%%%%%%%%%%%%%%%% + +[[sec:device-class]] +=== Device class + +The SYCL [code]#device# class encapsulates a single SYCL device on +which <> can be executed. + +All member functions of the [code]#device# class are synchronous and +errors are handled by throwing synchronous SYCL exceptions. + +The execution environment for a SYCL application has a fixed number of +devices which does not vary as the application executes. The application +can get a list of all these devices via [code]#device::get_devices()#. The +[code]#device# class also provides constructors, but constructing a new +[code]#device# instance merely creates a new object that is a copy of one +of the objects returned by [code]#device::get_devices()#. + +A SYCL [code]#device# can be partitioned into multiple SYCL devices, by +calling the [code]#create_sub_devices()# member function template. The +resulting SYCL [code]#devices# are considered sub devices, and it is +valid to partition these sub devices further. The range of support for this +feature is <> and device specific and can be queried for through +[code]#get_info()#. + +The SYCL [code]#device# class provides the common reference semantics +(see <>). + +==== Device interface + +A synopsis of the SYCL [code]#device# class is provided below. The +constructors, member functions and static member functions of the SYCL +[code]#device# class are listed in +<>, <> and +<> respectively. The additional common special +member functions and common member functions are listed in +<> in +<> and +<>, respectively. + +// Interface of the device class +[source,,linenums] +---- +include::{header_dir}/device.h[lines=4..-1] +---- + + +[[table.constructors.device]] +.Constructors of the SYCL [code]#device# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +device() +---- + a@ Constructs a SYCL [code]#device# instance that is a copy of the device + returned by [code]#default_selector_v#. + +a@ +[source] +---- +template + explicit device(const DeviceSelector &) +---- + a@ Constructs a SYCL [code]#device# instance that is a copy of the device + returned by the <> parameter. + +|==== + + + +[[table.members.device]] +.Member functions of the SYCL [code]#device# class +[width="100%",options="header",separator="@",cols="58%,42%"] +|==== +@ Member function @ Description +a@ +[source] +---- +backend get_backend() const noexcept +---- + a@ Returns a [code]#backend# identifying the <> associated + with this [code]#device#. + +a@ +[source] +---- +platform get_platform() const +---- + a@ Returns the associated SYCL [code]#platform#. + The value returned must be equal to that returned by [code]#get_info()#. + +a@ +[source] +---- +bool is_cpu() const +---- + a@ Returns the same value as [code]#has(aspect::cpu)#. See <>. + +a@ +[source] +---- +bool is_gpu() const +---- + a@ Returns the same value as [code]#has(aspect::gpu)#. See <>. + +a@ +[source] +---- +bool is_accelerator() const +---- + a@ Returns the same value as [code]#has(aspect::accelerator)#. See <>. + +a@ +[source] +---- +template +typename param::return_type get_info() const +---- + a@ Queries this SYCL [code]#device# for information requested by the + template parameter [code]#param#. + The type alias [code]#param::return_type# must be defined in + accordance with the info parameters in <> to + facilitate returning the type associated with the [code]#param# + parameter. + +a@ +[source] +---- +template +typename param::return_type get_backend_info() const +---- + a@ Queries this SYCL [code]#device# for <>-specific information + requested by the template parameter [code]#param#. + The type alias [code]#param::return_type# must be defined in + accordance with the <> specification. + Must throw an [code]#exception# with the [code]#errc::backend_mismatch# + error code if the <> that corresponds with [code]#param# is different + from the <> that is associated with this [code]#device#. + +a@ +[source] +---- +bool has(aspect asp) const +---- + a@ Returns true if this SYCL [code]#device# has the given <>. + SYCL applications can use this member function to determine which + optional features this device supports (if any). + +a@ +[source] +---- +bool has_extension( + const std::string &extension) const +---- + a@ Deprecated, use [code]#has()# instead. + +Returns true if this SYCL [code]#device# supports the extension queried by the [code]#extension# parameter. + +a@ +[source] +---- +template +std::vector create_sub_devices( + size_t count) const +---- + a@ Available only when [code]#prop# is + [code]#info::partition_property::partition_equally#. Returns a + [code]#std::vector# of sub devices partitioned from this SYCL + [code]#device# based on the [code]#count# parameter. The returned vector + contains as many sub devices as can be created such that each sub device + contains [code]#count# compute units. If the device's total number of + compute units (as returned by [code]#info::device::max_compute_units#) is + not evenly divided by [code]#count#, then the remaining compute units are + not included in any of the sub devices. + +If this SYCL [code]#device# does not support +[code]#info::partition_property::partition_equally# an [code]#exception# with +the [code]#errc::feature_not_supported# error code must be thrown. If +[code]#count# exceeds the total number of compute units in the device, an +[code]#exception# with the [code]#errc::invalid# error code must be thrown. + +a@ +[source] +---- +template +std::vector create_sub_devices( + const std::vector &counts) const +---- + a@ Available only when [code]#prop# is + [code]#info::partition_property::partition_by_counts#. Returns a + [code]#std::vector# of sub devices partitioned from this SYCL + [code]#device# based on the [code]#counts# parameter. For each non-zero + value _M_ in the [code]#counts# vector, a sub device with _M_ compute + units is created. + +If the SYCL [code]#device# does not support +[code]#info::partition_property::partition_by_counts# an [code]#exception# with +the [code]#errc::feature_not_supported# error code must be thrown. If the +number of non-zero values in [code]#counts# exceeds the device's maximum +number of sub devices (as returned by +[code]#info::device::partition_max_sub_devices#) or if the total of all the +values in the [code]#counts# vector exceeds the total number of compute units +in the device (as returned by [code]#info::device::max_compute_units#), an +[code]#exception# with the [code]#errc::invalid# error code must be thrown. + +a@ +[source] +---- +template +std::vector create_sub_devices( + info::partition_affinity_domain domain) const +---- +// WARNING: The Asciidoctor PDF renderer seems to be unable to generate a table +// where any single row is taller than a page. This row is already close to +// the page limit. If you add any more text in this cell, check the PDF render +// to see if any of the text is cut off at the bottom of the page. If so, try +// making this column wider so that this row still fits on a page. + + a@ Available only when [code]#prop# is + [code]#info::partition_property::partition_by_affinity_domain#. Returns + a [code]#std::vector# of sub devices partitioned from this SYCL + [code]#device# by affinity domain based on the [code]#domain# parameter, + which must be one of the following values: + +* [code]#info::partition_affinity_domain::numa#: Split the device into + sub devices comprised of compute units that share a NUMA node. + +* [code]#info::partition_affinity_domain::L4_cache#: Split the device into + sub devices comprised of compute units that share a level 4 data cache. + +* [code]#info::partition_affinity_domain::L3_cache#: Split the device into + sub devices comprised of compute units that share a level 3 data cache. + +* [code]#info::partition_affinity_domain::L2_cache#: Split the device into + sub devices comprised of compute units that share a level 2 data cache. + +* [code]#info::partition_affinity_domain::L1_cache#: Split the device into + sub devices comprised of compute units that share a level 1 data cache. + +* [code]#info::partition_affinity_domain::next_partitionable#: Split the device + along the next partitionable affinity domain. The implementation shall find + the first level along which the device or sub device may be further + subdivided in the order [code]#numa#, [code]#L4_cache#, [code]#L3_cache#, + [code]#L2_cache#, [code]#L1_cache#, and partition the device into sub devices + comprised of compute units that share memory subsystems at this level. The + user may determine what happened via + [code]#info::device::partition_type_affinity_domain#. + +If the SYCL [code]#device# does not support +[code]#info::partition_property::partition_by_affinity_domain# or the +SYCL [code]#device# does not support the +[code]#info::partition_affinity_domain# provided, an [code]#exception# +with the [code]#errc::feature_not_supported# error code must be thrown. + +|==== + + + +[[table.staticmembers.device]] +.Static member functions of the SYCL [code]#device# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Static member function @ Description +a@ +[source] +---- +static std::vector get_devices( + info::device_type deviceType = info::device_type::all) +---- + a@ Returns a [code]#std::vector# containing all SYCL + [code]#devices# from all <> available in the + system which have the device type encapsulated by [code]#deviceType#. + +|==== + + + +==== Device information descriptors + +A <> can be queried for information using the [code]#get_info# +member function of the [code]#device# class, specifying one of the info +parameters in [code]#info::device#. Every <> must produce a +valid value for each info parameter. The possible values for each info +parameter and any restriction are defined in the specification of the +<> associated with the <>. All info parameters in +[code]#info::device# are specified in <> and the synopsis +for [code]#info::device# is described in <>. + + +[[table.device.info]] +.Device information descriptors +// Jon: Dims{5cm}{2.5cm}{6.5cm} +[width="100%",options="header",separator="@",cols="37%,19%,44%"] +|==== +@ Device descriptors @ Return type @ Description +a@ +[source] +---- +info::device::device_type +---- + + @ [.code]#info::device_type# + a@ Returns the device type associated with the <>. May not return + [code]#info::device_type::all#. + +a@ +[source] +---- +info::device::vendor_id +---- + + @ [.code]#uint32_t# + a@ Returns a unique vendor device identifier. + +a@ +[source] +---- +info::device::max_compute_units +---- + + @ [.code]#uint32_t# + a@ Returns the number of parallel compute units available to the + <>. The minimum value is 1. + +a@ +[source] +---- +info::device::max_work_item_dimensions +---- + + @ [.code]#uint32_t# + a@ Returns the maximum dimensions that specify the global and local work-item IDs used by the data parallel execution model. + The minimum value is 3 if this SYCL [code]#device# is not of device type [code]#info::device_type::custom#. + +a@ +[source] +---- +info::device::max_work_item_sizes\<1> +---- + + @ [.code]#id<1># + a@ Returns the maximum number of work-items that are permitted of the + work-group of the [code]#nd_range#. The minimum value is latexmath:[(1)] + for [code]#devices# that are not of device type + [code]#info::device_type::custom#. + +a@ +[source] +---- +info::device::max_work_item_sizes\<2> +---- + + @ [.code]#id<2># + a@ Returns the maximum number of work-items that are permitted in both + dimensions of the work-group of the [code]#nd_range#. The minimum value is + latexmath:[(1,1)] for [code]#devices# that are not of device type + [code]#info::device_type::custom#. + +a@ +[source] +---- +info::device::max_work_item_sizes\<3> +---- + + @ [.code]#id<3># + a@ Returns the maximum number of work-items that are permitted in each + dimension of the work-group of the [code]#nd_range#. The minimum value + is latexmath:[(1,1,1)] for [code]#devices# that are not of device type + [code]#info::device_type::custom#. + +a@ +[source] +---- +info::device::max_work_group_size +---- + + @ [.code]#size_t# + a@ Returns the maximum number of work-items that are permitted in a work-group executing a kernel on a single compute unit. + The minimum value is 1. + +a@ +[source] +---- +info::device::max_num_sub_groups +---- + + @ [.code]#uint32_t# + a@ Returns the maximum number of sub-groups in a work-group for any kernel executed on the device. The minimum value is 1. + +a@ +[source] +---- +info::device::sub_group_independent_forward_progress +---- + + @ [.code]#bool# + a@ Returns true if the device supports independent forward progress of sub-groups with respect to other sub-groups in the same work-group. + +a@ +[source] +---- +info::device::sub_group_sizes +---- + + @ [.code]#std::vector# + a@ Returns a [code]#std::vector# of [code]#size_t# containing the set of sub-group sizes supported by the device. + +a@ +[source] +---- +info::device::preferred_vector_width_char +info::device::preferred_vector_width_short +info::device::preferred_vector_width_int +info::device::preferred_vector_width_long +info::device::preferred_vector_width_float +info::device::preferred_vector_width_double +info::device::preferred_vector_width_half +---- + + @ [.code]#uint32_t# + a@ Returns the preferred native vector width size for built-in scalar types that can be put into vectors. The vector width is defined as the number of scalar elements that can be stored in the vector. Must return 0 for [code]#info::device::preferred_vector_width_double# if the [code]#device# does not have [code]#aspect::fp64# and must return 0 for [code]#info::device::preferred_vector_width_half# if the [code]#device# does not have [code]#aspect::fp16#. + +a@ +[source] +---- +info::device::native_vector_width_char +info::device::native_vector_width_short +info::device::native_vector_width_int +info::device::native_vector_width_long +info::device::native_vector_width_float +info::device::native_vector_width_double +info::device::native_vector_width_half +---- + + @ [.code]#uint32_t# + a@ Returns the native ISA vector width. The vector width is defined as the number of scalar elements that can be stored in the vector. Must return 0 for [code]#info::device::preferred_vector_width_double# if the [code]#device# does not have [code]#aspect::fp64# and must return 0 for [code]#info::device::preferred_vector_width_half# if the [code]#device# does not have [code]#aspect::fp16#. + +a@ +[source] +---- +info::device::max_clock_frequency +---- + + @ [.code]#uint32_t# + a@ Returns the maximum configured clock frequency of this SYCL [code]#device# in MHz. + +a@ +[source] +---- +info::device::address_bits +---- + + @ [.code]#uint32_t# + a@ Returns the default compute device address space size specified as an unsigned integer value in bits. Must return either 32 or 64. + +a@ +[source] +---- +info::device::max_mem_alloc_size +---- + + @ [.code]#uint64_t# + a@ Returns the maximum size of memory object allocation in bytes. The minimum value is max (1/4th of [code]#info::device::global_mem_size#,128*1024*1024) if this SYCL [code]#device# is not of device type [code]#info::device_type::custom#. + +a@ +[source] +---- +info::device::image_support +---- + + @ [.code]#bool# + a@ Deprecated. + +Returns the same value as [code]#device::has(aspect::image)#. + +a@ +[source] +---- +info::device::max_read_image_args +---- + + @ [.code]#uint32_t# + a@ Returns the maximum number of simultaneous image objects that can be read from by a kernel. The minimum value is 128 if the SYCL [code]#device# has [code]#aspect::image#. + +a@ +[source] +---- +info::device::max_write_image_args +---- + + @ [.code]#uint32_t# + a@ Returns the maximum number of simultaneous image objects that can be written to by a kernel. The minimum value is 8 if the SYCL [code]#device# has [code]#aspect::image#. + +a@ +[source] +---- +info::device::image2d_max_width +---- + + @ [.code]#size_t# + a@ Returns the maximum width of a 2D image or 1D image in pixels. The minimum value is 8192 if the SYCL [code]#device# has [code]#aspect::image#. + +a@ +[source] +---- +info::device::image2d_max_height +---- + + @ [.code]#size_t# + a@ Returns the maximum height of a 2D image in pixels. The minimum value is 8192 if the SYCL [code]#device# has [code]#aspect::image#. + +a@ +[source] +---- +info::device::image3d_max_width +---- + + @ [.code]#size_t# + a@ Returns the maximum width of a 3D image in pixels. The minimum value is 2048 if the SYCL [code]#device# has [code]#aspect::image#. + +a@ +[source] +---- +info::device::image3d_max_height +---- + + @ [.code]#size_t# + a@ Returns the maximum height of a 3D image in pixels. The minimum value is 2048 if the SYCL [code]#device# has [code]#aspect::image#. + +a@ +[source] +---- +info::device::image3d_max_depth +---- + + @ [.code]#size_t# + a@ Returns the maximum depth of a 3D image in pixels. The minimum value is 2048 if the SYCL [code]#device# has [code]#aspect::image#. + +a@ +[source] +---- +info::device::image_max_buffer_size +---- + + @ [.code]#size_t# + a@ Returns the number of pixels for a 1D image created from a buffer object. The minimum value is 65536 if the SYCL [code]#device# has [code]#aspect::image#. Note that this information is intended for OpenCL interoperability only as this feature is not supported in SYCL. + +a@ +[source] +---- +info::device::max_samplers +---- + + @ [.code]#uint32_t# + a@ Returns the maximum number of samplers that can be used in a kernel. The minimum value is 16 if the SYCL [code]#device# has [code]#aspect::image#. + +a@ +[source] +---- +info::device::max_parameter_size +---- + + @ [.code]#size_t# + a@ Returns the maximum size in bytes of the arguments that can be passed to a kernel. The minimum value is 1024 if this SYCL [code]#device# is not of device type [code]#info::device_type::custom#. For this minimum value, only a maximum of 128 arguments can be passed to a kernel. + +a@ +[source] +---- +info::device::mem_base_addr_align +---- + + @ [.code]#uint32_t# + a@ Returns the minimum value in bits of the largest supported SYCL built-in + data type if this SYCL [code]#device# is not of device type [code]#info::device_type::custom#. + +a@ +[source] +---- +info::device::half_fp_config +---- + + @ [.code]#std::vector# + a@ Returns a [code]#std::vector# of [code]#info::fp_config# + describing the half precision floating-point capability of this SYCL + [code]#device#. The [code]#std::vector# may contain zero or + more of the following values: +-- + * [code]#info::fp_config::denorm:# denorms are supported. + * [code]#info::fp_config::inf_nan:# INF and quiet NaNs are supported. + * [code]#info::fp_config::round_to_nearest:# round to nearest even + rounding mode is supported. + * [code]#info::fp_config::round_to_zero:# round to zero rounding mode + is supported. + * [code]#info::fp_config::round_to_inf:# round to positive and + negative infinity rounding modes are supported. + * [code]#info::fp_config::fma:# IEEE754-2008 fused multiply add is + supported. + * [code]#info::fp_config::correctly_rounded_divide_sqrt:# divide and + sqrt are correctly rounded as defined by the IEEE754 specification. + * [code]#info::fp_config::soft_float:# basic floating-point + operations (such as addition, subtraction, multiplication) are + implemented in software. + +If half precision is supported by this SYCL [code]#device# (i.e. the +[code]#device# has [code]#aspect::fp16# there is no minimum +floating-point capability. If half support is not supported the returned +[code]#std::vector# must be empty. +-- + +a@ +[source] +---- +info::device::single_fp_config +---- + + @ [.code]#std::vector# + a@ Returns a [code]#std::vector# of [code]#info::fp_config# + describing the single precision floating-point capability of this + SYCL [code]#device#. The [code]#std::vector# must + contain one or more of the following values: +-- + * [code]#info::fp_config::denorm:# denorms are supported. + * [code]#info::fp_config::inf_nan:# INF and quiet NaNs are supported. + * [code]#info::fp_config::round_to_nearest:# round to nearest even + rounding mode is supported. + * [code]#info::fp_config::round_to_zero:# round to zero rounding mode + is supported. + * [code]#info::fp_config::round_to_inf:# round to positive and + negative infinity rounding modes are supported. + * [code]#info::fp_config::fma:# IEEE754-2008 fused multiply add is + supported. + * [code]#info::fp_config::correctly_rounded_divide_sqrt:# divide and + sqrt are correctly rounded as defined by the IEEE754 specification. + * [code]#info::fp_config::soft_float:# basic floating-point + operations (such as addition, subtraction, multiplication) are + implemented in software. + +If this SYCL [code]#device# is not of type +[code]#info::device_type::custom# then the minimum floating-point +capability must be: [code]#info::fp_config::round_to_nearest# and +[code]#info::fp_config::inf_nan#. +-- + +a@ +[source] +---- +info::device::double_fp_config +---- + + @ [.code]#std::vector# + a@ Returns a [code]#std::vector# of [code]#info::fp_config# + describing the double precision floating-point capability of this + SYCL [code]#device#. The [code]#std::vector# may contain + zero or more of the following values: +-- + * [code]#info::fp_config::denorm:# denorms are supported. + * [code]#info::fp_config::inf_nan:# INF and NaNs are supported. + * [code]#info::fp_config::round_to_nearest:# round to nearest even + rounding mode is supported. + * [code]#info::fp_config::round_to_zero:# round to zero rounding mode + is supported. + * [code]#info::fp_config::round_to_inf:# round to positive and + negative infinity rounding modes are supported. + * [code]#info::fp_config::fma:# IEEE754-2008 fused multiply-add is + supported. + * [code]#info::fp_config::soft_float:# basic floating-point + operations (such as addition, subtraction, multiplication) are + implemented in software. + +If double precision is supported by this SYCL [code]#device# (i.e. the +[code]#device# has [code]#aspect::fp64# and this SYCL +[code]#device# is not of type [code]#info::device_type::custom# +then the minimum floating-point capability must be: +[code]#info::fp_config::fma#, +[code]#info::fp_config::round_to_nearest#, +[code]#info::fp_config::round_to_zero#, +[code]#info::fp_config::round_to_inf#, +[code]#info::fp_config::inf_nan# and +[code]#info::fp_config::denorm#. If double support is not supported the +returned [code]#std::vector# must be empty. +-- + +a@ +[source] +---- +info::device::global_mem_cache_type +---- + + @ [.code]#info::global_mem_cache_type# + a@ Returns the type of global memory cache supported. + +a@ +[source] +---- +info::device::global_mem_cache_line_size +---- + + @ [.code]#uint32_t# + a@ Returns the size of global memory cache line in bytes. + +a@ +[source] +---- +info::device::global_mem_cache_size +---- + + @ [.code]#uint64_t# + a@ Returns the size of global memory cache in bytes. + +a@ +[source] +---- +info::device::global_mem_size +---- + + @ [.code]#uint64_t# + a@ Returns the size of global device memory in bytes. + +a@ +[source] +---- +info::device::max_constant_buffer_size +---- + + @ [.code]#uint64_t# + a@ Deprecated in SYCL 2020. Returns the maximum size in bytes of a constant buffer allocation. The minimum value is 64 KB if this SYCL [code]#device# is not of type [code]#info::device_type::custom#. + +a@ +[source] +---- +info::device::max_constant_args +---- + + @ [.code]#uint32_t# + a@ Deprecated in SYCL 2020. Returns the maximum number of constant arguments that can be declared in a kernel. The minimum value is 8 if this SYCL [code]#device# is not of type [code]#info::device_type::custom#. + +a@ +[source] +---- +info::device::local_mem_type +---- + + @ [.code]#info::local_mem_type# + a@ Returns the type of local memory supported. This can + be [code]#info::local_mem_type::local# implying dedicated + local memory storage such as SRAM, or [code]#info::local_mem_type::global#. + If this SYCL [code]#device# is of type [code]#info::device_type::custom# this can also be [code]#info::local_mem_type::none#, indicating local memory is not supported. + +a@ +[source] +---- +info::device::local_mem_size +---- + + @ [.code]#uint64_t# + a@ Returns the size of local memory arena in bytes. The minimum value is 32 KB if this SYCL [code]#device# is not of type [code]#info::device_type::custom#. + +a@ +[source] +---- +info::device::error_correction_support +---- + + @ [.code]#bool# + a@ Returns true if the device implements error correction for all accesses to + compute device memory (global and constant). Returns false if the device does + not implement such error correction. + +a@ +[source] +---- +info::device::host_unified_memory +---- + + @ [.code]#bool# + a@ Deprecated, use [code]#device::has()# with one of the [code]#aspect::usm_*# aspects instead. + +Returns true if the device and the host have a unified memory subsystem and +returns false otherwise. + +a@ +[source] +---- +info::device::atomic_memory_order_capabilities +---- + + @ [.code]#std::vector# + a@ Returns the set of memory orderings supported by atomic operations on the device, + which is guaranteed to include [code]#relaxed#. + +a@ +[source] +---- +info::device::atomic_fence_order_capabilities +---- + + @ [.code]#std::vector# + a@ Returns the set of memory orderings supported by [code]#atomic_fence# on the device, + which is guaranteed to include [code]#relaxed#. + +a@ +[source] +---- +info::device::atomic_memory_scope_capabilities +---- + + @ [.code]#std::vector# + a@ Returns the set of memory scopes supported by atomic operations on the device, + which is guaranteed to include [code]#work_group#. + +a@ +[source] +---- +info::device::atomic_fence_scope_capabilities +---- + + @ [.code]#std::vector# + a@ Returns the set of memory scopes supported by [code]#atomic_fence# on the device, + which is guaranteed to include [code]#work_group#. + +a@ +[source] +---- +info::device::profiling_timer_resolution +---- + + @ [.code]#size_t# + a@ Returns the resolution of device timer in nanoseconds. + +a@ +[source] +---- +info::device::is_endian_little +---- + + @ [.code]#bool# + a@ Deprecated. Check the byte order of the host system instead. The host + and device are required to have the same byte order. + +Returns true if this SYCL [code]#device# is a little endian device and returns +false otherwise. + +a@ +[source] +---- +info::device::is_available +---- + + @ [.code]#bool# + a@ Returns true if the SYCL [code]#device# is available and returns false if the device is not + available. + +a@ +[source] +---- +info::device::is_compiler_available +---- + + @ [.code]#bool# + a@ Deprecated. + +Returns the same value as [code]#device::has(aspect::online_compiler)#. + +a@ +[source] +---- +info::device::is_linker_available +---- + + @ [.code]#bool# + a@ Deprecated. + +Returns the same value as [code]#device::has(aspect::online_linker)#. + +a@ +[source] +---- +info::device::execution_capabilities +---- + + @ [.code]#std::vector# + a@ Returns a [code]#std::vector# of the [code]#info::execution_capability# describing the supported execution capabilities. + Note that this information is intended for OpenCL interoperability only as SYCL only supports [code]#info::execution_capability::exec_kernel#. + +a@ +[source] +---- +info::device::queue_profiling +---- + + @ [.code]#bool# + a@ Deprecated. + +Returns the same value as [code]#device::has(aspect::queue_profiling)#. + +a@ +[source] +---- +info::device::built_in_kernel_ids +---- + + @ [.code]#std::vector# + a@ Returns a [code]#std::vector# of identifiers for the built-in kernels + supported by this SYCL [code]#device#. + +a@ +[source] +---- +info::device::built_in_kernels +---- + + @ [.code]#std::vector# + a@ Deprecated. Use [code]#info::device::built_in_kernel_ids# instead. + +Returns a [code]#std::vector# of built-in OpenCL kernels supported by this SYCL +[code]#device#. + +a@ +[source] +---- +info::device::platform +---- + + @ [.code]#platform# + a@ Returns the SYCL [code]#platform# associated with this SYCL [code]#device#. + +a@ +[source] +---- +info::device::name +---- + + @ [.code]#std::string# + a@ Returns the device name of this SYCL [code]#device#. + +a@ +[source] +---- +info::device::vendor +---- + + @ [.code]#std::string# + a@ Returns the vendor of this SYCL [code]#device#. + +a@ +[source] +---- +info::device::driver_version +---- + + @ [.code]#std::string# + a@ Returns a backend-defined driver version as a [code]#std::string#. + If using the OpenCL backend, the returned value represents the + OpenCL software driver version in the form: major_number.minor_number. + +a@ +[source] +---- +info::device::profile +---- + + @ [.code]#std::string# + a@ Deprecated in SYCL 2020. Only supported when using the OpenCL backend + (see <>). + +The value returned can be one of the following strings: +-- + * FULL_PROFILE - if the device supports the OpenCL specification + (functionality defined as part of the core specification and does not + require any extensions to be supported). + * EMBEDDED_PROFILE - if the device supports the OpenCL embedded profile. +-- + +a@ +[source] +---- +info::device::version +---- + + @ [.code]#std::string# + a@ Returns the SYCL version as a [code]#std::string# in the form: + [code]#.#. + +a@ +[source] +---- +info::device::backend_version +---- + + @ [.code]#std::string# + a@ Returns a string describing the version of the <> associated with + the <>. The possible values are specified in the <> + specification of the <> associated with the <>. + +a@ +[source] +---- +info::device::aspects +---- + + @ [.code]#std::vector# + a@ Returns a [code]#std::vector# of <> values supported by this + SYCL [code]#device#. + +a@ +[source] +---- +info::device::extensions +---- + + @ [.code]#std::vector# + a@ Deprecated, use [code]#info::device::aspects# instead. +-- +Returns a [code]#std::vector# of extension names (the extension names +do not contain any spaces) supported by this SYCL [code]#device#. The +extension names returned can be vendor supported extension names and one or +more of the following Khronos approved extension names: + + * [code]#cl_khr_int64_base_atomics# + * [code]#cl_khr_int64_extended_atomics# + * [code]#cl_khr_3d_image_writes# + * [code]#cl_khr_fp16# + * [code]#cl_khr_gl_sharing# + * [code]#cl_khr_gl_event# + * [code]#cl_khr_d3d10_sharing# + * [code]#cl_khr_dx9_media_sharing# + * [code]#cl_khr_d3d11_sharing# + * [code]#cl_khr_depth_images# + * [code]#cl_khr_gl_depth_images# + * [code]#cl_khr_gl_msaa_sharing# + * [code]#cl_khr_image2d_from_buffer# + * [code]#cl_khr_initialize_memory# + * [code]#cl_khr_context_abort# + * [code]#cl_khr_spir# + +If this SYCL [code]#device# is an OpenCL device then following approved +Khronos extension names must be returned by all device that support OpenCL C +1.2: + + * [code]#cl_khr_global_int32_base_atomics# + * [code]#cl_khr_global_int32_extended_atomics# + * [code]#cl_khr_local_int32_base_atomics# + * [code]#cl_khr_local_int32_extended_atomics# + * [code]#cl_khr_byte_addressable_store# + * [code]#cl_khr_fp64# (for backward compatibility if double precision + is supported) + +Please refer to the OpenCL 1.2 Extension Specification for a detailed +description of these extensions. +-- + +a@ +[source] +---- +info::device::printf_buffer_size +---- + + @ [.code]#size_t# + a@ Deprecated in SYCL 2020. + +Returns the maximum size of the internal buffer that holds the output of +[code]#printf# calls from a kernel. The minimum value is 1 MB if +[code]#info::device::profile# returns true for this SYCL [code]#device#. + +a@ +[source] +---- +info::device::preferred_interop_user_sync +---- + + @ [.code]#bool# + a@ Deprecated in SYCL 2020. Only supported when using the OpenCL backend + (see <>). + +Returns true if the preference for this SYCL [code]#device# is for the user to +be responsible for synchronization, when sharing memory objects between OpenCL +and other APIs such as DirectX, false if the device/implementation has a +performant path for performing synchronization of memory object shared between +OpenCL and other APIs such as DirectX. + +a@ +[source] +---- +info::device::parent_device +---- + + @ [.code]#device# + a@ Returns the parent SYCL [code]#device# to which this sub-device is a child if this is a sub-device. + Must throw an [code]#exception# with the [code]#errc::invalid# error code if this SYCL [code]#device# is not a sub device. + +a@ +[source] +---- +info::device::partition_max_sub_devices +---- + + @ [.code]#uint32_t# + a@ Returns the maximum number of sub-devices that can be created when this SYCL [code]#device# is partitioned. The value returned cannot exceed the value returned by [code]#info::device::device_max_compute_units#. + +a@ +[source] +---- +info::device::partition_properties +---- + + @ [.code]#std::vector# + a@ Returns the partition properties supported by this SYCL [code]#device;# a + vector of [code]#info::partition_property#. An element is returned in + this vector only if the device can be partitioned into at least two sub + devices along that partition property. + +a@ +[source] +---- +info::device::partition_affinity_domains +---- + + @ [.code]#std::vector# + a@ Returns a [code]#std::vector# of the partition affinity domains + supported by this SYCL [code]#device# when partitioning with + [code]#info::partition_property::partition_by_affinity_domain#. + An element is returned in this vector only if the device can be + partitioned into at least two sub devices along that affinity domain. + +a@ +[source] +---- +info::device::partition_type_property +---- + + @ [.code]#info::partition_property# + a@ Returns the partition property of this SYCL [code]#device#. If this SYCL [code]#device# is not a sub device then the return value must be [code]#info::partition_property::no_partition#, otherwise it must be one of the following values: +-- + * [code]#info::partition_property::partition_equally# + * [code]#info::partition_property::partition_by_counts# + * [code]#info::partition_property::partition_by_affinity_domain# +-- + +a@ +[source] +---- +info::device::partition_type_affinity_domain +---- + + @ [.code]#info::partition_affinity_domain# + a@ Returns the partition affinity domain of this SYCL [code]#device#. If this SYCL [code]#device# is not a sub device or the sub device was not partitioned with [code]#info::partition_type::partition_by_affinity_domain# then the return value must be [code]#info::partition_affinity_domain::not_applicable#, otherwise it must be one of the following values: +-- + * [code]#info::partition_affinity_domain::numa# + * [code]#info::partition_affinity_domain::L4_cache# + * [code]#info::partition_affinity_domain::L3_cache# + * [code]#info::partition_affinity_domain::L2_cache# + * [code]#info::partition_affinity_domain::L1_cache# +-- + +|==== + + + +[[sec:device-aspects]] +==== Device aspects + +Every SYCL <> has an associated set of <> which +identify characteristics of the [code]#device#. Aspects are defined via +the [code]#enum class aspect# enumeration: + +[source,,linenums] +---- +include::{header_dir}/deviceEnumClassAspect.h[lines=4..-1] +---- + +SYCL applications can query the aspects for a [code]#device# via +[code]#device::has()# in order to determine whether the [code]#device# +supports any optional features. <> lists the aspects that +are defined in the <> and tells which optional features correspond +to each. Backends and extensions may provide additional aspects and additional +optional device features. If so, the <> specification document or the +extension document describes them. + +[[table.device.aspect]] +.Device aspects defined by the <> +[width="100%",options="header",separator="@",cols="50%,50%"] +|==== +@ Aspect @ Description +a@ +[source] +---- +aspect::cpu +---- + a@ A device that runs on a CPU. Devices with this [code]#aspect# have + device type [code]#info::device_type::cpu#. + +a@ +[source] +---- +aspect::gpu +---- + a@ A device that can also be used to accelerate a 3D graphics API. Devices + with this [code]#aspect# have device type + [code]#info::device_type::gpu#. + +a@ +[source] +---- +aspect::accelerator +---- + a@ A dedicated accelerator device, usually using a peripheral interconnect for + communication. Devices with this [code]#aspect# have device type + [code]#info::device_type::accelerator#. + +a@ +[source] +---- +aspect::custom +---- + a@ A dedicated accelerator that can use the SYCL API, but programmable kernels + cannot be dispatched to the device, only fixed functionality is available. + See <>. Devices with this + [code]#aspect# have device type [code]#info::device_type::custom#. + +a@ +[source] +---- +aspect::emulated +---- + a@ Indicates that the device is somehow emulated. A device with this aspect + is not intended for performance, and instead will generally have another + purpose such as emulation or profiling. The precise definition of this + aspect is left open to the SYCL implementation. + +[NOTE] +==== +As an example, a vendor might support both a hardware FPGA device and a +software emulated FPGA, where the emulated FPGA has all the same features +as the hardware one but runs more slowly and can provide additional profiling +or diagnostic information. In such a case, an application's +<> can use [code]#aspect::emulated# to distinguish the two. +==== + +a@ +[source] +---- +aspect::host_debuggable +---- + a@ Indicates that <> running on this device can be debugged + using standard debuggers that are normally available on the host system + where the SYCL implementation resides. The precise definition of this + aspect is left open to the SYCL implementation. + +a@ +[source] +---- +aspect::fp16 +---- + a@ Indicates that kernels submitted to the device may use the + [code]#sycl::half# data type. + +a@ +[source] +---- +aspect::fp64 +---- + a@ Indicates that kernels submitted to the device may use the [code]#double# + data type. + +a@ +[source] +---- +aspect::atomic64 +---- + a@ Indicates that kernels submitted to the device may perform 64-bit atomic + operations. + +a@ +[source] +---- +aspect::image +---- + a@ Indicates that the device supports <>. + +a@ +[source] +---- +aspect::online_compiler +---- + a@ Indicates that the device supports online compilation of device code. + <> that have this aspect support the [code]#build()# + and [code]#compile()# functions defined in <>. + +a@ +[source] +---- +aspect::online_linker +---- + a@ Indicates that the device supports online linking of device code. + <> that have this aspect support the [code]#link()# + functions defined in <>. All + <> that have this aspect also have + [code]#aspect::online_compiler#. + +a@ +[source] +---- +aspect::queue_profiling +---- + a@ Indicates that the device supports queue profiling via [code]#property::queue::enable_profiling#. + +a@ +[source] +---- +aspect::usm_device_allocations +---- + a@ Indicates that the device supports explicit USM allocations as described + in <>. + +a@ +[source] +---- +aspect::usm_host_allocations +---- + a@ Indicates that the device can access USM memory allocated via + [code]#usm::alloc::host#. The device only + supports atomic modification of a host allocation if + [code]#aspect::usm_atomic_host_allocations# is also supported. + (See <>.) + +a@ +[source] +---- +aspect::usm_atomic_host_allocations +---- + a@ Indicates that the device supports USM memory allocated + via [code]#usm::alloc::host#. The host and this device may + concurrently access and atomically modify host allocations. (See <>.) + + +a@ +[source] +---- +aspect::usm_shared_allocations +---- + a@ Indicates that the device supports USM memory allocated via + [code]#usm::alloc::shared# on the same device. Concurrent access + and atomic modification of a shared allocation is only supported + if [code]#aspect::usm_atomic_shared_allocations# is also supported. + (See <>.) + +a@ +[source] +---- +aspect::usm_atomic_shared_allocations +---- + a@ Indicates that the device supports USM memory allocated via + [code]#usm::alloc::shared#. The host and other devices in the same + context that also support this capability may concurrently access + and atomically modify shared allocations. The allocation is free + to migrate between the host and the appropriate devices. (See <>.) + +a@ +[source] +---- +aspect::usm_system_allocations +---- + a@ Indicates that the system allocator may be used instead of SYCL USM + allocation mechanisms for [code]#usm::alloc::shared# allocations on + this device. (See <>.) + +|==== + +The implementation also provides two traits that the application can use to +query aspects at compilation time. The trait [code]#any_device_has# +inherits from [code]#std::true_type# if the compilation environment supports +any device which has the specified aspect, and it inherits from +[code]#std::false_type# if no device has the aspect. The trait +[code]#all_devices_have# inherits from [code]#std::true_type# if all +devices supported by the compilation environment have the specified aspect, +and it inherits from [code]#std::false_type# if any device does not have the +aspect. + +[source,,linenums] +---- +include::{header_dir}/aspectTraits.h[lines=4..-1] +---- + +Applications can use these traits to reduce their code size. The following +example demonstrates one way to use these traits to avoid instantiating a +templated kernel for device features that are not supported by any device. + +[source,,linenums] +---- +include::{code_dir}/aspectTraitExample.cpp[lines=4..-1] +---- + +The kernel function [code]#MyKernel# is templated to use a different +algorithm depending on whether the device has the aspect [code]#aspect::fp16#, +and the call to [code]#dev.has()# chooses the kernel function instantiation +that matches the device's capabilities. However, the use of +[code]#any_device_has_v# and [code]#all_devices_have_v# entirely avoid +useless instantiations of the kernel function. For example, when the +compilation environment does not support any devices with [code]#aspect::fp16#, +[code]#any_device_has_v# is [code]#false#, and the kernel +function is never instantiated with support for the [code]#sycl::half# type. + +[NOTE] +==== +Like any trait, the values of [code]#any_device_has_v# and +[code]#all_devices_have_v# have a uniform value across all parts of a SYCL +application. If an implementation uses <>, all compiler passes define a +particular aspect's specialization of the traits the same way, regardless of +whether that compiler pass' device supports the aspect. Thus, +[code]#any_device_has# and [code]#all_devices_have# cannot be used to determine +whether any particular device supports an aspect. Instead, applications must +use [code]#device::has()# or [code]#platform::has()# for this. +==== + +[NOTE] +==== +An implementation could choose to provide command line options which affect the +set of devices that it supports. If so, those command line options would also +affect these traits. For example, if an implementation provides a command line +option that disables [code]#aspect::accelerator# devices, the trait +[code]#any_device_has_v# would be [code]#false# when that +command line option was specified. +==== + +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% end device_class %%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +[[sec:interface.queue.class]] +=== Queue class + +// \input{queue_class} +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% begin queue_class %%%%%%%%%%%%%%%%%%%%%%%%%%%% + +The SYCL [code]#queue# class encapsulates a single SYCL queue which +schedules kernels on a SYCL device. + +A SYCL [code]#queue# can be used to submit <> to be +executed by the <> using the [code]#submit# member +function. + +All member functions of the [code]#queue# class are synchronous and errors +are handled by throwing synchronous SYCL exceptions. The [code]#submit# +member function schedules <> asynchronously, so any errors +in the submission of a <> are handled by throwing synchronous +SYCL exceptions. Any exceptions from the <> after it has +been submitted are handled by passing <> at specific times to an +<>, as described in <>. + +A SYCL [code]#queue# can wait for all <> that it has +submitted by calling [code]#wait# or [code]#wait_and_throw#. + +The default constructor of the SYCL [code]#queue# class will +construct a queue based on the SYCL [code]#device# returned from +the [code]#default_selector_v# (see <>). +All other constructors construct a queue as determined by the +parameters provided. All constructors will implicitly construct a SYCL +[code]#platform#, [code]#device# and [code]#context# in order to +facilitate the construction of the queue. + +Each constructor takes as the last +parameter an optional SYCL [code]#property_list# to provide properties to +the SYCL [code]#queue#. + +The SYCL [code]#queue# class provides the common reference semantics +(see <>). + + +==== Queue interface + +A synopsis of the SYCL [code]#queue# class is provided below. The +constructors and member functions of the SYCL [code]#queue# class are +listed in <> and <> +respectively. The additional common special member functions and common member +functions are listed in <> in +<> and +<>, respectively. + +Some queue member functions are shortcuts to member functions of the [code]#handler# class. +These are listed in <>. + +// Interface for class: queue +[source,,linenums] +---- +include::{header_dir}/queue.h[lines=4..-1] +---- + + +[[table.constructors.queue]] +.Constructors of the [code]#queue# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +explicit queue(const property_list &propList = {}) +---- +a@ Constructs a SYCL [code]#queue# instance using the device +constructed from the [code]#default_selector_v#. +Zero or more properties can +be provided to the constructed SYCL [code]#queue# via an instance of +[code]#property_list#. + +a@ +[source] +---- +explicit queue(const async_handler &asyncHandler, + const property_list &propList = {}) +---- +a@ Constructs a SYCL [code]#queue# instance with an +[code]#async_handler# using the device constructed from the +[code]#default_selector_v#. +Zero or more properties can be provided to the +constructed SYCL [code]#queue# via an instance of +[code]#property_list#. + +a@ +[source] +---- +template +explicit queue(const DeviceSelector &deviceSelector, + const property_list &propList = {}) +---- +a@ Constructs a SYCL [code]#queue# instance using the device +returned by the <> provided. Zero or +more properties can be provided to the constructed SYCL +[code]#queue# via an instance of +[code]#property_list#. + +a@ +[source] +---- +template +explicit queue(const DeviceSelector &deviceSelector, + const async_handler &asyncHandler, + const property_list &propList = {}) +---- +a@ Constructs a SYCL [code]#queue# instance with an +[code]#async_handler# using the device returned by the +<> provided. Zero or more properties +can be provided to the constructed SYCL [code]#queue# via +an instance of [code]#property_list#. + +a@ +[source] +---- +explicit queue(const device &syclDevice, + const property_list &propList = {}) +---- +a@ Constructs a SYCL [code]#queue# instance using the [code]#syclDevice# provided. Zero or more properties can be provided to the +constructed SYCL [code]#queue# via an instance of [code]#property_list#. + +a@ +[source] +---- +explicit queue(const device &syclDevice, + const async_handler &asyncHandler, + const property_list &propList = {}) +---- +a@ Constructs a SYCL [code]#queue# instance with an [code]#async_handler# using the [code]#syclDevice# provided. Zero or more +properties can be provided to the constructed SYCL [code]#queue# +via an instance of [code]#property_list#. + +a@ +[source] +---- +template +explicit queue(const context &syclContext, + const DeviceSelector &deviceSelector, + const property_list &propList = {}) +---- +a@ Constructs a SYCL [code]#queue# instance that is associated +with the [code]#syclContext# provided, using the device +returned by the <> provided. Must +throw an [code]#exception# with the +[code]#errc::invalid# error code if +[code]#syclContext# does not encapsulate the SYCL +[code]#device# returned by +[code]#deviceSelector#. Zero or more properties can be +provided to the constructed SYCL [code]#queue# via an +instance of [code]#property_list#. + +a@ +[source] +---- +template +explicit queue(const context &syclContext, + const DeviceSelector &deviceSelector, + const async_handler &asyncHandler, + const property_list &propList = {}) +---- +a@ Constructs a SYCL [code]#queue# instance with an +[code]#async_handler# that is associated with the +[code]#syclContext# provided, using the device returned by +the <> provided. Must throw an +[code]#exception# with the +[code]#errc::invalid# error code if +[code]#syclContext# does not encapsulate the SYCL +[code]#device# returned by +[code]#deviceSelector#. Zero or more properties can be +provided to the constructed SYCL [code]#queue# via an +instance of [code]#property_list#. + +a@ +[source] +---- +explicit queue(const context &syclContext, + const device &syclDevice, + const property_list &propList = {}) +---- +a@ Constructs a SYCL [code]#queue# instance using the [code]#syclDevice# provided, and associated with the +[code]#syclContext# provided. Must throw an +[code]#exception# with the +[code]#errc::invalid# error code if +[code]#syclContext# does not encapsulate the SYCL +[code]#device# [code]#syclDevice#. Zero or more +properties can be provided to the constructed SYCL [code]#queue# +via an instance of [code]#property_list#. + +a@ +[source] +---- +explicit queue(const context &syclContext, + const device &syclDevice, + const async_handler &asyncHandler, + const property_list &propList = {}) +---- +a@ Constructs a SYCL [code]#queue# instance with an [code]#async_handler# using the [code]#syclDevice# provided, and +associated with the [code]#syclContext# provided. Must throw an +[code]#exception# with the +[code]#errc::invalid# error code if +[code]#syclContext# does not encapsulate the SYCL +[code]#device# [code]#syclDevice#. Zero or more +properties can be provided to the constructed SYCL [code]#queue# via +an instance of [code]#property_list#. + +|==== + + + +[[table.members.queue]] +.Member functions for [code]#queue# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +backend get_backend() const noexcept +---- +a@ Returns a [code]#backend# identifying the <> associated +with this [code]#queue#. + +a@ +[source] +---- +context get_context () const +---- +a@ Returns the SYCL queue's context. +Reports errors using SYCL exception classes. +The value returned must be equal to that returned by [code]#get_info()#. + +a@ +[source] +---- +device get_device () const +---- +a@ Returns the SYCL device the queue is associated with. +Reports errors using SYCL exception classes. +The value returned must be equal to that returned by [code]#get_info()#. + +a@ +[source] +---- +bool is_in_order() const +---- +a@ Returns true if the SYCL [code]#queue# was created with the +[code]#in_order# property. +Equivalent to [code]#has_property()#. + +a@ +[source] +---- +void wait() +---- +a@ Performs a blocking wait for the completion of all enqueued tasks +in the queue. Synchronous errors will be reported through SYCL +exceptions. + +a@ +[source] +---- +void wait_and_throw () +---- +a@ Performs a blocking wait for the completion of all enqueued tasks +in the queue. Synchronous errors will be reported through SYCL +exceptions. Any unconsumed <> will be passed to the +<> associated with the queue or enclosing context. +If no user defined [code]#async_handler# is associated with +the queue or enclosing context, then an implementation-defined +default <> is called to handle any errors, as +described in <>. + +a@ +[source] +---- +void throw_asynchronous () +---- +a@ Checks to see if any unconsumed <> have been produced by +the queue and if so reports them by passing them to the +<> associated with the queue or enclosing context. +If no user defined [code]#async_handler# is associated with +the queue or enclosing context, then an implementation-defined +default <> is called to handle any errors, as +described in <>. + +a@ +[source] +---- +template +typename param::return_type get_info() const +---- + a@ Queries this SYCL [code]#queue# for information requested by the + template parameter [code]#param#. + The type alias [code]#param::return_type# must be defined in + accordance with the info parameters in <> to + facilitate returning the type associated with the [code]#param# + parameter. + +a@ +[source] +---- +template +event submit(T cgf) +---- +a@ Submit a <> to the queue, in order to be scheduled +for execution on the device. + +a@ +[source] +---- +template +event submit(T cgf, queue & secondaryQueue) +---- +a@ Submit a <> to the queue, in order to be scheduled +for execution on the device. On a kernel error, this <> +is then scheduled for execution on the secondary queue. Returns an +event, which corresponds to the queue the <> +is being enqueued on. + +a@ +[source] +---- +template +typename param::return_type get_backend_info() const +---- +a@ Queries this SYCL [code]#queue# for <>-specific information +requested by the template parameter [code]#param#. + The type alias [code]#param::return_type# must be defined in + accordance with the <> specification. + Must throw an [code]#exception# with the [code]#errc::backend_mismatch# + error code if the <> that corresponds with [code]#param# is different + from the <> that is associated with this [code]#queue#. + +|==== + + +[[sec:queue-shortcuts]] +==== Queue shortcut functions + +Queue shortcut functions are member functions of the [code]#queue# class +that implicitly create a command group with an implicit command group [code]#handler# +consisting of a single command, +a call to the member function of the handler object with the same signature +(e.g. [code]#queue::single_task# will call [code]#handler::single_task# with the same arguments), +and submit the command group. +The main signature difference comes from the return type: +member functions of the [code]#handler# return [code]#void#, +whereas corresponding queue shortcut functions return an [code]#event# object +that represents the submitted command group. +Queue shortcuts can additionally take a list of events to wait on, +as if passing the event list to [code]#handler::depends_on# for the implicit command group. + +The full list of queue shortcuts is defined in <>. +The list of handler member functions is defined in <>. + +It is not allowed to capture accessors into the implicitly created command group. +If a queue shortcut function launches a kernel +(via [code]#single_task# or [code]#parallel_for#), +only USM pointers are allowed inside such kernels. +However, queue shortcuts that perform non-kernel operations +can be provided with a valid placeholder accessor as an argument. +In that case there is an additional step performed: +the implicit command group [code]#handler# calls [code]#handler::require# +on each accessor passed in as a function argument. + +An example of using queue shortcuts is shown below. + +[[example.queue.shortcuts]] +[source,,linenums] +---- +include::{code_dir}/queueShortcuts.cpp[lines=4..-1] +---- + +[[table.queue.shortcuts]] +.Queue shortcut functions +[width="100%",options="header",separator="@",cols="80%,20%"] +|==== +@ Function definition @ Function type +a@ +[source] +---- +template +event single_task(const KernelType &kernelFunc) +---- +a@ <> +a@ +[source] +---- +template +event single_task(event depEvent, + const KernelType &kernelFunc) +---- +a@ <> +a@ +[source] +---- +template +event single_task(const std::vector &depEvents, + const KernelType &kernelFunc) +---- +a@ <> +a@ +[source] +---- +template +event parallel_for(range numWorkItems, + Rest&&... rest) +---- +a@ <> +a@ +[source] +---- +template +event parallel_for(range numWorkItems, + event depEvent, + Rest&&... rest) +---- +a@ <> +a@ +[source] +---- +template +event parallel_for(range numWorkItems, + const std::vector &depEvents, + Rest&&... rest) +---- +a@ <> +a@ +[source] +---- +template +event parallel_for(nd_range executionRange, + Rest&&... rest) +---- +a@ <> +a@ +[source] +---- +template +event parallel_for(nd_range executionRange, + event depEvent, + Rest&&... rest) +---- +a@ <> +a@ +[source] +---- +template +event parallel_for(nd_range executionRange, + const std::vector &depEvents, + Rest&&... rest) +---- +a@ <> +a@ +[source] +---- +event memcpy(void* dest, const void* src, size_t numBytes) +---- +a@ <> +a@ +[source] +---- +event memcpy(void* dest, const void* src, size_t numBytes, + event depEvent) +---- +a@ <> +a@ +[source] +---- +event memcpy(void* dest, const void* src, size_t numBytes, + const std::vector &depEvents) +---- +a@ <> +a@ +[source] +---- +template +event copy(T* dest, const T* src, size_t count) +---- +a@ <> +a@ +[source] +---- +template +event copy(T* dest, const T* src, size_t count, + event depEvent) +---- +a@ <> +a@ +[source] +---- +template +event copy(T* dest, const T* src, size_t count, + const std::vector &depEvents) +---- +a@ <> +a@ +[source] +---- +event memset(void* ptr, int value, size_t numBytes) +---- +a@ <> +a@ +[source] +---- +event memset(void* ptr, int value, size_t numBytes, + event depEvent) +---- +a@ <> +a@ +[source] +---- +event memset(void* ptr, int value, size_t numBytes, + const std::vector &depEvents) +---- +a@ <> +a@ +[source] +---- +template +event fill(void* ptr, const T& pattern, size_t count) +---- +a@ <> +a@ +[source] +---- +template +event fill(void* ptr, const T& pattern, size_t count, + event depEvent) +---- +a@ <> +a@ +[source] +---- +template +event fill(void* ptr, const T& pattern, size_t count, + const std::vector &depEvents) +---- +a@ <> +a@ +[source] +---- +event prefetch(void* ptr, size_t numBytes) +---- +a@ <> +a@ +[source] +---- +event prefetch(void* ptr, size_t numBytes, + event depEvent) +---- +a@ <> +a@ +[source] +---- +event prefetch(void* ptr, size_t numBytes, + const std::vector &depEvents) +---- +a@ <> +a@ +[source] +---- +event mem_advise(void* ptr, size_t numBytes, int advice) +---- +a@ <> +a@ +[source] +---- +event mem_advise(void* ptr, size_t numBytes, int advice, + event depEvent) +---- +a@ <> +a@ +[source] +---- +event mem_advise(void* ptr, size_t numBytes, int advice, + const std::vector &depEvents) +---- +a@ <> +a@ +[source] +---- +template +event copy(accessor src, + std::shared_ptr dest); +---- +a@ <> +a@ +[source] +---- +template +event +copy(std::shared_ptr src, + accessor dest); +---- +a@ <> +a@ +[source] +---- +template +event copy(accessor src, + T_dest *dest); +---- +a@ <> +a@ +[source] +---- +template +event +copy(const T_src *src, + accessor dest); +---- +a@ <> +a@ +[source] +---- +template +event copy( + accessor src, + accessor dest); +---- +a@ <> +a@ +[source] +---- + template + event update_host(accessor acc); +---- +a@ <> +a@ +[source] +---- + template + event fill(accessor dest, const T &src); +---- +a@ <> + +|==== + + +==== Queue information descriptors + +A <> can be queried for information using the [code]#get_info# +member function of the [code]#queue# class, specifying one of the info +parameters in [code]#info::queue#. Every <> +must produce a valid value for each info parameter. The possible values for +each info parameter and any restriction are defined in the specification of +the <> associated with the <>. All info parameters in +[code]#info::queue# are specified in <> and the synopsis +for [code]#info::queue# is described in <>. + +[[table.queue.info]] +.Queue information descriptors +[width="100%",options="header",separator="@",cols="37%,19%,44%"] +|==== +@ Queue Descriptors @ Return type @ Description +a@ +[source] +---- +info::queue::context +---- + + @ [.code]#context# + a@ Returns the SYCL [code]#context# associated with this SYCL [code]#queue#. + +a@ +[source] +---- +info::queue::device +---- + + @ [.code]#device# + a@ Returns the SYCL <> associated with this SYCL [code]#queue#. + +|==== + + +[[sec:queue-properties]] +==== Queue properties + +The properties that can be provided when constructing the SYCL +[code]#queue# class are describe in +<>. + + +[[table.properties.queue]] +.Properties supported by the SYCL [code]#queue# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Property @ Description +a@ +[source] +---- +property::queue::enable_profiling +---- + a@ The [code]#enable_profiling# property adds the requirement + that the <> must capture profiling information for + the <> that are submitted from this SYCL + [code]#queue# and provide said information via the SYCL + [code]#event# class [code]#get_profiling_info# member + function, if the associated SYCL [code]#device# has + [code]#aspect::queue_profiling#. + +a@ +[source] +---- +property::queue::in_order +---- + a@ The [code]#in_order# property adds the requirement that + the SYCL [code]#queue# provides in-order semantics where + tasks are executed in the order in which they are submitted. + Tasks submitted in this fashion can be viewed as having an + implicit dependence on the previously submitted operation. + +|==== + + +The constructors of the [code]#queue# [code]#property# +classes are listed in <>. + + +[[table.constructors.properties.queue]] +.Constructors of the [code]#queue# [code]#property# classes +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +property::queue::enable_profiling::enable_profiling() +---- + a@ Constructs a SYCL [code]#enable_profiling# property instance. + +a@ +[source] +---- +property::queue::in_order::in_order() +---- + a@ Constructs a SYCL [code]#in_order# property instance. + +|==== + + + +[[sec:interface.queue.errors]] +==== Queue error handling + +Queue errors come in two forms: + + * *Synchronous Errors* are those that we would expect to be + reported directly at the point of waiting on an event, and hence waiting + for a queue to complete, as well as any immediate errors reported by + enqueuing work onto a queue. Such errors are reported through {cpp} + exceptions. + * <> are those that are produced or detected after + associated host API calls have returned (so can't be thrown as + exceptions by the API call), and that are handled by an + <> through which the errors are reported. Handling of + asynchronous errors from a queue occurs at specific times, as described + by <>. + +Note that if there are <> to be processed when a queue +is destructed, the handler is called and +this might delay or block the destruction, according to the behavior +of the handler. + + +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% end queue_class %%%%%%%%%%%%%%%%%%%%%%%%%%%% + +[[sec:interface.event]] +=== Event class + +An <> in SYCL is an object that represents the status of an operation +that is being executed by the SYCL runtime. + +Typically in SYCL, data dependency and execution order is handled implicitly by +the SYCL runtime. However, in some circumstances developers want fine grain control +of the execution, or want to retrieve properties of a command that is running. + +Note that, although an event represents the status of a particular operation, +the dependencies of a certain event can be used to keep track of multiple steps +required to synchronize said operation. + +A SYCL event is returned by the submission of a <>. +The dependencies of the event returned via the submission of the command group +are the implementation-defined commands associated with the <> +execution. + +The SYCL [code]#event# class provides the common reference semantics +(see <>). + +The constructors and member functions of the SYCL [code]#event# class +are listed in <> and +<>, respectively. The additional common special +member functions and common member functions are listed in +<> and +<>, respectively. + +// Interface for class: event.h +[source,,linenums] +---- +include::{header_dir}/event.h[lines=4..-1] +---- + + +[[table.constructors.event]] +.Constructors of the [code]#event# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +event () +---- + a@ Constructs an [code]#event# that is immediately ready. The + [code]#event# has no dependencies and no associated commands. + Waiting on this [code]#event# will return immediately and querying + its status will return [code]#info::event_command_status::complete#. + +The event is constructed as though it was created from a default-constructed +[code]#queue#. Therefore, its backend is the same as the backend from the +default device. + +|==== + + + +[[table.members.event]] +.Member functions for the [code]#event# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +backend get_backend() const noexcept +---- + a@ Returns a [code]#backend# identifying the <> associated + with this [code]#event#. + +a@ +[source] +---- +std::vector get_wait_list() +---- + a@ Return the list of events that this event waits for in + the dependence graph. Only direct dependencies are returned, + and not transitive dependencies that direct dependencies wait on. + Whether already completed events are included in the returned list + is implementation-defined. + +a@ +[source] +---- +void wait() +---- + a@ Wait for the event and the command associated with + it to complete. + +a@ +[source] +---- +void wait_and_throw() +---- + a@ Wait for the event and the command associated with + it to complete. + +Any unconsumed <> from any context that the event +was waiting on executions from will be passed to the +<> associated with the context. +If no user defined [code]#async_handler# is associated with +the context, then an implementation-defined +default <> is called to handle any errors, as +described in <>. + +a@ +[source] +---- +static void wait( + const std::vector &eventList) +---- + a@ Synchronously wait on a list of events. + +a@ +[source] +---- +static void wait_and_throw( + const std::vector &eventList) +---- + a@ Synchronously wait on a list of events. + +Any unconsumed <> from any context that the event +was waiting on executions from will be passed to the +<> associated with the context. +If no user defined [code]#async_handler# is associated with +the context, then an implementation-defined +default <> is called to handle any errors, as +described in <>. + +a@ +[source] +---- +template typename param::return_type get_info() const +---- + a@ Queries this SYCL [code]#event# for information requested by the + template parameter [code]#param#. + The type alias [code]#param::return_type# must be defined in + accordance with the info parameters in <> to + facilitate returning the type associated with the [code]#param# + parameter. + +a@ +[source] +---- +template +typename param::return_type get_backend_info() const +---- + a@ Queries this SYCL [code]#event# for <>-specific information + requested by the template parameter [code]#param#. + The type alias [code]#param::return_type# must be defined in + accordance with the <> specification. + Must throw an [code]#exception# with the [code]#errc::backend_mismatch# + error code if the <> that corresponds with [code]#param# is different + from the <> that is associated with this [code]#event#. + +a@ +[source] +---- +template +typename param::return_type get_profiling_info () const +---- + a@ Queries this SYCL [code]#event# for profiling information requested + by the parameter [code]#param#. If the requested profiling information + is unavailable when [code]#get_profiling_info# is called due to + incompletion of <> associated with the [code]#event#, + then the call to [code]#get_profiling_info# will block until + the requested profiling information is available. An example is asking for + [code]#info::event_profiling::command_end# when the associated + <> action has yet to finish execution. + Calls to [code]#get_profiling_info# must throw an [code]#exception# + with the [code]#errc::invalid# error code if the SYCL + [code]#queue# which submitted the <> this + SYCL [code]#event# is associated with was not constructed with + the [code]#property::queue::enable_profiling# property. + The type alias [code]#param::return_type# must be defined in + accordance with the info parameters in + <> to facilitate returning the type + associated with the [code]#param# parameter. + +|==== + + +==== Event information and profiling descriptors + +An <> can be queried for information using the [code]#get_info# +member function of the [code]#event# class, specifying one of the info +parameters in [code]#info::event#. Every <> +must produce a valid value for each info parameter. The possible values for +each info parameter and any restrictions are defined in the specification +of the <> associated with the <>. All info parameters in +[code]#info::event# are specified in <> and the synopsis +for [code]#info::event# is described in <>. + + +[[table.event.info]] +.Event class information descriptors +[width="100%",options="header",separator="@",cols="37%,19%,44%"] +|==== +@ Event Descriptors @ Return type @ Description +a@ +[source] +---- +info::event::command_execution_status +---- + + @ [.code]#info::event_command_status# + a@ Returns the event status of the command group and contained action + (e.g. kernel invocation) associated with this SYCL [code]#event#. + +|==== + + +An <> can be queried for profiling information using the +[code]#get_profiling_info# member function of the [code]#event# class, +specifying one of the profiling info parameters enumerated in +[code]#info::event_profiling#. Every <> must produce a valid value +for each info parameter. The possible values for each info parameter and +any restrictions are defined in the specification of the <> +associated with the <>. All info parameters in +[code]#info::event_profiling# are specified in <> +and the synopsis for [code]#info::event_profiling# is described in +<>. + + +[[table.event.profilinginfo]] +.Profiling information descriptors for the SYCL [code]#event# class +[width="100%",options="header",separator="@",cols="37%,19%,44%"] +|==== +@ Event information profiling descriptor @ Return type @ Description +a@ +[source] +---- +info::event_profiling::command_submit +---- + + @ [.code]#uint64_t# + a@ Returns an implementation-defined 64-bit value describing the time in + nanoseconds when the associated <> was submitted to + the [code]#queue#. + +a@ +[source] +---- +info::event_profiling::command_start +---- + + @ [.code]#uint64_t# + a@ Returns an implementation-defined 64-bit value describing the time in + nanoseconds when the action associated with the <> + (e.g. kernel invocation) started executing on the device. + +a@ +[source] +---- +info::event_profiling::command_end +---- + + @ [.code]#uint64_t# + a@ Returns an implementation-defined 64-bit value describing the time in + nanoseconds when the action associated with the <> + (e.g. kernel invocation) finished executing on the device. + + +|==== + + + +[[sec:data.access.and.storage]] +== Data access and storage in SYCL + +In SYCL, when using <> and <>, +data storage and access are handled by separate classes. +<> and <> handle +storage and ownership of the data, whereas <> handle access to +the data. +Buffers and images in SYCL can be bound to more than one device or context, +including across different <>. +They also handle ownership of the +data, while allowing exception handling for blocking +and non-blocking data transfers. Accessors manage data transfers between the host +and all of the devices in the system, as well as tracking of data dependencies. + +When using <> allocations, data storage is managed by USM allocation functions, and +data access is via pointers. See <> for greater detail. + +=== Host allocation + +A <> may need to allocate temporary objects on the host +to handle some operations (such as copying data from one context to +another). +Allocation on the host is managed using an allocator object, following the +standard {cpp} allocator class definition. +The default allocator for memory objects is implementation-defined, +but the user can supply their own allocator class. + +[source,,linenums] +---- +{ + buffer > b(d); +} +---- + +When an allocator returns a [code]#nullptr#, the runtime cannot allocate data on the +host. Note that in this case the runtime will raise an error if it requires +host memory but it is not available (e.g when moving data across <> +contexts). + +The definition of allocators extends the current functionality of SYCL, +ensuring that users can define allocator functions for specific hardware or +certain complex shared memory mechanisms (e.g. NUMA), and improves +interoperability with STL-based libraries (e.g, Intel's TBB provides an +allocator). + + +[[subsec:default.allocators]] +==== Default allocators + +A default allocator is always defined by the implementation, and it is +guaranteed to return non-[code]#nullptr# and new memory positions every call. +The default allocator for const buffers will remove the const-ness of the +type (therefore, the default allocator for a buffer of type [code]#const int# +will be an [code]#Allocator)#. +This implies that host <> will not synchronize with the pointer given +by the user in the buffer/image constructor, but will use the memory +returned by the [code]#Allocator# itself for that purpose. +The user can implement an allocator that returns the same address as the +one passed in the buffer constructor, but it is the responsibility of the +user to handle the potential race conditions. + + +[[table.default.allocators]] +.SYCL Default Allocators +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Allocators @ Description +a@ +[source] +---- +template +buffer_allocator +---- + a@ It is the default buffer allocator used by the runtime, when no allocator is + defined by the user. + Meets the C++ named requirement [code]#Allocator#. + A buffer of data type [code]#const T# uses [code]#buffer_allocator# by default. + +a@ +[source] +---- +image_allocator +---- + a@ It is the default allocator used by the runtime for the SYCL [code]#unsampled_image# and [code]#sampled_image# classes when no allocator is provided by the user. + The [code]#image_allocator# is required to allocate in elements of [code]#std::byte#. + +|==== + + +See <> for details on manual host-device synchronization. + + +[[subsec:buffers]] +=== Buffers + +The [code]#buffer# class defines a shared array of one, two or three +dimensions that can be used by the SYCL <> and has to be accessed using +<> classes. Buffers are templated on both the type of their data, +and the number of dimensions that the data is stored and accessed through. + +A [code]#buffer# does not map to only one underlying backend +object, and all <> memory objects may be temporary for use +within a command group on a specific device. + +The underlying data type of a buffer [code]#T# must be <> as +defined in <>. Some overloads of the [code]#buffer# +constructor initialize the buffer contents by copying objects from host memory +while other overloads construct the buffer without copying objects from the +host. For the overloads that do not copy host objects, the initial state of +the objects in the buffer depends on whether [code]#T# is an implicit-lifetime +type (as defined in the {cpp} core language). If [code]#T# is an +implicit-lifetime type, objects of that type are implicitly created in the +buffer with indeterminate values. For other types, these constructor overloads +merely allocate uninitialized memory, and the application is responsible for +constructing objects by calling placement-new and for destroying them later +by manually calling the object's destructor. + +A SYCL [code]#buffer# can construct an instance of a SYCL [code]#buffer# +that reinterprets the original SYCL [code]#buffer# with a different +type, dimensionality and range using the member function +[code]#reinterpret#. The reinterpreted SYCL [code]#buffer# that is +constructed must behave as though it were a copy of the SYCL [code]#buffer# +that constructed it (see <>) with the exception +that the type, dimensionality and range of the reinterpreted SYCL +[code]#buffer# must reflect the type, dimensionality and range specified +when calling the [code]#reinterpret# member function. By extension of this, +the class member types [code]#value_type#, [code]#reference# and +[code]#const_reference#, and the member functions [code]#get_range()# +and [code]#size()# of the reinterpreted SYCL [code]#buffer# must +reflect the new type, dimensionality and range. The data that the original SYCL +[code]#buffer# and the reinterpreted SYCL [code]#buffer# manage +remains unaffected, though the representation of the data when accessed through +the reinterpreted SYCL [code]#buffer# may alter to reflect the new type, +dimensionality and range. It is important to note that a reinterpreted SYCL +[code]#buffer# is a copy of the original SYCL [code]#buffer# only, +and not a new SYCL [code]#buffer#. Constructing more than one SYCL +[code]#buffer# managing the same host pointer is still undefined behavior. + +The SYCL [code]#buffer# class template provides the common reference +semantics (see <>). + + +==== Buffer interface + +The constructors and member functions of the SYCL [code]#buffer# class +template are listed in <> and +<>, respectively. The additional common special +member functions and common member functions are listed in +<> and +<>, respectively. + +Each constructor takes as the last parameter an optional SYCL +[code]#property_list# to provide properties to the SYCL +[code]#buffer#. + +The SYCL [code]#buffer# class template takes a template parameter +[code]#AllocatorT# for specifying an allocator which is used by +the <> when allocating temporary memory on the +host. If no template argument is provided, then the default allocator +for the SYCL [code]#buffer# class [code]#buffer_allocator# +will be used (see <>). + +// Interface for class: buffer + +[source,,linenums] +---- +include::{header_dir}/buffer.h[lines=4..-1] +---- + + +[[table.constructors.buffer]] +.Constructors of the [code]#buffer# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +buffer(const range & bufferRange, +const property_list &propList = {}) +---- + a@ Construct a SYCL [code]#buffer# instance with uninitialized memory. + The constructed SYCL [code]#buffer# will use a default constructed [code]#AllocatorT# when allocating memory on the host. + The range of the constructed SYCL [code]#buffer# is specified by the [code]#bufferRange# parameter provided. + Data is not written back to the host on destruction of the [code]#buffer# unless the [code]#buffer# has a valid non-null pointer specified via the member function [code]#set_final_data()#. + Zero or more properties can be provided to the constructed SYCL [code]#buffer# via an instance of [code]#property_list#. + +a@ +[source] +---- +buffer(const range & bufferRange, +AllocatorT allocator, + const property_list &propList = {}) +---- + a@ Construct a SYCL [code]#buffer# instance with uninitialized memory. + The constructed SYCL [code]#buffer# will use the [code]#allocator# parameter provided when allocating memory on the host. + The range of the constructed SYCL [code]#buffer# is specified by the [code]#bufferRange# parameter provided. + Data is not written back to the host on destruction of the [code]#buffer# unless the [code]#buffer# has a valid non-null pointer specified via the member function [code]#set_final_data()#. + Zero or more properties can be provided to the constructed SYCL [code]#buffer# via an instance of [code]#property_list#. + +a@ +[source] +---- +buffer(T* hostData, +const range & bufferRange, + const property_list &propList = {}) +---- + a@ Construct a SYCL [code]#buffer# instance with the [code]#hostData# parameter provided. + The buffer is initialized with the memory specified by [code]#hostData#. + The ownership of this memory is given to the constructed SYCL [code]#buffer# for the duration of its lifetime. + The constructed SYCL [code]#buffer# will use a default constructed [code]#AllocatorT# when allocating memory on the host. + The range of the constructed SYCL [code]#buffer# is specified by the [code]#bufferRange# parameter provided. + Zero or more properties can be provided to the constructed SYCL [code]#buffer# via an instance of [code]#property_list#. + +a@ +[source] +---- +buffer(T* hostData, +const range & bufferRange, + AllocatorT allocator, + const property_list &propList = {}) +---- + a@ Construct a SYCL [code]#buffer# instance with the [code]#hostData# parameter provided. + The buffer is initialized with the memory specified by [code]#hostData#. + The ownership of this memory is given to the constructed SYCL [code]#buffer# for the duration of its lifetime. + The constructed SYCL [code]#buffer# will use the [code]#allocator# parameter provided when allocating memory on the host. + The range of the constructed SYCL [code]#buffer# is specified by the [code]#bufferRange# parameter provided. + Zero or more properties can be provided to the constructed SYCL [code]#buffer# via an instance of [code]#property_list#. + +a@ +[source] +---- +buffer(const T* hostData, +const range & bufferRange, + const property_list &propList = {}) +---- + a@ Construct a SYCL [code]#buffer# instance with the + [code]#hostData# parameter provided. The ownership of this + memory is given to the constructed SYCL [code]#buffer# for + the duration of its lifetime. + +The constructed SYCL [code]#buffer# will use a default +constructed [code]#AllocatorT# when allocating memory on +the host. + +The host address is [code]#const T#, so the host accesses +can be read-only. However, the [code]#typename T# is not const so +the device accesses can be both read and write accesses. Since +the [code]#hostData# is const, this buffer is only initialized with +this memory and there is no write back after its destruction, +unless the [code]#buffer# has another valid non-null final +data address specified via the member function +[code]#set_final_data()# after construction of the +[code]#buffer#. + +The range of the constructed SYCL [code]#buffer# is +specified by the [code]#bufferRange# parameter provided. + +Zero or more properties can be provided to the constructed SYCL +[code]#buffer# via an instance of +[code]#property_list#. + +a@ +[source] +---- +buffer(const T* hostData, +const range & bufferRange, + AllocatorT allocator, + const property_list &propList = {}) +---- + a@ Construct a SYCL [code]#buffer# instance with the + [code]#hostData# parameter provided. The ownership of this + memory is given to the constructed SYCL [code]#buffer# for + the duration of its lifetime. + +The constructed SYCL [code]#buffer# will use the +[code]#allocator# parameter provided when allocating +memory on the host. + +The host address is [code]#const T#, so the host accesses +can be read-only. However, the [code]#typename T# is not const so +the device accesses can be both read and write accesses. Since, +the [code]#hostData# is const, this buffer is only initialized +with this memory and there is no write back after its +destruction, unless the [code]#buffer# has another valid +non-null final data address specified via the member function +[code]#set_final_data()# after construction of the +[code]#buffer#. + +The range of the constructed SYCL [code]#buffer# is +specified by the [code]#bufferRange# parameter provided. + +Zero or more properties can be provided to the constructed SYCL +[code]#buffer# via an instance of +[code]#property_list#. + + +a@ +[source] +---- +template +buffer(Container &container, + const property_list &propList = {}) +---- + a@ Construct a one dimensional SYCL [code]#buffer# instance + from the elements starting at [code]#std::data(container)# + and containing [code]#std::size(container)# number of elements. + The buffer is initialized with the contents of [code]#container#, + and the ownership of this [code]#Container# is given to the + constructed SYCL [code]#buffer# for + the duration of its lifetime. + +Data is written back to [code]#container# before the completion of +[code]#buffer# destruction if the return type of [code]#std::data(container)# +is not [code]#const#. + +The constructed SYCL [code]#buffer# will use a default constructed [code]#AllocatorT# when allocating memory on the host. + +Zero or more properties can be provided to the constructed SYCL +[code]#buffer# via an instance of +[code]#property_list#. + +This constructor is only defined for a [code]#buffer# parameterized +with [code]#dimensions == 1#, and when [code]#std::data(container)# +is convertible to [code]#T*#. + + +a@ +[source] +---- +template +buffer(Container &container, + AllocatorT allocator, + const property_list &propList = {}) +---- + a@ Construct a one dimensional SYCL [code]#buffer# instance + from the elements starting at [code]#std::data(container)# + and containing [code]#std::size(container)# number of elements. + The buffer is initialized with the contents of [code]#container#, + and the ownership of this [code]#Container# is given to the + constructed SYCL [code]#buffer# for + the duration of its lifetime. + +Data is written back to [code]#container# before the completion of +[code]#buffer# destruction if the return type of [code]#std::data(container)# +is not [code]#const#. + +The constructed SYCL [code]#buffer# will use the [code]#allocator# parameter provided when allocating memory on the host. + +Zero or more properties can be provided to the constructed SYCL +[code]#buffer# via an instance of +[code]#property_list#. + +This constructor is only defined for a [code]#buffer# parameterized +with [code]#dimensions == 1#, and when [code]#std::data(container)# +is convertible to [code]#T*#. + + +a@ +[source] +---- +buffer(const std::shared_ptr &hostData, +const range & bufferRange, + const property_list &propList = {}) +---- + a@ Construct a SYCL [code]#buffer# instance with the [code]#hostData# parameter provided. The ownership of this memory is given to the constructed SYCL [code]#buffer# for the duration of its lifetime. + The constructed SYCL [code]#buffer# will use a default constructed [code]#AllocatorT# when allocating memory on the host. + The range of the constructed SYCL [code]#buffer# is specified by the [code]#bufferRange# parameter provided. + Zero or more properties can be provided to the constructed SYCL [code]#buffer# via an instance of [code]#property_list#. + +a@ +[source] +---- +buffer(const std::shared_ptr &hostData, +const range & bufferRange, + AllocatorT allocator, + const property_list &propList = {}) +---- + a@ Construct a SYCL [code]#buffer# instance with the [code]#hostData# parameter provided. The ownership of this memory is given to the constructed SYCL [code]#buffer# for the duration of its lifetime. + The constructed SYCL [code]#buffer# will use the [code]#allocator# parameter provided when allocating memory on the host. + The range of the constructed SYCL [code]#buffer# is specified by the [code]#bufferRange# parameter provided. + Zero or more properties can be provided to the constructed SYCL [code]#buffer# via an instance of [code]#property_list#. + +a@ +[source,c++] +---- +buffer(const std::shared_ptr &hostData, +const range & bufferRange, + const property_list &propList = {}) +---- + a@ Construct a SYCL [code]#buffer# instance with the [code]#hostData# parameter provided. The ownership of this memory is given to the constructed SYCL [code]#buffer# for the duration of its lifetime. + The constructed SYCL [code]#buffer# will use a default constructed [code]#AllocatorT# when allocating memory on the host. + The range of the constructed SYCL [code]#buffer# is specified by the [code]#bufferRange# parameter provided. + Zero or more properties can be provided to the constructed SYCL [code]#buffer# via an instance of [code]#property_list#. + +a@ +[source,c++] +---- +buffer(const std::shared_ptr &hostData, +const range & bufferRange, + AllocatorT allocator, + const property_list &propList = {}) +---- + a@ Construct a SYCL [code]#buffer# instance with the [code]#hostData# parameter provided. The ownership of this memory is given to the constructed SYCL [code]#buffer# for the duration of its lifetime. + The constructed SYCL [code]#buffer# will use the [code]#allocator# parameter provided when allocating memory on the host. + The range of the constructed SYCL [code]#buffer# is specified by the [code]#bufferRange# parameter provided. + Zero or more properties can be provided to the constructed SYCL [code]#buffer# via an instance of [code]#property_list#. + +a@ +[source] +---- +template +buffer(InputIterator first, InputIterator last, + const property_list &propList = {}) +---- + a@ Create a new allocated 1D buffer initialized from the given elements + ranging from [code]#first# up to one before [code]#last#. + The data is copied to an intermediate memory position by the runtime. + Data is not written back to the same iterator set provided. However, if the [code]#buffer# has a valid non-const iterator specified via the member function [code]#set_final_data()#, data will be copied back to that iterator. + The constructed SYCL [code]#buffer# will use a default constructed [code]#AllocatorT# when allocating memory on the host. + Zero or more properties can be provided to the constructed SYCL [code]#buffer# via an instance of [code]#property_list#. + +a@ +[source] +---- +template +buffer(InputIterator first, InputIterator last, + AllocatorT allocator = {}, + const property_list &propList = {}) +---- + a@ Create a new allocated 1D buffer initialized from the given elements + ranging from [code]#first# up to one before [code]#last#. + The data is copied to an intermediate memory position by the runtime. + Data is not written back to the same iterator set provided. However, if the [code]#buffer# has a valid non-const iterator specified via the member function [code]#set_final_data()#, data will be copied back to that iterator. + The constructed SYCL [code]#buffer# will use the [code]#allocator# parameter provided when allocating memory on the host. + Zero or more properties can be provided to the constructed SYCL [code]#buffer# via an instance of [code]#property_list#. + +a@ +[source] +---- +buffer(buffer &b, const id &baseIndex, + const range &subRange) +---- + a@ Create a new sub-buffer without allocation to have separate + accessors later. [code]#b# is the buffer with the real data, which must not be a sub-buffer. + [code]#baseIndex# specifies the origin of the sub-buffer inside the + buffer [code]#b#. [code]#subRange# specifies the size of the sub-buffer. + The sum of [code]#baseIndex# and [code]#subRange# in any dimension must not + exceed the parent buffer ([code]#b)# size ([code]#bufferRange)# in that dimension, + and an [code]#exception# with the [code]#errc::invalid# error code must be thrown if violated. + +The offset and range specified by [code]#baseIndex# and +[code]#subRange# together must represent a contiguous +region of the original SYCL [code]#buffer#. + +If a non-contiguous region of a buffer is requested when +constructing a sub-buffer, then an [code]#exception# with +the [code]#errc::invalid# error code must be +thrown. + +The origin (based on [code]#baseIndex#) of the sub-buffer being constructed +must be a multiple of the memory base address alignment of each SYCL +[code]#device# which accesses data from the buffer. This value is retrievable +via the SYCL [code]#device# class info query +[code]#info::device::mem_base_addr_align#. Violating this requirement causes +the implementation to throw an [code]#exception# with the [code]#errc::invalid# +error code from the [code]#accessor# constructor (if the accessor is not a +placeholder) or from [code]#handler::require()# (if the accessor is a +placeholder). If the accessor is bound to a <> with a secondary +queue, the sub-buffer's alignment must be compatible with both the primary +queue's device and the secondary queue's device, otherwise this exception is +thrown. + +Must throw an [code]#exception# with the [code]#errc::invalid# error code if +[code]#b# is a sub-buffer. + +|==== + + + +[[table.members.buffer]] +.Member functions for the [code]#buffer# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +range get_range() const +---- + a@ Return a range object representing the + size of the buffer in terms of number + of elements in each dimension as passed + to the constructor. + +a@ +[source] +---- +size_t size() const noexcept +---- + a@ Returns the total number of elements in the buffer. + Equal to [code]#+get_range()[0] * ... * get_range()[dimensions-1]+#. +a@ +[source] +---- +size_t get_count() const +---- + a@ Returns the same value as [code]#size()#. Deprecated. +a@ +[source] +---- +size_t byte_size() const noexcept +---- + a@ Returns the size of the buffer storage in bytes. + Equal to [code]#size()*sizeof(T)#. +a@ +[source] +---- +size_t get_size() const +---- + a@ Returns the same value as [code]#byte_size()#. Deprecated. +a@ +[source] +---- +AllocatorT get_allocator() const +---- + a@ Returns the allocator provided to the buffer. + +a@ +[source] +---- +template +accessor + get_access(handler &commandGroupHandler) +---- + a@ Returns a valid [code]#accessor# to the buffer with the specified + access mode and target in the command group buffer. + The value of target can be [code]#target::device# or + [code]#target::constant_buffer#. + +a@ +[source] +---- +template +accessor + get_access() +---- + a@ Deprecated in SYCL 2020. Use [code]#get_host_access()# instead. + +Returns a valid host [code]#accessor# to the buffer with the specified +access mode and target. + +a@ +[source] +---- +template +accessor + get_access(handler &commandGroupHandler, + range accessRange, + id accessOffset = {}) +---- + a@ Returns a valid [code]#accessor# to the buffer with the specified access + mode and target in the command group buffer. The accessor is a + <>, where the range starts at the given offset from the + beginning of the buffer. The value of target can be + [code]#target::device# or [code]#target::constant_buffer#. + +Throws an [code]#exception# with the [code]#errc::invalid# error code if +the sum of [code]#accessRange# and [code]#accessOffset# exceeds the range of +the buffer in any dimension. + +a@ +[source] +---- +template +accessor + get_access(range accessRange, id accessOffset = {}) +---- + a@ Deprecated in SYCL 2020. Use [code]#get_host_access()# instead. + +Returns a valid host [code]#accessor# to the buffer with the specified access +mode and target. The accessor is a <>, where the range starts +at the given offset from the beginning of the buffer. The value of target can +only be [code]#target::host_buffer#. + +Throws an [code]#exception# with the [code]#errc::invalid# error code if +the sum of [code]#accessRange# and [code]#accessOffset# exceeds the range of +the buffer in any dimension. + +a@ +[source] +---- +template + auto get_access(Ts... args) +---- + a@ Returns a valid [code]#accessor# as if constructed via passing the buffer + and all provided arguments to the [code]#accessor# constructor. + +Possible implementation: + +[code]#+return accessor{*this, args...};+# + +a@ +[source] +---- +template + auto get_host_access(Ts... args) +---- + a@ Returns a valid [code]#host_accessor# as if constructed via passing the + buffer and all provided arguments to the [code]#host_accessor# + constructor. + +Possible implementation: + +[code]#+return host_accessor{*this, args...};+# + +a@ +[source] +---- +template + void set_final_data(Destination finalData = nullptr) +---- + a@ The [code]#finalData# points to where the outcome of all + the buffer processing is going to be copied to at destruction + time, if the buffer was involved with a write accessor. + +Destination can be either an output iterator or a +[code]#std::weak_ptr#. + +Note that a raw pointer is a special case of output iterator and +thus defines the host memory to which the result is to be +copied. + +In the case of a weak pointer, the output is not updated if the +weak pointer has expired. + +If [code]#Destination# is [code]#std::nullptr_t#, then +the copy back will not happen. + +a@ +[source] +---- +void set_write_back(bool flag = true) +---- + a@ This member function allows dynamically forcing or canceling the + write-back of the data of a buffer on destruction according to + the value of [code]#flag#. + +Forcing the write-back is similar to what happens during a +normal write-back as described in <> +and <>. + +If there is nowhere to write-back, using this function does not +have any effect. + +a@ +[source] +---- +bool is_sub_buffer() const +---- + a@ Returns true if this SYCL [code]#buffer# is a sub-buffer, otherwise + returns false. + +a@ +[source] +---- +template + buffer::template rebind_alloc< + ReinterpretT>> + reinterpret(range reinterpretRange) const +---- + a@ Creates and returns a reinterpreted SYCL [code]#buffer# + with the type specified by [code]#ReinterpretT#, + dimensions specified by [code]#ReinterpretDim# and range + specified by [code]#reinterpretRange#. The buffer object + being reinterpreted can be a SYCL sub-buffer that was created + from a SYCL [code]#buffer# and must throw + [code]#exception# with the + [code]#errc::invalid# error code if the total + size in bytes represented by the type and range of the + reinterpreted SYCL [code]#buffer# (or sub-buffer) does not + equal the total size in bytes represented by the type and range + of this SYCL [code]#buffer# (or sub-buffer). + Reinterpreting a sub-buffer provides a reinterpreted view of + the sub-buffer only, and does not change the offset or size of + the sub-buffer view (in bytes) relative to the parent + [code]#buffer#. + +a@ +[source] +---- +template + buffer::template rebind_alloc< + ReinterpretT>> + reinterpret() const +---- + a@ Creates and returns a reinterpreted SYCL [code]#buffer# + with the type specified by [code]#ReinterpretT# and + dimensions specified by [code]#ReinterpretDim#. + Only valid when [code]#(ReinterpretDim == 1)# or when + [code]#\((ReinterpretDim == dimensions) && (sizeof(ReinterpretT) == sizeof(T)))#. + The buffer object being reinterpreted can be a SYCL sub-buffer + that was created from a SYCL [code]#buffer# and + must throw an [code]#exception# with the [code]#errc::invalid# error code + if the total size in bytes represented by the type and range + of the reinterpreted SYCL [code]#buffer# (or sub-buffer) + does not equal the total size in bytes represented by the type and range + of this SYCL [code]#buffer# (or sub-buffer). + Reinterpreting a sub-buffer provides a reinterpreted view + of the sub-buffer only, + and does not change the offset or size of the sub-buffer view (in bytes) + relative to the parent [code]#buffer#. + +|==== + + + +[[sec:buffer-properties]] +==== Buffer properties + +The properties that can be provided when constructing the SYCL +[code]#buffer# class are describe in +<>. + + +[[table.properties.buffer]] +.Properties supported by the SYCL [code]#buffer# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Property @ Description +a@ +[source] +---- +property::buffer::use_host_ptr +---- + a@ The [code]#use_host_ptr# property adds the requirement that the <> must not allocate any memory for the SYCL [code]#buffer# and instead uses the provided host pointer directly. This prevents the <> from allocating additional temporary storage on the host. + +This property has a special guarantee for buffers that are constructed from a +[code]#hostData# pointer. If a [code]#host_accessor# is constructed from such +a buffer, then the address of the [code]#reference# type returned from the +accessor's member functions such as [code]#operator[](id<>)# will be the same +as the corresponding [code]#hostData# address. + +a@ +[source] +---- +property::buffer::use_mutex +---- + a@ The [code]#use_mutex# property is valid for the SYCL + [code]#buffer#, [code]#unsampled_image# and + [code]#sampled_image# classes. The property adds the + requirement that the memory which is owned by the SYCL + [code]#buffer# can be shared with the application via a + [code]#std::mutex# provided to the property. The mutex + [code]#m# is locked by the runtime whenever the data is in + use and unlocked otherwise. Data is synchronized with + [code]#hostData#, when the mutex is unlocked by the runtime. + +a@ +[source] +---- +property::buffer::context_bound +---- + a@ The [code]#context_bound# property adds the requirement that the SYCL [code]#buffer# can only be associated with a single SYCL [code]#context# that is provided to the property. + +|==== + + +The constructors and special member functions of the buffer property +classes are listed in +<> and +<> respectively. + + +[[table.constructors.properties.buffer]] +.Constructors of the [code]#buffer# [code]#property# classes +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +property::buffer::use_host_ptr::use_host_ptr() +---- + a@ Constructs a SYCL [code]#use_host_ptr# property instance. + +a@ +[source] +---- +property::buffer::use_mutex::use_mutex(std::mutex &mutexRef) +---- + a@ Constructs a SYCL [code]#use_mutex# property instance with a reference to [code]#mutexRef# parameter provided. + +a@ +[source] +---- +property::buffer::context_bound::context_bound(context boundContext) +---- + a@ Constructs a SYCL [code]#context_bound# property instance with a copy of a SYCL [code]#context#. + +|==== + + + +[[table.members.properties.buffer]] +.Member functions of the [code]#buffer# [code]#property# classes +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +std::mutex *property::buffer::use_mutex::get_mutex_ptr() const +---- + a@ Returns the [code]#std::mutex# which was specified when + constructing this SYCL [code]#use_mutex# property. + +a@ +[source] +---- +context property::buffer::context_bound::get_context() const +---- + a@ Returns the [code]#context# which was specified when + constructing this SYCL [code]#context_bound# property. + +|==== + + + +[[sec:buf-sync-rules]] +==== Buffer synchronization rules + +Buffers are reference-counted. When a buffer value is constructed +from another buffer, the two values reference the same buffer and a +reference count is incremented. When a buffer value is destroyed, +the reference count is decremented. Only when there are no more +buffer values that reference a specific buffer is the actual +buffer destroyed and the buffer destruction behavior defined +below is followed. + +If any error occurs on buffer destruction, it is reported +via the associated queue's asynchronous error handling mechanism. + +The basic rule for the blocking behavior of a buffer destructor is +that it blocks if there is some data to write back because a +write accessor on it has been created, or if the buffer was constructed +with attached host memory and is still in use. + +More precisely: + + . A buffer can be constructed with just a size and using the default + buffer allocator. The memory management for this type of buffer is + entirely handled by the SYCL system. The destructor for this type of + buffer does not need to block, even if work on the buffer has not + completed. Instead, the SYCL system frees any storage required for the + buffer asynchronously when it is no longer in use in queues. The initial + contents of the buffer are unspecified. + . A buffer can be constructed with associated host memory and a default + buffer allocator. The buffer will use this host memory for its full + lifetime, but the contents of this host memory are unspecified for the + lifetime of the buffer. If the host memory is modified by the host, or + mapped to another buffer or image during the lifetime of this buffer, + then the results are undefined. The initial contents of the buffer will + be the contents of the host memory at the time of construction. ++ +-- +When the buffer is destroyed, the destructor will block until all +work in queues on the buffer have completed, then copy the contents +of the buffer back to the host memory (if required) and then +return. + + .. If the type of the host data is [code]#const#, then the buffer is + read-only; only read accessors are allowed on the buffer and + no-copy-back to host memory is performed (although the host memory must + still be kept available for use by SYCL). When using the default buffer + allocator, the const-ness of the type will be removed in order to allow + host allocation of memory, which will allow temporary host copies of the + data by the <>, for example for speeding up host + accesses. ++ +When the buffer is destroyed, the destructor will block until all work +in queues on the buffer have completed and then return, as there is no +copy of data back to host. + .. If the type of the host data is not [code]#const# but the pointer + to host data is [code]#const#, then the read-only restriction + applies only on host and not on device accesses. ++ +When the buffer is destroyed, the destructor will block until all work +in queues on the buffer have completed. +-- + . A buffer can be constructed using a [code]#shared_ptr# to host + data. This pointer is shared between the SYCL application and the + runtime. In order to allow synchronization between the application and + the runtime a [code]#mutex# is used which will be locked by the + runtime whenever the data is in use, and unlocked when it is no longer + needed. ++ +-- +The [code]#shared_ptr# reference counting is used in order to prevent +destroying the buffer host data prematurely. If the [code]#shared_ptr# +is deleted from the user application before buffer destruction, the buffer +can continue securely because the pointer hasn't been destroyed yet. It will +not copy data back to the host before destruction, however, as the +application side has already deleted its copy. + +Note that since there is an implicit conversion of a +[code]#std::unique_ptr# to a [code]#std::shared_ptr#, a +[code]#std::unique_ptr# can also be used to pass the ownership to the +<>. +-- + . A buffer can be constructed from a pair of iterator values. In this + case, the buffer construction will copy the data from the data range + defined by the iterator pair. The destructor will not copy back any data + and does not need to block. + + . A buffer can be constructed from a container on which + [code]#std::data(container)# and [code]#std::size(container)# + are well-formed. The initial contents of the buffer will + be the contents of the container at the time of construction. ++ +-- +The buffer may use the memory within the container for its full +lifetime, and the contents of this memory are unspecified for the +lifetime of the buffer. If the container memory is modified by the host +during the lifetime of this buffer, then the results are undefined. + +When the buffer is destroyed, if the return type of +[code]#std::data(container)# is not [code]#const# then the destructor +will block until all work in queues on the buffer have completed, and will +then copy the contents of the buffer to the container (if required) +and then return. +-- + + +If [code]#set_final_data()# is used to change where to write the +data back to, then the destructor of the buffer will block if a +write accessor on it has been created. + +A sub-buffer object can be created which is a sub-range reference to a +base buffer. This sub-buffer can be used to create accessors to the +base buffer, which have access to the range specified at time +of construction of the sub-buffer. Sub-buffers cannot be created from +sub-buffers, but only from a base buffer which is not already a sub-buffer. + +Sub-buffers must be constructed from a contiguous region of memory in a +buffer. This requirement is potentially non-intuitive when working with +buffers that have dimensionality larger than one, but maps to +one-dimensional <> native allocations without performance cost due +to index mapping computation. For example: + +[source,,linenums] +---- +include::{code_dir}/subbuffer.cpp[lines=4..-1] +---- + + +[[subsec:images]] +=== Images + +The classes [code]#unsampled_image# +(<>) and [code]#sampled_image# +(<>) define shared image data of one, +two or three dimensions, that can be used by kernels in queues and have to be +accessed using the image <> classes. + +The constructors and member functions of the SYCL [code]#unsampled_image# +and [code]#sampled_image# class templates are listed in +<>, <>, +<> and <>, +respectively. The additional common special member functions and common member +functions are listed in <> and +<>, respectively. + +Where relevant, it is the responsibility of the user to ensure that the format +of the data matches the format described by [code]#image_format#. + +The allocator template parameter of the SYCL [code]#unsampled_image# and +[code]#sampled_image# classes can be any allocator type including a custom +allocator, however it must allocate in units of [code]#std::byte#. + +For any image that is constructed with the range latexmath:[(r1,r2,r3)] with an element +type size in bytes of _s_, the image row pitch and image slice pitch should be +calculated as follows: + +[[image-row-pitch]] +[latexmath] +++++ +r1 \cdot s +++++ + +[[image-slice-pitch]] +[latexmath] +++++ +r1 \cdot r2 \cdot s +++++ + +The SYCL [code]#unsampled_image# and [code]#sampled_image# class +templates provide the common reference semantics +(see <>). + + +==== Unsampled image interface + +Each constructor of the [code]#unsampled_image# takes an +[code]#image_format# to describe the data layout of the image data. + +Each constructor additionally takes as the last parameter an optional SYCL +[code]#property_list# to provide properties to the SYCL +[code]#unsampled_image#. + +The SYCL [code]#unsampled_image# class template takes a template parameter +[code]#AllocatorT# for specifying an allocator which is used by the +<> when allocating temporary memory on the host. If no template +argument is provided, the default allocator for the SYCL +[code]#unsampled_image# class [code]#image_allocator# is used +(see <>). + +// Interface for class: unsampled image +[source,,linenums] +---- +include::{header_dir}/unsampledImage.h[lines=4..-1] +---- + + +[[table.constructors.unsampledImage]] +.Constructors of the [code]#unsampled_image# class template +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +unsampled_image(image_format format, +const range &rangeRef, + const property_list &propList = {}) +---- + a@ Construct a SYCL [code]#unsampled_image# instance with + uninitialized memory. + The constructed SYCL [code]#unsampled_image# will use a default + constructed [code]#AllocatorT# when allocating memory on the + host. + The element size of the constructed SYCL [code]#unsampled_image# + will be derived from the [code]#format# parameter. + The range of the constructed SYCL [code]#unsampled_image# is + specified by the [code]#rangeRef# parameter provided. + The pitch of the constructed SYCL [code]#unsampled_image# will be + the default size determined by the <>. + Unless the member function [code]#set_final_data()# is called + with a valid non-null pointer, there will be no write back on + destruction. + Zero or more properties can be provided to the constructed SYCL + [code]#unsampled_image# via an instance of + [code]#property_list#. + +a@ +[source] +---- +unsampled_image(image_format format, +const range &rangeRef, + AllocatorT allocator, + const property_list &propList = {}) +---- + a@ Construct a SYCL [code]#unsampled_image# instance with + uninitialized memory. + The constructed SYCL [code]#unsampled_image# will use the + [code]#allocator# parameter provided when allocating memory on + the host. + The element size of the constructed SYCL [code]#unsampled_image# + will be derived from the [code]#format# parameter. + The range of the constructed SYCL [code]#unsampled_image# is + specified by the [code]#rangeRef# parameter provided. + The pitch of the constructed SYCL [code]#unsampled_image# will be + the default size determined by the <>. + Unless the member function [code]#set_final_data()# is called + with a valid non-null pointer, there will be no write back on + destruction. + Zero or more properties can be provided to the constructed SYCL + [code]#unsampled_image# via an instance of + [code]#property_list#. + +a@ +[source] +---- +unsampled_image(image_format format, +const range &rangeRef, + const range &pitch, + const property_list &propList = {}) +---- + a@ Available only when: [code]#dimensions > 1#. + +Construct a SYCL [code]#unsampled_image# instance with +uninitialized memory. +The constructed SYCL [code]#unsampled_image# will use a default +constructed [code]#AllocatorT# when allocating memory on the +host. +The element size of the constructed SYCL [code]#unsampled_image# +will be derived from the [code]#format# parameter. +The range of the constructed SYCL [code]#unsampled_image# is +specified by the [code]#rangeRef# parameter provided. +The pitch of the constructed SYCL [code]#unsampled_image# will be +the [code]#pitch# parameter provided. +Unless the member function [code]#set_final_data()# is called +with a valid non-null pointer, there will be no write back on +destruction. +Zero or more properties can be provided to the constructed SYCL +[code]#unsampled_image# via an instance of +[code]#property_list#. + +a@ +[source] +---- +unsampled_image(image_format format, +const range &rangeRef, + const range &pitch, + AllocatorT allocator, + const property_list &propList = {}) +---- + a@ Available only when: [code]#dimensions > 1#. + +Construct a SYCL [code]#unsampled_image# instance with +uninitialized memory. +The constructed SYCL [code]#unsampled_image# will use the +[code]#allocator# parameter provided when allocating memory on +the host. +The element size of the constructed SYCL [code]#unsampled_image# +will be derived from the [code]#format# parameter. +The range of the constructed SYCL [code]#unsampled_image# is +specified by the [code]#rangeRef# parameter provided. +The pitch of the constructed SYCL [code]#unsampled_image# will be +the [code]#pitch# parameter provided. +Unless the member function [code]#set_final_data()# is called +with a valid non-null pointer, there will be no write back on +destruction. +Zero or more properties can be provided to the constructed SYCL +[code]#unsampled_image# via an instance of +[code]#property_list#. + +a@ +[source] +---- +unsampled_image(void *hostPointer, +image_format format, + const range &rangeRef, + const property_list &propList = {}) +---- + a@ Construct a SYCL [code]#unsampled_image# instance with the + [code]#hostPointer# parameter provided. The ownership of this + memory is given to the constructed SYCL [code]#unsampled_image# + for the duration of its lifetime. + The constructed SYCL [code]#unsampled_image# will use a default + constructed [code]#AllocatorT# when allocating memory on the + host. + The element size of the constructed SYCL [code]#unsampled_image# + will be derived from the [code]#format# parameter. + The range of the constructed SYCL [code]#unsampled_image# is + specified by the [code]#rangeRef# parameter provided. + The pitch of the constructed SYCL [code]#unsampled_image# will be + the default size determined by the <>. + Unless the member function [code]#set_final_data()# is called + with a valid non-null pointer, any memory allocated by the + <> is written back to [code]#hostPointer#. + Zero or more properties can be provided to the constructed SYCL + [code]#unsampled_image# via an instance of + [code]#property_list#. + +a@ +[source] +---- +unsampled_image(void *hostPointer, +image_format format, + const range &rangeRef, + AllocatorT allocator, + const property_list &propList = {}) +---- + a@ Construct a SYCL [code]#unsampled_image# instance with the + [code]#hostPointer# parameter provided. The ownership of this + memory is given to the constructed SYCL [code]#unsampled_image# + for the duration of its lifetime. + The constructed SYCL [code]#unsampled_image# will use the + [code]#allocator# parameter provided when allocating memory on + the host. + The element size of the constructed SYCL [code]#unsampled_image# + will be derived from the [code]#format# parameter. + The range of the constructed SYCL [code]#unsampled_image# is + specified by the [code]#rangeRef# parameter provided. + The pitch of the constructed SYCL [code]#unsampled_image# will be + the default size determined by the <>. + Unless the member function [code]#set_final_data()# is called + with a valid non-null pointer, any memory allocated by the + <> is written back to [code]#hostPointer#. + Zero or more properties can be provided to the constructed SYCL + [code]#unsampled_image# via an instance of [code]#property_list#. + +a@ +[source] +---- +unsampled_image(void *hostPointer, +image_format format, + const range &rangeRef, + const range &pitch, + const property_list &propList = {}) +---- + a@ Available only when: [code]#dimensions > 1# + +Construct a SYCL [code]#unsampled_image# instance with the +[code]#hostPointer# parameter provided. The ownership of this +memory is given to the constructed SYCL [code]#unsampled_image# +for the duration of its lifetime. +The constructed SYCL [code]#unsampled_image# will use a default +constructed [code]#AllocatorT# when allocating memory on the +host. +The element size of the constructed SYCL [code]#unsampled_image# +will be derived from the [code]#format# parameter. +The range of the constructed SYCL [code]#unsampled_image# is +specified by the [code]#rangeRef# parameter provided. +The pitch of the constructed SYCL [code]#unsampled_image# will be +the [code]#pitch# parameter provided. +Unless the member function [code]#set_final_data()# is called +with a valid non-null pointer, any memory allocated by the +<> is written back to [code]#hostPointer#. +Zero or more properties can be provided to the constructed SYCL +[code]#unsampled_image# via an instance of +[code]#property_list#. + +a@ +[source] +---- +unsampled_image(void *hostPointer, +image_format format, + const range &rangeRef, + const range &pitch, + AllocatorT allocator, + const property_list &propList = {}) +---- + a@ Available only when: [code]#dimensions > 1#. + +Construct a SYCL [code]#unsampled_image# instance with the +[code]#hostPointer# parameter provided. The ownership of this +memory is given to the constructed SYCL [code]#unsampled_image# +for the duration of its lifetime. +The constructed SYCL [code]#unsampled_image# will use the +[code]#allocator# parameter provided when allocating memory on +the host. +The element size of the constructed SYCL [code]#unsampled_image# +will be derived from the [code]#format# parameter. +The range of the constructed SYCL [code]#unsampled_image# is +specified by the [code]#rangeRef# parameter provided. +The pitch of the constructed SYCL [code]#unsampled_image# will be +the [code]#pitch# parameter provided. +Unless the member function [code]#set_final_data()# is called +with a valid non-null pointer, any memory allocated by the +<> is written back to [code]#hostPointer#. +Zero or more properties can be provided to the constructed SYCL +[code]#unsampled_image# via an instance of [code]#property_list#. + +a@ +[source] +---- +unsampled_image(std::shared_ptr& hostPointer, +image_format format, + const range &rangeRef, + const property_list &propList = {}) +---- + a@ Construct a SYCL [code]#unsampled_image# instance with the + [code]#hostPointer# parameter provided. The ownership of this + memory is given to the constructed SYCL [code]#unsampled_image# + for the duration of its lifetime. + The constructed SYCL [code]#unsampled_image# will use a default + constructed [code]#AllocatorT# when allocating memory on the + host. + The element size of the constructed SYCL [code]#unsampled_image# + will be derived from the [code]#format# parameter. + The range of the constructed SYCL [code]#unsampled_image# is + specified by the [code]#rangeRef# parameter provided. + The pitch of the constructed SYCL [code]#unsampled_image# will be + the default size determined by the <>. + Unless the member function [code]#set_final_data()# is called + with a valid non-null pointer, any memory allocated by the + <> is written back to [code]#hostPointer#. + Zero or more properties can be provided to the constructed SYCL + [code]#unsampled_image# via an instance of [code]#property_list#. + +a@ +[source] +---- +unsampled_image(std::shared_ptr& hostPointer, +image_format format, + const range &rangeRef, + AllocatorT allocator, + const property_list &propList = {}) +---- + a@ Construct a SYCL [code]#unsampled_image# instance with the + [code]#hostPointer# parameter provided. The ownership of this + memory is given to the constructed SYCL [code]#unsampled_image# + for the duration of its lifetime. + The constructed SYCL [code]#unsampled_image# will use the + [code]#allocator# parameter provided when allocating memory on + the host. + The element size of the constructed SYCL [code]#unsampled_image# + will be derived from the [code]#format# parameter. + The range of the constructed SYCL [code]#unsampled_image# is + specified by the [code]#rangeRef# parameter provided. + The pitch of the constructed SYCL [code]#unsampled_image# will be + the default size determined by the <>. + Unless the member function [code]#set_final_data()# is called + with a valid non-null pointer, any memory allocated by the + <> is written back to [code]#hostPointer#. + Zero or more properties can be provided to the constructed SYCL + [code]#unsampled_image# via an instance of [code]#property_list#. + +a@ +[source] +---- +unsampled_image(std::shared_ptr& hostPointer, +image_format format, + const range &rangeRef, + const range & pitch, + const property_list &propList = {}) +---- + a@ Construct a SYCL [code]#unsampled_image# instance with the + [code]#hostPointer# parameter provided. The ownership of this + memory is given to the constructed SYCL [code]#unsampled_image# + for the duration of its lifetime. + The constructed SYCL [code]#unsampled_image# will use a default + constructed [code]#AllocatorT# when allocating memory on the + host. + The element size of the constructed SYCL [code]#unsampled_image# + will be derived from the [code]#format# parameter. + The range of the constructed SYCL [code]#unsampled_image# is + specified by the [code]#rangeRef# parameter provided. + The pitch of the constructed SYCL [code]#unsampled_image# will be + the [code]#pitch# parameter provided. + Unless the member function [code]#set_final_data()# is called + with a valid non-null pointer, any memory allocated by the + <> is written back to [code]#hostPointer#. + Zero or more properties can be provided to the constructed SYCL + [code]#unsampled_image# via an instance of [code]#property_list#. + +a@ +[source] +---- +unsampled_image(std::shared_ptr& hostPointer, +image_format format, + const range &rangeRef, + const range & pitch, + AllocatorT allocator, + const property_list &propList = {}) +---- + a@ Construct a SYCL [code]#unsampled_image# instance with the + [code]#hostPointer# parameter provided. The ownership of this + memory is given to the constructed SYCL [code]#unsampled_image# + for the duration of its lifetime. + The constructed SYCL [code]#unsampled_image# will use the + [code]#allocator# parameter provided when allocating memory on + the host. + The element size of the constructed SYCL [code]#unsampled_image# + will be derived from the [code]#format# parameter. + The range of the constructed SYCL [code]#unsampled_image# is + specified by the [code]#rangeRef# parameter provided. + The pitch of the constructed SYCL [code]#unsampled_image# will be + the [code]#pitch# parameter provided. + Unless the member function [code]#set_final_data()# is called + with a valid non-null pointer, any memory allocated by the + <> is written back to [code]#hostPointer#. + Zero or more properties can be provided to the constructed SYCL + [code]#unsampled_image# via an instance of [code]#property_list#. + +|==== + + + +[[table.members.unsampledImage]] +.Member functions of the [code]#unsampled_image# class template +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +range get_range() const +---- + a@ Return a range object representing the + size of the image in terms of the number + of elements in each dimension as passed + to the constructor. + +a@ +[source] +---- +range get_pitch() const +---- + a@ Available only when: [code]#dimensions > 1#. + +Return a range object representing the +pitch of the image in bytes. + +a@ +[source] +---- +size_t size() const noexcept +---- + a@ Returns the total number of elements in the image. + Equal to [code]#+get_range()[0] * ... * get_range()[dimensions-1]+#. + +a@ +[source] +---- +size_t byte_size() const noexcept +---- + a@ Returns the size of the image storage in bytes. The number of + bytes may be greater than [code]#size()*element size# + due to padding of elements, rows and slices of the image for + efficient access. + +a@ +[source] +---- +AllocatorT get_allocator() const +---- + a@ Returns the allocator provided to the image. + +a@ +[source] +---- +template + auto get_access(Ts... args) +---- + a@ Returns a valid [code]#unsampled_image_accessor# as if constructed via + passing the image and all provided arguments to the + [code]#unsampled_image_accessor# constructor. + +Possible implementation: + +[code]#+return unsampled_image_accessor{*this, args...};+# + +a@ +[source] +---- +template + auto get_host_access(Ts... args) +---- + a@ Returns a valid [code]#host_unsampled_image_accessor# as if constructed + via passing the image and all provided arguments to the + [code]#host_unsampled_image_accessor# constructor. + +Possible implementation: + +[code]#+return host_unsampled_image_accessor{*this, args...};+# + +a@ +[source] +---- +template + void set_final_data(Destination finalData = nullptr) +---- + a@ The [code]#finalData# point to where the output of all + the image processing is going to be copied to at destruction + time, if the image was involved with a write accessor. + +Destination can be either an output iterator, a +[code]#std::weak_ptr#. + +Note that a raw pointer is a special case of output iterator and +thus defines the host memory to which the result is to be +copied. + +In the case of a weak pointer, the output is not copied if the +weak pointer has expired. + +If [code]#Destination# is [code]#std::nullptr_t#, then +the copy back will not happen. + +a@ +[source] +---- +void set_write_back(bool flag = true) +---- + a@ This member function allows dynamically forcing or canceling the + write-back of the data of an image on destruction according to + the value of [code]#flag#. + +Forcing the write-back is similar to what happens during a +normal write-back as described in <> +and <>. + +If there is nowhere to write-back, using this function does not +have any effect. + +|==== + + + +==== Sampled image interface + +Each constructor of the [code]#sampled_image# class requires a +pointer to the host data the image will sample, an +[code]#image_format# to describe the data layout and an +[code]#image_sampler# (<>) to describe +how to sample the image data. + +Each constructor additionally takes as the last parameter an optional SYCL +[code]#property_list# to provide properties to the SYCL +[code]#sampled_image#. + +// Interface for class: sampled image +[source,,linenums] +---- +include::{header_dir}/sampledImage.h[lines=4..-1] +---- + + +[[table.constructors.sampledImage]] +.Constructors of the [code]#sampled_image# class template +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +sampled_image(const void *hostPointer, +image_format format, + image_sampler sampler, + const range &rangeRef, + const property_list &propList = {}) +---- + a@ Construct a SYCL [code]#sampled_image# instance with the + [code]#hostPointer# parameter provided. The ownership of this + memory is given to the constructed SYCL [code]#sampled_image# for + the duration of its lifetime. + The host address is [code]#const#, so the host accesses must be + read-only. Since, the [code]#hostPointer# is [code]#const#, this image is only + initialized with this memory and there is no write after its + destruction. + The element size of the constructed SYCL [code]#sampled_image# + will be derived from the [code]#format# parameter. + Accessors that read the constructed SYCL [code]#sampled_image# will + use the [code]#sampler# parameter to sample the image. + The range of the constructed SYCL [code]#sampled_image# is + specified by the [code]#rangeRef# parameter provided. + The pitch of the constructed SYCL [code]#sampled_image# will be + the default size determined by the <>. + Zero or more properties can be provided to the constructed SYCL + [code]#sampled_image# via an instance of + [code]#property_list#. + +a@ +[source] +---- +sampled_image(const void *hostPointer, +image_format format, + image_sampler sampler, + const range &rangeRef, + const range &pitch, + const property_list &propList = {}) +---- + a@ Available only when: [code]#dimensions > 1#. + +Construct a SYCL [code]#sampled_image# instance with the +[code]#hostPointer# parameter provided. The ownership of this +memory is given to the constructed SYCL [code]#sampled_image# for +the duration of its lifetime. +The host address is [code]#const#, so the host accesses must be +read-only. Since, the [code]#hostPointer# is [code]#const#, this +image is only initialized with this memory and there is no write after +destruction. +The element size of the constructed SYCL [code]#sampled_image# +will be derived from the [code]#format# parameter. +Accessors that read the constructed SYCL [code]#sampled_image# will +use the [code]#sampler# parameter to sample the image. +The range of the constructed SYCL [code]#sampled_image# is +specified by the [code]#rangeRef# parameter provided. +The pitch of the constructed SYCL [code]#sampled_image# will be +the [code]#pitch# parameter provided. +Zero or more properties can be provided to the constructed SYCL +[code]#sampled_image# via an instance of +[code]#property_list#. + +a@ +[source] +---- +sampled_image(std::shared_ptr& hostPointer, +image_format format, + image_sampler sampler, + const range &rangeRef, + const property_list &propList = {}) +---- + a@ Construct a SYCL [code]#sampled_image# instance with the + [code]#hostPointer# parameter provided. The ownership of this + memory is given to the constructed SYCL [code]#sampled_image# for + the duration of its lifetime. + The host address is [code]#const#, so the host accesses must be + read-only. Since, the [code]#hostPointer# is [code]#const#, this image is only + initialized with this memory and there is no write after its + destruction. + The element size of the constructed SYCL [code]#sampled_image# + will be derived from the [code]#format# parameter. + Accessors that read the constructed SYCL [code]#sampled_image# will + use the [code]#sampler# parameter to sample the image. + The range of the constructed SYCL [code]#sampled_image# is + specified by the [code]#rangeRef# parameter provided. + The pitch of the constructed SYCL [code]#sampled_image# will be + the default size determined by the <>. + Zero or more properties can be provided to the constructed SYCL + [code]#sampled_image# via an instance of + [code]#property_list#. + +a@ +[source] +---- +sampled_image(std::shared_ptr& hostPointer, +image_format format, + image_sampler sampler, + const range &rangeRef, + const range & pitch, + const property_list &propList = {}) +---- + a@ Construct a SYCL [code]#sampled_image# instance with the + [code]#hostPointer# parameter provided. The ownership of this + memory is given to the constructed SYCL [code]#sampled_image# for + the duration of its lifetime. + The host address is [code]#const#, so the host accesses can be + read-only. Since, the [code]#hostPointer# is [code]#const#, this image is only + initialized with this memory and there is no write after its + destruction. + The element size of the constructed SYCL [code]#sampled_image# + will be derived from the [code]#format# parameter. + Accessors that read the constructed SYCL [code]#sampled_image# will + use the [code]#sampler# parameter to sample the image. + The range of the constructed SYCL [code]#sampled_image# is + specified by the [code]#rangeRef# parameter provided. + The pitch of the constructed SYCL [code]#sampled_image# will be + the [code]#pitch# parameter provided. + Zero or more properties can be provided to the constructed SYCL + [code]#sampled_image# via an instance of + [code]#property_list#. + +|==== + + + +[[table.members.sampledImage]] +.Member functions of the [code]#sampled_image# class template +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +range get_range() const +---- + a@ Return a range object representing the + size of the image in terms of the number + of elements in each dimension as passed + to the constructor. + +a@ +[source] +---- +range get_pitch() const +---- + a@ Available only when: [code]#dimensions > 1#. + +Return a range object representing the +pitch of the image in bytes. + +a@ +[source] +---- +size_t size() const noexcept +---- + a@ Returns the total number of elements in the image. + Equal to [code]#+get_range()[0] * ... * get_range()[dimensions-1]+#. + +a@ +[source] +---- +size_t byte_size() const noexcept +---- + a@ Returns the size of the image storage in bytes. The number of + bytes may be greater than [code]#size()*element size# + due to padding of elements, rows and slices of the image for + efficient access. + +a@ +[source] +---- +template + auto get_access(Ts... args) +---- + a@ Returns a valid [code]#sampled_image_accessor# as if constructed via + passing the image and all provided arguments to the + [code]#sampled_image_accessor# constructor. + +Possible implementation: + +[code]#+return sampled_image_accessor{*this, args...};+# + +a@ +[source] +---- +template + auto get_host_access(Ts... args) +---- + a@ Returns a valid [code]#host_sampled_image_accessor# as if constructed + via passing the image and all provided arguments to the + [code]#host_sampled_image_accessor# constructor. + +Possible implementation: + +[code]#+return host_sampled_image_accessor{*this, args...};+# + +|==== + + + +[[sec:image-properties]] +==== Image properties + +The properties that can be provided when constructing the SYCL +[code]#unsampled_image# and [code]#sampled_image# classes are +describe in <>. + +// Interface for image properties +[source,,linenums] +---- +include::{header_dir}/imageProperties.h[lines=4..-1] +---- + + +[[table.properties.image]] +.Properties supported by the SYCL image classes +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Property @ Description +a@ +[source] +---- +property::image::use_host_ptr +---- + a@ The [code]#use_host_ptr# property adds the requirement that the <> must not allocate any memory for the [code]#image# and instead uses the provided host pointer directly. This prevents the <> from allocating additional temporary storage on the host. + +a@ +[source] +---- +property::image::use_mutex +---- + a@ The property adds the requirement that the memory which + is owned by the SYCL [code]#image# can be shared with the + application via a [code]#std::mutex# provided to the + property. The [code]#std::mutex# is locked by + the runtime whenever the data is in use and unlocked + otherwise. Data is synchronized with [code]#hostData#, when + the [code]#std::mutex# is unlocked by the runtime. + +a@ +[source] +---- +property::image::context_bound +---- + a@ The [code]#context_bound# property adds the requirement that the SYCL [code]#image# can only be associated with a single SYCL [code]#context# that is provided to the property. + +|==== + + +The constructors and member functions of the image [code]#property# classes +are listed in <> and +<> + + +[[table.constructors.properties.image]] +.Constructors of the image [code]#property# classes +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +property::image::use_host_ptr::use_host_ptr() +---- + a@ Constructs a SYCL [code]#use_host_ptr# property instance. + +a@ +[source] +---- +property::image::use_mutex::use_mutex(std::mutex &mutexRef) +---- + a@ Constructs a SYCL [code]#use_mutex# property instance with a reference to [code]#mutexRef# parameter provided. + +a@ +[source] +---- +property::image::context_bound::context_bound(context boundContext) +---- + a@ Constructs a SYCL [code]#context_bound# property instance with a copy of a SYCL [code]#context#. + +|==== + + + +[[table.members.properties.image]] +.Member functions of the image [code]#property# classes +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +std::mutex *property::image::use_mutex::get_mutex_ptr() const +---- + a@ Returns the [code]#std::mutex# which was specified when + constructing this SYCL [code]#use_mutex# property. + +a@ +[source] +---- +context property::image::context_bound::get_context() const +---- + a@ Returns the [code]#context# which was specified when + constructing this SYCL [code]#context_bound# property. + +|==== + + + +[[sec:image-sync-rules]] +==== Image synchronization rules + +The rules are similar to those described in <>. + +For the lifetime of the image object, the associated host memory must +be left available to the <> and the contents of the associated +host memory is unspecified until the image object is destroyed. If an +image object value is copied, then only a reference to the underlying +image object is copied. The underlying image object is reference-counted. +Only after all image value references to the underlying image object +have been destroyed is the actual image object itself destroyed. + +If an image object is constructed with associated host memory, then +its destructor blocks until all operations in all SYCL queues on +that image object have completed. Any modifications to the image data +will be copied back, if necessary, to the associated host memory. +Any errors occurring during destruction are reported to any associated +context's asynchronous error handler. If an image object is constructed +with a storage object, then the storage object defines what +synchronization or copying behavior occurs on image object destruction. + + +[[sec:sharing-host-memory-with-dm]] +=== Sharing host memory with the SYCL data management classes + +In order to allow the <> to do memory management and allow +for data dependencies, there are two classes defined, buffer and image. The +default behavior for them is that a "`raw`" pointer is given during the +construction of the data management class, with full ownership to use it until +the destruction of the SYCL object. + +In this section we go in greater detail on sharing or explicitly not +sharing host memory with the SYCL data classes, and we will use the buffer +class as an example. The same rules will apply to images as well. + + +==== Default behavior + +When using a SYCL buffer, the ownership of the pointer passed to the constructor +of the class is, by default, passed to <>, and that pointer cannot be used +on the host side until the buffer or image is destroyed. +A SYCL application can use memory managed by a SYCL buffer within the buffer scope +by using a [code]#host_accessor# as defined in <>. +However, there is no guarantee that the host accessor synchronizes with the +original host address used in its constructor. + +The pointer passed in is the one used to copy data back to the host, if needed, +before buffer destruction. The memory pointed by <> +will not be de-allocated by the runtime, +and the data is copied back from the device if there is +a need for it. + + +==== SYCL ownership of the host memory + +In the case where there is host memory to be used for initialization of data +but there is no intention of using that host memory after the buffer is +destroyed, then the buffer can take full ownership of that host memory. + +When a buffer owns the <> there is no copy back, by +default. In this situation, the SYCL application may pass a unique +pointer to the host data, which will be then used by the runtime +internally to initialize the data in the device. + +For example, the following could be used: + +[source,,linenums] +---- +{ + auto ptr = std::make_unique(-1234); + buffer b { std::move(ptr), range { 1 } }; + // ptr is not valid anymore. + // There is nowhere to copy data back +} +---- + +However, optionally the [code]#buffer::set_final_data()# can be +set to a [code]#std::weak_ptr# to enable copying data +back, to another host memory address that is going to be valid after +buffer construction. + +[source,,linenums] +---- +{ + auto ptr = std::make_unique(-42); + buffer b { std::move(ptr), range { 1 } }; + // ptr is not valid anymore. + // There is nowhere to copy data back. + // To get copy back, a location can be specified: + b.set_final_data(std::weak_ptr { .... }) +} +---- + + +==== Shared SYCL ownership of the host memory + +When an instance of [code]#std::shared_ptr# is passed to the buffer +constructor, then the buffer object and the developer's application share +the memory region. If the shared pointer is still used on the application's +side then the data will be copied back from the buffer or image and will be +available to the application after the buffer or image is destroyed. + +If the [code]#shared_ptr# is not empty, the contents of the referenced +memory are used to initialize the buffer. If the [code]#shared_ptr# is +empty, then the buffer is created with uninitialized memory. + +When the buffer is destroyed and the data have potentially been updated, if +the number of copies of the shared pointer outside the runtime is 0, there +is no user-side shared pointer to read the data. Therefore the data is not +copied out, and the buffer destructor does not need to wait for the data +processes to be finished, as the outcome is not needed on the application's +side. + +This behavior can be overridden using the [code]#set_final_data()# +member function of the buffer class, which will by any means force the buffer +destructor to wait until the data is copied to wherever the +[code]#set_final_data()# member function has put the data (or not wait nor copy +if set final data is [code]#nullptr)#. + +[source,,linenums] +---- +{ + std::shared_ptr ptr { data }; + { + buffer b { ptr, range<2>{ 10, 10 } }; + // update the data + [...] + } // Data is copied back because there is an user side shared_ptr +} +---- + +[source,,linenums] +---- +{ + std::shared_ptr ptr { data }; + { + buffer b { ptr, range<2>{ 10, 10 } }; + // update the data + [...] + ptr.reset(); + } // Data is not copied back, there is no user side shared_ptr. +} +---- + + +[[subsec:mutex]] +=== Synchronization primitives + +When the user wants to use the [code]#buffer# simultaneously in +the <> and their own code (e.g. a multi-threaded +mechanism) and wants to use manual synchronization without using a +[code]#host_accessor#, a [code]#std::mutex# can be passed to the +[code]#buffer# constructor via the right [code]#property#. + +The runtime promises to lock the mutex whenever the data is in use and +unlock it when it no longer needs it. + +[source,,linenums] +---- +{ + std::mutex m; + auto shD = std::make_shared(42) + sycl::buffer b { shD, { sycl::property::buffer::use_mutex { m } } }; + { + std::lock_guard lck { m }; + // User accesses the data + do_something(shD); + /* m is unlocked when lck goes out of scope, by normal end of this + block but also if an exception is thrown for example */ + } +} +---- + +When the runtime releases the mutex the user is guaranteed that the data was +copied back on the shared pointer --- unless the final data destination has been +changed using the member function [code]#set_final_data()#. + + +[[subsec:accessors]] +=== Accessors + +// \input{accessors} +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% begin accessors %%%%%%%%%%%%%%%%%%%%%%%%%%%% + +<> provide three different capabilities: they provide +access to the data managed by a <> or <>, they provide access +to local memory on a <>, and they define the *requirements* to memory +objects which determine the scheduling of <> (see +<>). + +A memory object requirement is created when an accessor is constructed, unless +the accessor is a placeholder in which case the requirement is created when +the accessor is bound to a <> by calling [code]#handler::require()#. + +There are several different {cpp} classes that implement accessors: + +* The [code]#accessor# class provides access to data in a [code]#buffer# from + within a <>. + +* The [code]#host_accessor# class provides access to data in a [code]#buffer# + from host code that is outside of a <>. These accessors are + typically used in <>. + +* The [code]#local_accessor# class provides access to device local memory from + within a <>. + +* The [code]#unsampled_image_accessor# and [code]#sampled_image_accessor# + classes provide access to data in an [code]#unsampled_image# and + [code]#sampled_image# from within a <>. + +* The [code]#host_unsampled_image_accessor# and + [code]#host_sampled_image_accessor# classes provide access to data in an + [code]#unsampled_image# and [code]#sampled_image# from host code that is + outside of a <>. These accessors are typically used in + <>. + +Accessor objects must always be constructed in host code, either in +<> or in <>. Whether the constructor +blocks waiting for data to synchronize depends on the type of accessor. Those +accessors which provide access to data within a <> do not block. +Instead, these accessors define a requirement which influences the scheduling +of the <>. Those accessors which provide access to data from host +code do block until the data is available on the host. + +For those accessors which provide access to data within a <>, the +member functions which access data should only be called from within the +<>. Programs which call these member functions from outside of the +<> are ill formed. The sections below describe exactly which member +functions fall into this category. + + +==== Data type + +All accessors have a [code]#dataT# template parameter which specifies the type +of each element that the accessor accesses. For [code]#accessor# and +[code]#host_accessor#, this type must either match the type of each element in +the underlying [code]#buffer#, or it must be a [code]#const# qualified version +of that type. + +For the image accessors ([code]#unsampled_image_accessor#, +[code]#sampled_image_accessor#, [code]#host_unsampled_image_accessor#, and +[code]#host_sampled_image_accessor#), [code]#dataT# must be one of: + +* [code]#int4# ([code]#vec#), +* [code]#uint4# ([code]#vec#), +* [code]#float4# ([code]#vec#), or +* [code]#half4# ([code]#vec#) + +For [code]#local_accessor# see <> for the allowable +[code]#dataT# types. + + +==== Access modes + +Most accessors have an [code]#accessMode# template parameter which specifies +whether the accessor can read or write the underlying data. This information +is used by the runtime when defining the requirements for the associated +<>, and it tells the runtime whether data needs to be transferred to +or from a device before data can be accessed through the accessor. + +The [code]#access_mode# enumeration, shown in <>, +describes the potential modes of an accessor. However, not all accessor +classes support all modes, so see the description of each class for more +details. + +[source,,linenums] +---- +include::{header_dir}/accessMode.h[lines=4..-1] +---- + +[[table.accessors.accessmode]] +.Enumeration of access modes available to accessors +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ access_mode @ Description +a@ +[source] +---- +access_mode::read +---- + a@ Read-only access. + +a@ +[source] +---- +access_mode::write +---- + a@ Write-only access. + +a@ +[source] +---- +access_mode::read_write +---- + a@ Read and write access. + +|==== + + +==== Deduction tags + +Some accessor constructors take a [code]#TagT# parameter, which is used to +deduce template arguments for the constructor's class. Each of the access +modes in <> has an associated tag, but there are +additional tags which set other template parameters in addition to the access +mode. The synopsis below shows the namespace scope variables that the +implementation provides as possible values for the [code]#TagT# parameter. + +[source,,linenums] +---- +include::{header_dir}/accessTags.h[lines=4..-1] +---- + +The precise meaning of these tags depends on the specific accessor class +that is being constructed, so they are described more fully below in the +section that pertains to each of the accessor types. + + +==== Properties + +All accessor constructors accept a [code]#property_list# parameter, which +affects the semantics of the accessor. <> shows +the set of all possible accessor properties and tells which properties are +allowed when constructing each accessor class. + +[source,,linenums] +---- +include::{header_dir}/accessProperties.h[lines=4..-1] +---- + +[[table.accessors.properties]] +.Properties supported by accessors +[width="100%",options="header",cols="20%,35%,45%"] +|==== +|Property |Allowed with |Description + +|[code]#property::no_init# +|[code]#accessor# + + [code]#host_accessor# + + [code]#unsampled_image_accessor# + + [code]#host_unsampled_image_accessor# +|This property is useful when an application expects to write new values to all +of the accessor's elements without reading their previous values. The +implementation can use this information to avoid copying the accessor's data in +some cases. Following is a more formal description. + +This property is allowed only for accessors with [code]#access_mode::write# or +[code]#access_mode::read_write# access modes. Attempting to construct an +[code]#access_mode::read# accessor with this property causes an +[code]#exception# with the [code]#errc::invalid# error code to be thrown. + +The usage of this property is different depending on whether the accessor's +underlying data type [code]#dataT# is an implicit-lifetime type (as defined in +the {cpp} core language). If it is an implicit-lifetime type, the accessor +implicitly creates objects of that type with indeterminate values. The +application is not required to write values to each element of the accessor, +but unwritten elements of the accessor's buffer or image receive indeterminate +values, even if those buffer or image elements previously had defined values. +If this is a <>, this applies only to the elements within the +accessor's range. The values of unwritten elements outside of this range are +preserved. + +If [code]#dataT# is not an implicit-lifetime type, the accessor merely +allocates uninitialized memory, and the application is responsible for +constructing objects in that memory (e.g. by calling placement-new). The +application must create an object in each element of the accessor unless the +corresponding element of the underlying buffer did not previously contain an +object. If this is a <>, this applies only to the elements +within the accessor's range. The content of objects in the buffer outside of +this range is preserved. +|==== + +[NOTE] +==== +As stated above, the [code]#property::no_init# property requires the +application to construct an object for each accessor element when the element's +type is not an implicit-lifetime type (except in the case when the +corresponding buffer element did not previously contain an object). The reason +for this requirement is to avoid the possibility of overwriting a valid object +with indeterminate bytes, for example, when a <> using the accessor +completes. This means that the implementation can unconditionally copy memory +from the device back to the host when the <> completes, regardless of +whether the [code]#dataT# type is an implicit-lifetime type. +==== + +The constructors of the accessor property classes are listed in +<>. + +[[table.accessors.properties.constructors]] +.Constructors of the accessor property classes +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +property::no_init::no_init() +---- + a@ Constructs a [code]#no_init# property instance. + +|==== + + +==== Read only accessors + +Accessors which have an [code]#accessMode# template parameter can be declared +as read-only by specifying [code]#access_mode::read# for the template +parameter. A read-only accessor provides read-only access to the underlying +data and provides a "read" requirement for the memory object when it is +constructed. + +The [code]#dataT# template parameter for a read-only accessor can optionally +be [code]#const# qualified, and the semantics of the accessor are unchanged. +For example, an accessor declared with [code]#const dataT# and +[code]#access_mode::read# has the same semantics as an accessor declared with +[code]#dataT# and [code]#access_mode::read#. + +As detailed in the sections below, some accessor types have a default value +for [code]#accessMode#, which depends on whether the [code]#dataT# parameter +is [code]#const# qualified. This provides a convenient way to declare a +read-only accessor without explicitly specifying the access mode. + +A [code]#const# qualified [code]#dataT# is only allowed for a read-only +accessor. Programs which specify a [code]#const# qualified [code]#dataT# and +any access mode other than [code]#access_mode::read# are ill formed, and the +implementation must issue a diagnostic in this case. + +Each accessor class also provides implicit conversions between the two forms +of read-only accessors. This makes it possible, for example, to assign an +accessor whose type has [code]#const dataT# and [code]#access_mode::read# to an +accessor whose type has [code]#dataT# and [code]#access_mode::read#, so long as +the other template parameters are the same. There is also an implicit +conversion from a read-write accessor to either of the forms of a read-only +accessor. These implicit conversions are described in detail for each accessor +class in the sections that follow. + + +==== Accessing elements of an accessor + +Accessors of type [code]#accessor#, [code]#host_accessor#, and +[code]#local_accessor# can have zero, one, two, or three dimensions. A zero +dimension accessor provides access to a single scalar element via an implicit +conversion operator to the underlying type of that element. + +One, two, or three dimensional specializations of these accessors provide +access to the elements they contain in two ways. The first way is through a +subscript operator that takes an instance of an [code]#id# class which has the +same dimensionality as the accessor. The second way is by passing a single +[code]#size_t# value to multiple consecutive subscript operators as specified +in <>. + +In all these cases, the reference to the contained element is of type +[code]#const dataT &# for read-only accessors and of type [code]#dataT &# for +other accessors. + +Accessors of all types have a range that defines the set of indices that may be +used to access elements. For buffer accessors, this is the range of the +underlying buffer, unless it is a <> in which case the range +comes from the accessor's constructor. For image accessors, this is the range +of the underlying image. Local accessors specify the range when the accessor +is constructed. Any attempt to access an element via an index that is outside +of this range produces undefined behavior. + + +==== Container interface + +Accessors of type [code]#accessor#, [code]#host_accessor#, and +[code]#local_accessor# meet the {cpp} requirement of +[code]#ReversibleContainer#. The exception to this is that only +[code]#local_accessor# owns the underlying data, meaning that its destructor +destroys elements and frees the memory. The [code]#accessor# and +[code]#host_accessor# types don't destroy any elements or free the memory on +destruction. The iterator for the container interface meets the {cpp} +requirement of [code]#LegacyRandomAccessIterator# and the underlying +pointers/references correspond to the address space specified by the accessor +type. For multidimensional accessors the iterator linearizes the data +according to <>. + + +[[sec:accessors.ranged]] +==== Ranged accessors + +Accessors of type [code]#accessor# and [code]#host_accessor# can be constructed +from a sub-range of a [code]#buffer# by providing a range and offset to the +constructor. This limits the elements that can be accessed to the specified +sub-range, which allows the implement to perform certain optimizations such +as reducing the amount of memory that needs to be copied to or from a device. + +If the ranged accessor is multi-dimensional, the sub-range is allowed to +describe a region of memory in the underlying buffer that is not contiguous +in the linear address space. It is also legal to construct several ranged +accessors for the same underlying buffer, either overlapping or +non-overlapping. + +A ranged accessor still creates a requisite for the entire underlying buffer, +even for the portions not within the range. For example, if one command writes +through a ranged accessor to one region of a buffer and a second command reads +through a ranged accessor from a non-overlapping region of the same buffer, the +second command must still be scheduled after the first because the requisites +for the two commands are on the entire buffer, not on the sub-ranges of the +ranged accessors. + +Most of the accessor member functions which provide a reference to the +underlying buffer elements are affected by a ranged accessor's offset and +range. For example, calling [code]#operator[](0)# on a one-dimensional ranged +accessor returns a reference to the element at the position specified by the +accessor's offset, which is not necessarily the first element in the buffer. +In addition, the accessor's iterator functions iterate only over the elements +that are within the sub-range. + +The only exceptions are the [code]#get_pointer# and [code]#get_multi_ptr# +member functions, which return a pointer to the beginning of the underlying +buffer regardless of the accessor's offset. Applications using these functions +must take care to manually add the offset before dereferencing the pointer +because accessing an element that is outside of the accessor's range results +in undefined behavior. + + +==== Buffer accessor for commands + +The [code]#accessor# class provides access to data in a [code]#buffer# from +within a <> or from within a <>. When used in +a <>, it accesses the contents of the buffer via the +device's <>. These two forms of the accessor are distinguished +by the [code]#accessTarget# template parameter as shown in +<>. Both forms support the +following values for the [code]#accessMode# template parameter: +[code]#access_mode::read#, [code]#access_mode::write# and +[code]#access_mode::read_write#. + +[[table.accessors.command.buffer.capabilities]] +.Description of access targets for buffer accessors +[width="100%",options="header",cols="25%,75%"] +|==== +| Access target | Meaning +| [code]#target::device# + | Access a buffer from a <> via device global memory. +| [code]#target::host_task# + | Access a buffer from a <>. +|==== + +Programs which specify the access target as [code]#target::device# and then use +the [code]#accessor# from a <> are ill formed. Likewise, programs +which specify the access target as [code]#target::host_task# and then use the +[code]#accessor# from a <> are ill formed. + +The dimensionality of the accessor must match the underlying buffer, however, +there is a special case if the buffer is one-dimensional. In this case, the +accessor may either be one-dimensional or it may be zero-dimensional. A +zero-dimensional accessor has access to just the first element of the buffer, +whereas a one-dimensional buffer has access to the entire buffer. + +Certain [code]#accessor# constructors create a "placeholder" accessor. Such +an accessor is bound to a [code]#buffer# and its semantics such as access +target and access mode are defined. However, a placeholder accessor is not +yet bound to a <>. Before such an accessor can be used in a +<>, it must be bound by calling [code]#handler::require()#. If a +placeholder accessor is passed as an argument to a <> without first +being bound to a <> with [code]#handler::require()#, the +implementation throws a synchronous [code]#exception# with the +[code]#errc::kernel_argument# error code when the <> is submitted. + + +===== Interface for buffer command accessors + +A synopsis of the [code]#accessor# class is provided below, showing the +interface when it is specialized with [code]#target::device# or +[code]#target::host_task#. Since some of the class types and member functions +have the same name and meaning as other accessors, the common types and +functions are described in <>. The member types +are listed in <> and +<>. The constructors are listed in +<>, and the member functions are +listed in <> and +<>. + +The additional common special member functions and common member functions are +listed in <> in +<> and +<>, respectively. For valid implicit +conversions between accessor types refer to +<>. Additionally, accessors of the +same type must be equality comparable both in the host application and also in +<>. + +[source,,linenums] +---- +include::{header_dir}/accessorBuffer.h[lines=4..-1] +---- + + +[[table.accessors.command.buffer.types]] +.Member types of the [code]#accessor# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member types @ Description +a@ +[source] +---- +template +accessor_ptr +---- + a@ If [code]#(accessTarget == target::device)#: + [code]#multi_ptr#. + +The definition of this type is not specified when +[code]#(accessTarget == target::host_task)#. + +|==== + + +[[table.accessors.command.buffer.constructors]] +.Constructors of the [code]#accessor# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +accessor() +---- + a@ Constructs an empty accessor which fulfills the following + post-conditions: +-- + * [code]#(empty() == true)# + * All size queries return [code]#0#. + * The only iterator that can be obtained is [code]#nullptr#. + * Trying to access the underlying memory is undefined behavior. + +A default constructed accessor can be passed to a <> +but it is not valid to register it with the command group handler. +-- + +a@ +[source] +---- +template +accessor(buffer &bufferRef, + const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions == 0)#. + +Constructs a placeholder [code]#accessor# for accessing the first element of a +[code]#buffer#. The optional [code]#property_list# provides properties for the +constructed accessor. + +a@ +[source] +---- +template +accessor(buffer &bufferRef, + handler &commandGroupHandlerRef, + const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions == 0)#. + +Constructs an [code]#accessor# for accessing the first element of a +[code]#buffer# within a <> on the [code]#queue# +associated with [code]#commandGroupHandlerRef#. The optional +[code]#property_list# provides properties for the constructed accessor. + +a@ +[source] +---- +template +accessor(buffer &bufferRef, + const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions > 0)#. + +Constructs a placeholder [code]#accessor# for accessing a [code]#buffer#. The +optional [code]#property_list# provides properties for the constructed +accessor. + +a@ +[source] +---- +template +accessor(buffer &bufferRef, + TagT tag, const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions > 0)#. + +Constructs a placeholder [code]#accessor# for accessing a [code]#buffer#. The +[code]#tag# is used to deduce template arguments of the accessor as described +in <>. The optional [code]#property_list# +provides properties for the constructed accessor. + +a@ +[source] +---- +template +accessor(buffer &bufferRef, + handler &commandGroupHandlerRef, + const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions > 0)#. + +Constructs an [code]#accessor# for accessing a [code]#buffer# within a +<> on the [code]#queue# associated with +[code]#commandGroupHandlerRef#. The optional [code]#property_list# provides +properties for the constructed accessor. + +a@ +[source] +---- +template +accessor(buffer &bufferRef, + handler &commandGroupHandlerRef, + TagT tag, const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions > 0)#. + +Constructs an [code]#accessor# for accessing a [code]#buffer# within a +<> on the [code]#queue# associated with +[code]#commandGroupHandlerRef#. The [code]#tag# is used to deduce template +arguments of the accessor as described in <>. +The optional [code]#property_list# provides properties for the constructed +accessor. + +a@ +[source] +---- +template +accessor(buffer &bufferRef, + range accessRange, + const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions > 0)#. + +Constructs a placeholder [code]#accessor# that is a <>, where +the range starts at the beginning of the [code]#buffer#. The optional +[code]#property_list# provides properties for the constructed accessor. + +Throws an [code]#exception# with the [code]#errc::invalid# error code if +[code]#accessRange# exceeds the range of [code]#bufferRef# in any dimension. + +a@ +[source] +---- +template +accessor(buffer &bufferRef, + range accessRange, + TagT tag, const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions > 0)#. + +Constructs a placeholder [code]#accessor# that is a <>, where +the range starts at the beginning of the [code]#buffer#. The [code]#tag# is +used to deduce template arguments of the accessor as described in +<>. The optional [code]#property_list# +provides properties for the constructed accessor. + +Throws an [code]#exception# with the [code]#errc::invalid# error code if +[code]#accessRange# exceeds the range of [code]#bufferRef# in any dimension. + +a@ +[source] +---- +template +accessor(buffer &bufferRef, + range accessRange, + id accessOffset, + const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions > 0)#. + +Constructs a placeholder [code]#accessor# that is a <>, where +the range starts at an offset from the beginning of the [code]#buffer#. The +optional [code]#property_list# provides properties for the constructed +accessor. + +Throws an [code]#exception# with the [code]#errc::invalid# error code if +the sum of [code]#accessRange# and [code]#accessOffset# exceeds the range of +[code]#bufferRef# in any dimension. + +a@ +[source] +---- +template +accessor(buffer &bufferRef, + range accessRange, + id accessOffset, + TagT tag, const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions > 0)#. + +Constructs a placeholder [code]#accessor# that is a <>, where +the range starts at an offset from the beginning of the [code]#buffer#. The +[code]#tag# is used to deduce template arguments of the accessor as described +in <>. The optional [code]#property_list# +provides properties for the constructed accessor. + +Throws an [code]#exception# with the [code]#errc::invalid# error code if +the sum of [code]#accessRange# and [code]#accessOffset# exceeds the range of +[code]#bufferRef# in any dimension. + +a@ +[source] +---- +template +accessor(buffer &bufferRef, + handler &commandGroupHandlerRef, + range accessRange, + const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions > 0)#. + +Constructs an [code]#accessor# that is a <>, where the range +starts at the beginning of the [code]#buffer#. The accessor can only be used +in a <> on the [code]#queue# associated with +[code]#commandGroupHandlerRef#. The optional [code]#property_list# provides +properties for the constructed accessor. + +Throws an [code]#exception# with the [code]#errc::invalid# error code if +[code]#accessRange# exceeds the range of [code]#bufferRef# in any dimension. + +a@ +[source] +---- +template +accessor(buffer &bufferRef, + handler &commandGroupHandlerRef, + range accessRange, + TagT tag, const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions > 0)#. + +Constructs an [code]#accessor# that is a <>, where the range +starts at the beginning of the [code]#buffer#. The accessor can only be used +in a <> on the [code]#queue# associated with +[code]#commandGroupHandlerRef#. The [code]#tag# is used to deduce template +arguments of the accessor as described in <>. +The optional [code]#property_list# provides properties for the constructed +accessor. + +Throws an [code]#exception# with the [code]#errc::invalid# error code if +[code]#accessRange# exceeds the range of [code]#bufferRef# in any dimension. + +a@ +[source] +---- +template +accessor(buffer &bufferRef, + handler &commandGroupHandlerRef, + range accessRange, + id accessOffset, + const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions > 0)#. + +Constructs an [code]#accessor# that is a <>, where the range +starts at an offset from the beginning of the [code]#buffer#. The accessor can +only be used in a <> on the [code]#queue# associated with +[code]#commandGroupHandlerRef#. The optional [code]#property_list# provides +properties for the constructed accessor. + +Throws an [code]#exception# with the [code]#errc::invalid# error code if +the sum of [code]#accessRange# and [code]#accessOffset# exceeds the range of +[code]#bufferRef# in any dimension. + +a@ +[source] +---- +template +accessor(buffer &bufferRef, + handler &commandGroupHandlerRef, + range accessRange, + id accessOffset, + TagT tag, const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions > 0)#. + +Constructs an [code]#accessor# that is a <>, where the range +starts at an offset from the beginning of the [code]#buffer#. The accessor can +only be used in a <> on the [code]#queue# associated with +[code]#commandGroupHandlerRef#. The [code]#tag# is used to deduce template +arguments of the accessor as described in <>. +The optional [code]#property_list# provides properties for the constructed +accessor. + +Throws an [code]#exception# with the [code]#errc::invalid# error code if +the sum of [code]#accessRange# and [code]#accessOffset# exceeds the range of +[code]#bufferRef# in any dimension. + +|==== + + +[[table.accessors.command.buffer.members]] +.Member functions of the [code]#accessor# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +void swap(accessor &other); +---- + a@ Swaps the contents of the current accessor with the contents of + [code]#other#. + +a@ +[source] +---- +bool is_placeholder() const +---- + a@ Returns [code]#true# if the accessor was constructed as a placeholder. + Otherwise returns [code]#false#. + +a@ +[source] +---- +id get_offset() const +---- + a@ Available only when [code]#(dimensions > 0)#. + +If this is a <>, returns the offset that was specified when the +accessor was constructed. For other accessors, returns the default constructed +[code]#id{}#. + +a@ +[source] +---- +template +accessor_ptr get_multi_ptr() const noexcept +---- + a@ Returns a [code]#multi_ptr# to the start of this accessor's underlying + buffer, even if this is a <> whose range does not start + at the beginning of the buffer. + +This function may only be called from within a <>. + +|==== + + +[[sec:accessor.command.buffer.tags]] +===== Deduction tags for buffer command accessors + +Some [code]#accessor# constructors take a [code]#TagT# parameter, which is used +to deduce template arguments. The permissible values for this parameter are +listed in <> along with the access mode and +accessor target that they imply. + +[[table.accessors.command.buffer.tags]] +.Enumeration of tags available for [code]#accessor# construction +[width="100%",options="header",cols="33%,33%,34%"] +|==== +| Tag value | Access mode | Accessor target +| [code]#read_write# + | [code]#access_mode::read_write# + | [code]#target::device# +| [code]#read_only# + | [code]#access_mode::read# + | [code]#target::device# +| [code]#write_only# + | [code]#access_mode::write# + | [code]#target::device# +| [code]#read_write_host_task# + | [code]#access_mode::read_write# + | [code]#target::host_task# +| [code]#read_only_host_task# + | [code]#access_mode::read# + | [code]#target::host_task# +| [code]#write_only_host_task# + | [code]#access_mode::write# + | [code]#target::host_task# +|==== + + +[[sec:accessor.command.buffer.conversions]] +===== Read only buffer command accessors and implicit conversions + +<> shows the specializations of +[code]#accessor# with [code]#target::device# or +[code]#target::host_task# that are read-only accessors. There is an implicit +conversion between any of these specializations, provided that all other +template parameters are the same. + +[[table.accessors.command.buffer.read-only]] +.Specializations of [code]#accessor# that are read-only +[width="100%",options="header",cols="50%,50%"] +|==== +| Data type | Access mode +| not const-qualified | [code]#access_mode::read# +| const-qualified | [code]#access_mode::read# +|==== + +There is also an implicit conversion from the read-write specialization shown +in <> to any of the read-only +specializations shown in <>, provided +that all other template parameters are the same. + +[[table.accessors.command.buffer.read-write]] +.Specializations of [code]#host_accessor# that are read-write +[width="100%",options="header",cols="50%,50%"] +|==== +| Data type | Access mode +| not const-qualified | [code]#access_mode::read_write# +|==== + + +===== Deprecated features of the [code]#accessor# class + +All of the features defined in this section are deprecated and will likely be +removed from a future version of the specification. + + +====== Aliased names + +The enumerated value [code]#target::global_buffer# is an alias for [code]#target:::device#. +It has the same type and value as its alias. + +The enumerated type [code]#access::target# is an alias for [code]#target#, and +the enumerated type [code]#access::mode# is an alias for [code]#access_mode#. + + +====== Discard access modes + +An [code]#accessor# instance specialized with access mode +[code]#access_mode::discard_write# has the same behavior as an [code]#accessor# +instance of mode [code]#access_mode::write# that is constructed with the +property [code]#property::no_init#. + +An [code]#accessor# instance specialized with access mode +[code]#access_mode::discard_read_write# has the same behavior as an +[code]#accessor# instance of mode [code]#access_mode::read_write# that is +constructed with the property [code]#property::no_init#. + + +====== Placeholder template parameter + +The [code]#accessor# template parameter [code]#isPlaceholder# is allowed to be +specified, but it has no bearing on whether the [code]#accessor# instance is a +placeholder. This is determined solely by the constructor used to create the +instance. + +The associated type [code]#access::placeholder# is also deprecated. + + +====== Additional member functions for [code]#target::device# specialization + +Specializations of the [code]#accessor# class with [code]#target::device# have +the additional member functions described in +<>. + +[[table.accessors.deprecated.command.buffer.members]] +.Deprecated member functions of the [code]#accessor# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +size_t get_size() const +---- + a@ Returns the same value as [code]#byte_size()#. +a@ +[source] +---- +size_t get_count() const +---- + a@ Returns the same value as [code]#size()#. + +|==== + + +====== Accessor specialization with [code]#target::constant_buffer# + +The [code]#accessor# class may be specialized with target +[code]#target::constant_buffer#, which results in an accessor that can be used +within a <> to access the contents of a buffer through +the device's <>. + +As with other [code]#accessor# specializations, the dimensionality must match +the underlying buffer, however there is a special case if the buffer is +one-dimensional. In this case, the accessor may either be one-dimensional or +it may be zero-dimensional. A zero-dimensional accessor has access to just the +first element of the buffer, whereas a one-dimensional buffer has access to the +entire buffer. + +This specialization of [code]#accessor# is available only for the access mode +[code]#access_mode::read#. + +This accessor type can be constructed as a "placeholder" accessor. As with +other [code]#accessor# specializations that are placeholders, +[code]#handler::require()# must be called before passing a placeholder accessor +to a <>. If the application neglects to call +[code]#handler::require()# on a placeholder accessor, the implementation throws +a synchronous [code]#exception# with the [code]#errc::kernel_argument# error +code when the <> is submitted. + +A synopsis for this specialization of [code]#accessor# is provided below. +Since some of the class types and member functions have the same name and +meaning as other accessors, the common types and functions are described in +<>. The member types are listed in +<>. The constructors are listed in +<>, and the member functions +are listed in <> and +<>. + +The additional common special member functions and common member functions are +listed in <> in +<> and +<>, respectively. Additionally, +accessors of the same type must be equality comparable. + +[source,,linenums] +---- +include::{header_dir}/accessorDeprecatedConstant.h[lines=4..-1] +---- + + +[[table.accessors.deprecated.constant.constructors]] +.Constructors of the deprecated constant accessor +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +template +accessor(buffer &bufferRef, + const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions == 0)#. + +Constructs a placeholder [code]#accessor# for accessing the first element of a +[code]#buffer#. The optional [code]#property_list# provides properties for the +constructed accessor. + +a@ +[source] +---- +template +accessor(buffer &bufferRef, + handler &commandGroupHandlerRef, + const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions == 0)#. + +Constructs an [code]#accessor# for accessing the first element of a +[code]#buffer# within a <> on the [code]#queue# +associated with [code]#commandGroupHandlerRef#. The optional +[code]#property_list# provides properties for the constructed accessor. + +a@ +[source] +---- +template +accessor(buffer &bufferRef, + const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions > 0)#. + +Constructs a placeholder [code]#accessor# for accessing a [code]#buffer#. The +optional [code]#property_list# provides properties for the constructed +accessor. + +a@ +[source] +---- +template +accessor(buffer &bufferRef, + handler &commandGroupHandlerRef, + const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions > 0)#. + +Constructs an [code]#accessor# for accessing a [code]#buffer# within a +<> on the [code]#queue# associated with +[code]#commandGroupHandlerRef#. The optional [code]#property_list# provides +properties for the constructed accessor. + +a@ +[source] +---- +template +accessor(buffer &bufferRef, + range accessRange, + const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions > 0)#. + +Constructs a placeholder [code]#accessor# that is a <>, where +the range starts at the beginning of the [code]#buffer#. The optional +[code]#property_list# provides properties for the constructed accessor. + +Throws an [code]#exception# with the [code]#errc::invalid# error code if +[code]#accessRange# exceeds the range of [code]#bufferRef# in any dimension. +a@ +[source] +---- +template +accessor(buffer &bufferRef, + range accessRange, + id accessOffset, + const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions > 0)#. + +Constructs a placeholder [code]#accessor# that is a <>, where +the range starts at an offset from the beginning of the [code]#buffer#. The +optional [code]#property_list# provides properties for the constructed +accessor. + +Throws an [code]#exception# with the [code]#errc::invalid# error code if +the sum of [code]#accessRange# and [code]#accessOffset# exceeds the range of +[code]#bufferRef# in any dimension. + +a@ +[source] +---- +template +accessor(buffer &bufferRef, + handler &commandGroupHandlerRef, + range accessRange, + const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions > 0)#. + +Constructs an [code]#accessor# that is a <>, where the range +starts at the beginning of the [code]#buffer#. The accessor can only be used +in a <> on the [code]#queue# associated with +[code]#commandGroupHandlerRef#. The optional [code]#property_list# provides +properties for the constructed accessor. + +Throws an [code]#exception# with the [code]#errc::invalid# error code if +[code]#accessRange# exceeds the range of [code]#bufferRef# in any dimension. + +a@ +[source] +---- +template +accessor(buffer &bufferRef, + handler &commandGroupHandlerRef, + range accessRange, + id accessOffset, + const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions > 0)#. + +Constructs an [code]#accessor# that is a <>, where the range +starts at an offset from the beginning of the [code]#buffer#. The accessor can +only be used in a <> on the [code]#queue# associated with +[code]#commandGroupHandlerRef#. The optional [code]#property_list# provides +properties for the constructed accessor. + +Throws an [code]#exception# with the [code]#errc::invalid# error code if +the sum of [code]#accessRange# and [code]#accessOffset# exceeds the range of +[code]#bufferRef# in any dimension. + +|==== + + +[[table.accessors.deprecated.constant.members]] +.Member functions of the deprecated constant accessor +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +id get_offset() const +---- + a@ Available only when [code]#(dimensions > 0)#. + +If this is a <>, returns the offset that was specified when +the accessor was constructed, otherwise returns the default constructed +[code]#id{}#. + +a@ +[source] +---- +constant_ptr get_pointer() const noexcept +---- + a@ Returns a [code]#multi_ptr# to the start of this accessor's underlying + buffer, even if this is a <> whose range does not start + at the beginning of the buffer. + +|==== + +====== Accessor specialization with [code]#target::host_buffer# + +The [code]#accessor# class may be specialized with target +[code]#target::host_buffer#, which results in a host accessor similar to +[code]#host_accessor#. This specialization provides access to data in a +[code]#buffer# from host code that is outside of a <>, and +constructors of this specialization block until the requested data is available +on the host. + +As with other [code]#accessor# specializations, the dimensionality must match +the underlying buffer, however there is a special case if the buffer is +one-dimensional. In this case, the accessor may either be one-dimensional or +it may be zero-dimensional. A zero-dimensional accessor has access to just the +first element of the buffer, whereas a one-dimensional buffer has access to the +entire buffer. + +This specialization of [code]#accessor# is available for all access modes +except for [code]#access_mode::atomic#. + +A synopsis for this specialization of [code]#accessor# is provided below. +Since some of the class types and member functions have the same name and +meaning as other accessors, the common types and functions are described in +<>. The member types are listed in +<>. The constructors are listed in +<>, and the member functions are +listed in <> and +<>. + +The additional common special member functions and common member functions are +listed in <> in +<> and +<>, respectively. Additionally, +accessors of the same type must be equality comparable. + +[source,,linenums] +---- +include::{header_dir}/accessorDeprecatedHost.h[lines=4..-1] +---- + + +[[table.accessors.deprecated.host.constructors]] +.Constructors of the deprecated host buffer accessor +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +template +accessor(buffer &bufferRef, + const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions == 0)#. + +Constructs an [code]#accessor# for accessing the first element of a +[code]#buffer# immediately on the host. The optional [code]#property_list# +provides properties for the constructed accessor. + +a@ +[source] +---- +template +accessor(buffer &bufferRef, + const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions > 0)#. + +Constructs an [code]#accessor# for accessing a [code]#buffer# immediately on +the host. The optional [code]#property_list# provides properties for the +constructed accessor. + +a@ +[source] +---- +template +accessor(buffer &bufferRef, + range accessRange, + const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions > 0)#. + +Constructs an [code]#accessor# that is a <> which accesses a +buffer immediately on the host, where the range starts at the beginning of the +buffer. The optional [code]#property_list# provides properties for the +constructed accessor. + +Throws an [code]#exception# with the [code]#errc::invalid# error code if +[code]#accessRange# exceeds the range of [code]#bufferRef# in any dimension. + +a@ +[source] +---- +template +accessor(buffer &bufferRef, + range accessRange, + id accessOffset, + const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions > 0)#. + +Constructs an [code]#accessor# that is a <> which accesses a +buffer immediately on the host, where the range starts at an offset from the +beginning of the buffer. The optional [code]#property_list# provides +properties for the constructed accessor. + +Throws an [code]#exception# with the [code]#errc::invalid# error code if +the sum of [code]#accessRange# and [code]#accessOffset# exceeds the range of +[code]#bufferRef# in any dimension. + +|==== + + +[[table.accessors.deprecated.host.members]] +.Member functions of the deprecated host buffer accessor +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +id get_offset() const +---- + a@ Available only when [code]#(dimensions > 0)#. + +If this is a <>, returns the offset that was specified when +the accessor was constructed, otherwise returns the default constructed +[code]#id{}#. + +a@ +[source] +---- +std::add_pointer_t get_pointer() const noexcept +---- + a@ Returns a pointer to the start of this accessor's underlying buffer, even + if this is a <> whose range does not start at the + beginning of the buffer. + +|==== + + +====== Accessor specialization with [code]#target::local# + +The [code]#accessor# class may be specialized with target +[code]#target::local#, which results in a local accessor that has the same +semantics and restrictions as [code]#local_accessor#. + +This specialization of [code]#accessor# is only available for access modes +[code]#access_mode::read_write# and [code]#access_mode::atomic#. + +A synopsis for this specialization of [code]#accessor# is provided below. +Since some of the class types and member functions have the same name and +meaning as other accessors, the common types and functions are described in +<>. The member types are listed in +<>. The constructors are listed in +<>, and the member functions +are listed in <> and +<>. + +The additional common special member functions and common member functions are +listed in <> in +<> and +<>, respectively. Additionally, +accessors of the same type must be equality comparable. + +[source,,linenums] +---- +include::{header_dir}/accessorDeprecatedLocal.h[lines=4..-1] +---- + + +[[table.accessors.deprecated.local.constructors]] +.Constructors of the deprecated local accessor +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +accessor(handler &commandGroupHandlerRef, + const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions == 0)#. + +Constructs an [code]#accessor# instance for accessing <> of a +single [code]#dataT# element within a <> on the queue +associated with [code]#commandGroupHandlerRef#. The optional +[code]#property_list# provides properties for the constructed accessor. + +a@ +[source] +---- +accessor(range allocationSize, + handler &commandGroupHandlerRef, + const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions > 0)#. + +Constructs an [code]#accessor# instance for accessing <> of an +array of [code]#dataT# elements within a <> on the queue +associated with [code]#commandGroupHandlerRef#. The number of elements in the +array is defined by [code]#allocationSize#. The optional [code]#property_list# +provides properties for the constructed accessor. + +|==== + + +[[table.accessors.deprecated.local.members]] +.Member functions of the deprecated local accessor +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +operator atomic() const +---- + a@ Available only when + [code]#(accessMode == access_mode::atomic && dimensions == 0)#. + +Returns an instance of [code]#atomic# of type [code]#dataT# providing atomic +access to the element stored within the work-group's local memory allocation +that this accessor is accessing. + +a@ +[source] +---- +atomic operator[](id index) const +---- + a@ Available only when + [code]#(accessMode == access_mode::atomic && dimensions > 0)#. + +Returns an instance of [code]#atomic# of type [code]#dataT# providing atomic +access to the element stored within the work-group's local memory allocation +that this accessor is accessing, at the index specified by [code]#index#. + +a@ +[source] +---- +atomic operator[](size_t index) const +---- + a@ Available only when + [code]#(accessMode == access_mode::atomic && dimensions == 1)#. + +Returns an instance of [code]#atomic# of type [code]#dataT# providing atomic +access to the element stored within the work-group's local memory allocation +that this accessor is accessing, at the index specified by [code]#index#. + +a@ +[source] +---- +local_ptr get_pointer() const noexcept +---- + a@ Returns a [code]#multi_ptr# to the work-group's local memory allocation + that this accessor is accessing. + +|==== + + +[[sec:accessor.deprecated.common.members]] +====== Common members for deprecated accessors + +Specializations of the [code]#accessor# class with +[code]#target::constant_buffer#, [code]#target::host_buffer# and +[code]#target::local# have many member types and member functions with the same +name and meaning. <> describes these +common types and <> describes the +common member functions. + + +[[table.accessors.deprecated.common.types]] +.Common member types of the deprecated accessors +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member types @ Description +a@ +[source] +---- +value_type +---- + a@ If [code]#(accessMode == access_mode::read)#, equal to + [code]#const dataT#, otherwise equal to [code]#dataT#. + +a@ +[source] +---- +reference +---- + a@ Equal to [code]#value_type&#. + +a@ +[source] +---- +const_reference +---- + a@ Equal to [code]#const dataT&#. + +|==== + + +[[table.accessors.deprecated.common.members]] +.Common member functions of the deprecated accessors +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +bool is_placeholder() const +---- + a@ Tells if this is a placeholder accessor. + +When [code]#accessTarget# is [code]#target::constant_buffer#, returns +[code]#true# if the accessor was constructed as a placeholder and returns +[code]#false# otherwise. + +When [code]#accessTarget# is [code]#target::host_buffer# or +[code]#target::local#, always returns [code]#false#. + +a@ +[source] +---- +size_t get_size() const noexcept +---- + a@ Returns the size in bytes of the memory region this accessor may access. + +When [code]#accessTarget# is [code]#target::constant_buffer# or +[code]#target::host_buffer#, the returned value is the size of the elements in +the underlying buffer, unless this is a <> in which case it is +the size of the elements within the accessor's range. + +When [code]#accessTarget# is [code]#target::local#, the returned value is the +size in bytes of the accessor's local memory allocation, per work-group. + +a@ +[source] +---- +size_t get_count() const noexcept +---- + a@ Returns the number of [code]#dataT# elements of the memory region this + accessor may access. + +When [code]#accessTarget# is [code]#target::constant_buffer# or +[code]#target::host_buffer#, the returned value is the number of elements in +the underlying buffer, unless this is a <> in which case it is +the number of elements within the accessor's range. + +When [code]#accessTarget# is [code]#target::local#, the returned value is the +number of elements in the accessor's local memory allocation, per work-group. + +a@ +[source] +---- +range get_range() const +---- + a@ Available only when [code]#(dimensions > 0)#. + +Returns a [code]#range# object which represents the number of elements of +[code]#dataT# per dimension that this accessor may access. + +When [code]#accessTarget# is [code]#target::constant_buffer# or +[code]#target::host_buffer#, the returned value is the range of the underlying +buffer, unless this is a <> in which case it is the range that +was specified when the accessor was constructed. + +When [code]#accessTarget# is [code]#target::local#, the returned value is the +the range that was specified when the accessor was constructed. + +a@ +[source] +---- +operator reference() const +---- + a@ When [code]#accessTarget# is [code]#target::constant_buffer# or + [code]#target::host_buffer#, available only when + [code]#(dimensions == 0)#. + +When [code]#accessTarget# is [code]#target::local#, available only when +[code]#(accessMode == access_mode::read_write && dimensions == 0)#. + +Returns a reference to the single element that is accessed by this accessor. + +a@ +[source] +---- +reference operator[](id index) const +---- + a@ When [code]#accessTarget# is [code]#target::constant_buffer# or + [code]#target::host_buffer#, available only when + [code]#(dimensions > 0)#. + +When [code]#accessTarget# is [code]#target::local#, available only when +[code]#(accessMode == access_mode::read_write && dimensions > 0)#. + +Returns a reference to the element at the location specified by [code]#index#. +If this is a <>, the element is determined by adding +[code]#index# to the accessor's offset. + +a@ +[source] +---- +__unspecified__ &operator[](size_t index) const +---- + a@ Available only when [code]#(dimensions > 1)#. + +Returns an instance of an undefined intermediate type representing this +accessor, with the dimensionality [code]#dimensions-1# and containing an +implicit [code]#id# with index [code]#dimensions# set to [code]#index#. The +intermediate type returned must provide all available subscript operators which +take a [code]#size_t# parameter defined by this accessor class that are +appropriate for the type it represents (including this subscript operator). + +If this is a <>, the implicit [code]#id# in the returned +instance also includes the accessor's offset. + +a@ +[source] +---- +reference operator[](size_t index) const +---- + a@ When [code]#accessTarget# is [code]#target::constant_buffer# or + [code]#target::host_buffer#, available only when + [code]#(dimensions == 1)#. + +When [code]#accessTarget# is [code]#target::local#, available only when +[code]#(accessMode == access_mode::read_write && dimensions == 1)#. + +Returns a reference to the element at the location specified by [code]#index#. +If this is a <>, the element is determined by adding +[code]#index# to the accessor's offset. + +|==== + + +====== Accessor specialization with [code]#access_mode::atomic# + +The [code]#accessor# class may be specialized with target +[code]#target::device# and access mode [code]#access_mode::atomic#. +This specialization provides additional member functions beyond those that are +provided for other [code]#target::device# specializations as described +in <>. + + +[[table.accessors.deprecated.atomic.members]] +.Deprecated atomic member functions of the [code]#accessor# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +operator atomic() const +---- + a@ Available only when + [code]#(accessMode == access_mode::atomic && dimensions == 0)#. + +Returns an instance of [code]#atomic# of type [code]#dataT# providing atomic +access to the single element that is accessed by this accessor. + +a@ +[source] +---- +atomic operator[]( + id index) const +---- + a@ Available only when + [code]#(accessMode == access_mode::atomic && dimensions > 0)#. + +Returns an instance of [code]#atomic# of type [code]#dataT# providing atomic +access to the element stored within the accessor's buffer at the index +specified by [code]#index#. + +If this is a <>, the returned [code]#atomic# instance +provides access to the buffer element whose location is determined by adding +the accessor's offset to [code]#index#. + +a@ +[source] +---- +atomic operator[]( + size_t index) const +---- + a@ Available only when + [code]#(accessMode == access_mode::atomic && dimensions == 1)#. + +Returns an instance of [code]#atomic# of type [code]#dataT# providing atomic +access to the element stored within the accessor's buffer at the index +specified by [code]#index#. + +If this is a <>, the returned [code]#atomic# instance +provides access to the buffer element whose location is determined by adding +the accessor's offset to [code]#index#. + +|==== + + +==== Buffer accessor for host code + +The [code]#host_accessor# class provides access to data in a [code]#buffer# +from host code that is outside of a <> (i.e. do not use this class to +access a buffer inside a host task). + +As with [code]#accessor#, the dimensionality of [code]#host_accessor# must +match the underlying buffer, however, there is a special case if the buffer is +one-dimensional. In this case, the accessor may either be one-dimensional or +it may be zero-dimensional. A zero-dimensional accessor has access to just the +first element of the buffer, whereas a one-dimensional buffer has access to the +entire buffer. + +The [code]#host_accessor# class supports the following access modes: +[code]#access_mode::read#, [code]#access_mode::write# and +[code]#access_mode::read_write#. + + +===== Interface for buffer host accessors + +A synopsis of the [code]#host_accessor# class is provided below. Since some of +the class types and member functions have the same name and meaning as other +accessors, the common types and functions are described in +<>. The member types are listed in +<>. +The constructors are listed in <>, +and the member functions are listed in <> and +<>. + +The additional common special member functions and common member functions are +listed in <> in +<> and +<>, respectively. For valid implicit +conversions between accessor types refer to +<>. Additionally, accessors of the same +type must be equality comparable. + +[source,,linenums] +---- +include::{header_dir}/accessorHost.h[lines=4..-1] +---- + + +[[table.accessors.host.buffer.constructors]] +.Constructors of the [code]#host_accessor# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +host_accessor() +---- + a@ Constructs an empty accessor which fulfills the following + post-conditions: +-- + * [code]#(empty() == true)# + * All size queries return [code]#0#. + * The only iterator that can be obtained is [code]#nullptr#. + * Trying to access the underlying memory is undefined behavior. +-- + +a@ +[source] +---- +template +host_accessor(buffer &bufferRef, + const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions == 0)#. + +Constructs a [code]#host_accessor# for accessing the first element of a +[code]#buffer# immediately on the host. The optional [code]#property_list# +provides properties for the constructed accessor. + +a@ +[source] +---- +template +host_accessor( + buffer &bufferRef, + const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions > 0)#. + +Constructs a [code]#host_accessor# for accessing a [code]#buffer# immediately +on the host. The optional [code]#property_list# provides properties for the +constructed accessor. + +a@ +[source] +---- +template +host_accessor( + buffer &bufferRef, + TagT tag, const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions > 0)#. + +Constructs a [code]#host_accessor# for accessing a [code]#buffer# immediately +on the host. The [code]#tag# is used to deduce template arguments of the +accessor as described in <>. The optional +[code]#property_list# provides properties for the constructed accessor. + +a@ +[source] +---- +template +host_accessor( + buffer &bufferRef, + range accessRange, + const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions > 0)#. + +Constructs a [code]#host_accessor# that is a <> which accesses +a buffer immediately on the host, where the range starts at the beginning of +the [code]#buffer#. The optional [code]#property_list# provides properties for +the constructed accessor. + +Throws an [code]#exception# with the [code]#errc::invalid# error code if +[code]#accessRange# exceeds the range of [code]#bufferRef# in any dimension. + +a@ +[source] +---- +template +host_accessor( + buffer &bufferRef, + range accessRange, + TagT tag, const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions > 0)#. + +Constructs a [code]#host_accessor# that is a <> which accesses +a buffer immediately on the host, where the range starts at the beginning of +the [code]#buffer#. The [code]#tag# is used to deduce template arguments of +the accessor as described in <>. The optional +[code]#property_list# provides properties for the constructed accessor. + +Throws an [code]#exception# with the [code]#errc::invalid# error code if +[code]#accessRange# exceeds the range of [code]#bufferRef# in any dimension. + +a@ +[source] +---- +template +host_accessor( + buffer &bufferRef, + range accessRange, + id accessOffset, + const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions > 0)#. + +Constructs a [code]#host_accessor# that is a <> which accesses +a buffer immediately on the host, where the range starts at an offset from the +beginning of the buffer. The optional [code]#property_list# provides +properties for the constructed accessor. + +Throws an [code]#exception# with the [code]#errc::invalid# error code if +the sum of [code]#accessRange# and [code]#accessOffset# exceeds the range of +[code]#bufferRef# in any dimension. + +a@ +[source] +---- +template +host_accessor( + buffer &bufferRef, + range accessRange, + id accessOffset, + TagT tag, const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions > 0)#. + +Constructs a [code]#host_accessor# that is a <> which accesses +a buffer immediately on the host, where the range starts at an offset from the +beginning of the buffer. The [code]#tag# is used to deduce template arguments +of the accessor as described in <>. The +optional [code]#property_list# provides properties for the constructed +accessor. + +Throws an [code]#exception# with the [code]#errc::invalid# error code if +the sum of [code]#accessRange# and [code]#accessOffset# exceeds the range of +[code]#bufferRef# in any dimension. + +|==== + + +[[table.accessors.host.buffer.members]] +.Member functions of the [code]#host_accessor# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +void swap(host_accessor &other); +---- + a@ Swaps the contents of the current accessor with the contents of + [code]#other#. + +a@ +[source] +---- +id get_offset() const +---- + a@ Available only when [code]#(dimensions > 0)#. + +If this is a <>, returns the offset that was specified when the +accessor was constructed. For other accessors, returns the default constructed +[code]#id{}#. + +|==== + + +[[sec:accessor.host.buffer.tags]] +===== Deduction tags for buffer host accessors + +Some [code]#host_accessor# constructors take a [code]#TagT# parameter, which is +used to deduce template arguments. The permissible values for this parameter +are listed in <> along with the access mode +that they imply. + +[[table.accessors.host.buffer.tags]] +.Enumeration of tags available for [code]#host_accessor# construction +[width="100%",options="header",cols="50%,50%"] +|==== +| Tag value | Access mode +| [code]#read_write# + | [code]#access_mode::read_write# +| [code]#read_only# + | [code]#access_mode::read# +| [code]#write_only# + | [code]#access_mode::write# +|==== + + +[[sec:accessor.host.buffer.conversions]] +===== Read only buffer host accessors and implicit conversions + +<> shows the specializations of +[code]#host_accessor# that are read-only accessors. There is an implicit +conversion between any of these specializations, provided that all other +template parameters are the same. + +[[table.accessors.host.buffer.read-only]] +.Specializations of [code]#host_accessor# that are read-only +[width="100%",options="header",cols="50%,50%"] +|==== +| Data type | Access mode +| not const-qualified | [code]#access_mode::read# +| const-qualified | [code]#access_mode::read# +|==== + +There is also an implicit conversion from the read-write [code]#host_accessor# +type shown in <> to any of the read-only +accessors in <>, provided that all other +template parameters are the same. + +[[table.accessors.host.buffer.read-write]] +.Specializations of [code]#host_accessor# that are read-write +[width="100%",options="header",cols="50%,50%"] +|==== +| Data type | Access mode +| not const-qualified | [code]#access_mode::read_write# +|==== + + +[[sec:accessor.local]] +==== Local accessor + +The [code]#local_accessor# class allocates device local memory and provides +access to this memory from within a <>. The +<> that is allocated is shared between all +<> of a <>. If multiple work-groups execute +simultaneously in an implementation, each work-group receives its own +independent copy of the allocated local memory. + +The underlying [code]#dataT# type can be any {cpp} type. If [code]#dataT# is +an implicit-lifetime type (as defined in the {cpp} core language), the local +accessor implicitly creates objects of that type with indeterminate values. +For other types, the local accessor merely allocates uninitialized memory, and +the application is responsible for constructing objects in that memory (e.g. by +calling placement-new). + +A local accessor must not be used in a <> that is invoked +via [code]#single_task# or via the simple form of [code]#parallel_for# that +takes a [code]#range# parameter. In these cases submitting the kernel to +a queue must throw a synchronous [code]#exception# with the +[code]#errc::kernel_argument# error code. + + +===== Interface for local accessors + +A synopsis of the [code]#local_accessor# class is provided below. Since some +of the class types and member functions have the same name and meaning as other +accessors, the common types and functions are described in +<>. The member types are listed in +<> and <>. +The constructors are listed in <>, +and the member functions are listed in <> and +<>. + +The additional common special member functions and common member functions are +listed in <> in +<> and +<>, respectively. For valid implicit +conversions between accessor types refer to <>. +Additionally, accessors of the same type must be equality comparable. + +[source,,linenums] +---- +include::{header_dir}/accessorLocal.h[lines=4..-1] +---- + + +[[table.accessors.local.types]] +.Member types of the [code]#local_accessor# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member types @ Description +a@ +[source] +---- +template +accessor_ptr +---- + a@ Equal to + [code]#multi_ptr#. + +|==== + + +[[table.accessors.local.constructors]] +.Constructors of the [code]#local_accessor# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +local_accessor() +---- + a@ Constructs an empty local accessor which fulfills the following + post-conditions: +-- + * [code]#(empty() == true)# + * All size queries return [code]#0#. + * The only iterator that can be obtained is [code]#nullptr#. + * Trying to access the underlying memory is undefined behavior. +-- + +a@ +[source] +---- +local_accessor(handler &commandGroupHandlerRef, + const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions == 0)#. + +Constructs a [code]#local_accessor# for accessing <> of a single +[code]#dataT# element within a <> on the queue associated +with [code]#commandGroupHandlerRef#. The optional [code]#property_list# +provides properties for the constructed accessor. + +a@ +[source] +---- +local_accessor(range allocationSize, + handler &commandGroupHandlerRef, + const property_list &propList = {}) +---- + a@ Available only when [code]#(dimensions > 0)#. + +Constructs a [code]#local_accessor# for accessing <> of an array +of [code]#dataT# elements within a <> on the queue +associated with [code]#commandGroupHandlerRef#. The number of elements in the +array is defined by [code]#allocationSize#. The optional [code]#property_list# +provides properties for the constructed accessor. + +|==== + + +[[table.accessors.local.members]] +.Member functions of the [code]#local_accessor# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +void swap(local_accessor &other); +---- + a@ Swaps the contents of the current accessor with the contents of + [code]#other#. + +a@ +[source] +---- +template +accessor_ptr get_multi_ptr() const noexcept +---- + a@ Returns a [code]#multi_ptr# to the start of the accessor's local memory + region which corresponds to the calling work-group. + +This function may only be called from within a <>. + +|==== + + +[[sec:accessor.local.conversions]] +===== Read only local accessors and implicit conversions + +Since [code]#local_accessor# has no template parameter for the access mode, the +only specialization for a read-only local accessor is by providing a +[code]#const# qualified [code]#dataT# parameter. Specializations with a +non-[code]#const# qualified [code]#dataT# parameter are read-write. There is +an implicit conversion from the read-write specialization to the read-only +specialization, provided that all other template parameters are the same. + + +[[sec:accessor.common.members]] +==== Common members for buffer and local accessors + +The [code]#accessor#, [code]#host_accessor#, and [code]#local_accessor# classes +have many member types and member functions with the same name and meaning. +<> describes these common types and +<> describes the common member functions. + + +[[table.accessors.common.types]] +.Common buffer and local accessor member types +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member types @ Description +a@ +[source] +---- +value_type +---- + a@ If the accessor is read-only, equal to [code]#const dataT#, otherwise + equal to [code]#dataT#. + +See <>, +<> and <> +for which accessors are considered read-only. + +a@ +[source] +---- +reference +---- + a@ Equal to [code]#value_type&#. + +a@ +[source] +---- +const_reference +---- + a@ Equal to [code]#const dataT&#. + +a@ +[source] +---- +iterator +---- + a@ Iterator that can provide ranged access. Cannot be written to if the + accessor is read-only. The underlying pointer is address space qualified + for [code]#accessor# specializations with [code]#target::device# and for + [code]#local_accessor#. + +a@ +[source] +---- +const_iterator +---- + a@ Iterator that can provide ranged access. Cannot be written to. The + underlying pointer is address space qualified for [code]#accessor# + specializations with [code]#target::device# and for + [code]#local_accessor#. + +a@ +[source] +---- +reverse_iterator +---- + a@ Iterator adaptor that reverses the direction of [code]#iterator#. + +a@ +[source] +---- +const_reverse_iterator +---- + a@ Iterator adaptor that reverses the direction of [code]#const_iterator#. + +a@ +[source] +---- +difference_type +---- + a@ Equal to + [code]#typename std::iterator_traits::difference_type#. + +a@ +[source] +---- +size_type +---- + a@ Equal to [code]#size_t#. + +|==== + + +[[table.accessors.common.members]] +.Common buffer and local accessor member functions +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +size_type byte_size() const noexcept +---- + a@ Returns the size in bytes of the memory region this accessor may access. + +For a buffer accessor this is the size of the underlying buffer, unless it is a +<> in which case it is the size of the elements within the +accessor's range. + +For a local accessor this is the size of the accessor's local memory +allocation, per work-group. + +a@ +[source] +---- +size_type size() const noexcept +---- + a@ Returns the number of [code]#dataT# elements of the memory region this + accessor may access. + +For a buffer accessor this is the number of elements in the underlying buffer, +unless it is a <> in which case it is the number of elements +within the accessor's range. + +For a local accessor this is the number of elements in the accessor's local +memory allocation, per work-group. + +a@ +[source] +---- +size_type max_size() const noexcept +---- + a@ Returns the maximum number of elements any accessor of this type would be + able to access. + +a@ +[source] +---- +bool empty() const noexcept +---- + a@ Returns [code]#true# if [code]#(size() == 0)#. + +a@ +[source] +---- +range get_range() const +---- + a@ Available only when [code]#(dimensions > 0)#. + +Returns a [code]#range# object which represents the number of elements of +[code]#dataT# per dimension that this accessor may access. + +For a buffer accessor this is the range of the underlying buffer, unless it is +a <> in which case it is the range that was specified when the +accessor was constructed. + +a@ +[source] +---- +operator reference() const +---- + a@ For [code]#accessor# available only when + [code]#(accessMode != access_mode::atomic && dimensions == 0)#. + +For [code]#host_accessor# and [code]#local_accessor# available only when +[code]#(dimensions == 0)#. + +Returns a reference to the single element that is accessed by this accessor. + +For [code]#accessor# and [code]#local_accessor#, this function may only be +called from within a <>. + +a@ +[source] +---- +reference operator[](id index) const +---- + a@ For [code]#accessor# available only when + [code]#(accessMode != access_mode::atomic && dimensions > 0)#. + +For [code]#host_accessor# and [code]#local_accessor# available only when +[code]#(dimensions > 0)#. + +Returns a reference to the element at the location specified by [code]#index#. +If this is a <>, the element is determined by adding +[code]#index# to the accessor's offset. + +For [code]#accessor# and [code]#local_accessor#, this function may only be +called from within a <>. + +a@ +[source] +---- +__unspecified__ &operator[](size_t index) const +---- + a@ Available only when [code]#(dimensions > 1)#. + +Returns an instance of an undefined intermediate type representing this +accessor, with the dimensionality [code]#dimensions-1# and containing an +implicit [code]#id# with index [code]#dimensions# set to [code]#index#. The +intermediate type returned must provide all available subscript operators which +take a [code]#size_t# parameter defined by this accessor class that are +appropriate for the type it represents (including this subscript operator). + +If this is a <>, the implicit [code]#id# in the returned +instance also includes the accessor's offset. + +For [code]#accessor# and [code]#local_accessor#, this function may only be +called from within a <>. + +a@ +[source] +---- +reference operator[](size_t index) const +---- + a@ For [code]#accessor# available only when + [code]#(accessMode != access_mode::atomic && dimensions == 1)#. + +For [code]#host_accessor# and [code]#local_accessor# available only when +[code]#(dimensions == 1)#. + +Returns a reference to the element at the location specified by [code]#index#. +If this is a <>, the element is determined by adding +[code]#index# to the accessor's offset. + +For [code]#accessor# and [code]#local_accessor#, this function may only be +called from within a <>. + +a@ +[source] +---- +std::add_pointer_t get_pointer() const noexcept +---- + a@ Returns a pointer to the start of this accessor's memory. + +For a buffer accessor this is a pointer to the start of the underlying buffer, +even if this is a <> whose range does not start at the +beginning of the buffer. + +For [code]#accessor# and [code]#local_accessor#, this function may only be +called from within a <>. + +a@ +[source] +---- +iterator begin() const noexcept +---- + a@ Returns an iterator to the first element of the memory this accessor may + access. + +For a buffer accessor this is an iterator to the first element of the +underlying buffer, unless this is a <> in which case it is an +iterator to first element within the accessor's range. + +For [code]#accessor# and [code]#local_accessor#, this function may only be +called from within a <>. + +a@ +[source] +---- +iterator end() const noexcept +---- + a@ Returns an iterator to one element past the last element of the memory + this accessor may access. + +For a buffer accessor this is an iterator to one element past the last element +in the underlying buffer, unless this is a <> in which case +it is an iterator to one element past the last element within the accessor's +range. + +For [code]#accessor# and [code]#local_accessor#, this function may only be +called from within a <>. + +a@ +[source] +---- +const_iterator cbegin() const noexcept +---- + a@ Returns a const iterator to the first element of the memory this accessor + may access. + +For a buffer accessor this is a const iterator to the first element of the +underlying buffer, unless this is a <> in which case it is a +const iterator to first element within the accessor's range. + +For [code]#accessor# and [code]#local_accessor#, this function may only be +called from within a <>. + +a@ +[source] +---- +const_iterator cend() const noexcept +---- + a@ Returns a const iterator to one element past the last element of the + memory this accessor may access. + +For a buffer accessor this is a const iterator to one element past the last +element in the underlying buffer, unless this is a <> in which +case it is a const iterator to one element past the last element within the +accessor's range. + +For [code]#accessor# and [code]#local_accessor#, this function may only be +called from within a <>. + +a@ +[source] +---- +reverse_iterator rbegin() const noexcept +---- + a@ Returns an iterator adaptor to the last element of the memory this + accessor may access. + +For a buffer accessor this is an iterator adaptor to the last element of the +underlying buffer, unless this is a <> in which case it is an +iterator adaptor to the last element within the accessor's range. + +For [code]#accessor# and [code]#local_accessor#, this function may only be +called from within a <>. + +a@ +[source] +---- +reverse_iterator rend() const noexcept +---- + a@ Returns an iterator adaptor to one element before the first element of + the memory this accessor may access. + +For a buffer accessor this is an iterator adaptor to one element before the +first element in the underlying buffer, unless this is a <> in +which case it is an iterator adaptor to one element before the first element +within the accessor's range. + +For [code]#accessor# and [code]#local_accessor#, this function may only be +called from within a <>. + +a@ +[source] +---- +const_reverse_iterator crbegin() const noexcept +---- + a@ Returns a const iterator adaptor to the last element of the memory this + accessor may access. + +For a buffer accessor this is a const iterator adaptor to the last element of +the underlying buffer, unless this is a <> in which case it is +an const iterator adaptor to last element within the accessor's range. + +For [code]#accessor# and [code]#local_accessor#, this function may only be +called from within a <>. + +a@ +[source] +---- +const_reverse_iterator crend() const noexcept +---- + a@ Returns a const iterator adaptor to one element before the first element of + the memory this accessor may access. + +For a buffer accessor this is a const iterator adaptor to one element before the +first element in the underlying buffer, unless this is a <> in +which case it is a const iterator adaptor to one element before the first element +within the accessor's range. + +For [code]#accessor# and [code]#local_accessor#, this function may only be +called from within a <>. + +|==== + + +==== Unsampled image accessors + +There are two classes which implement accessors for unsampled images, +[code]#unsampled_image_accessor# and [code]#host_unsampled_image_accessor#. +The former provides access from within a <> or from +within a <>. The latter provides access from host code that is +outside of a <>. + +The dimensionality of an unsampled image accessor must match the dimensionality +of the underlying image to which it provides access. Unsampled image accessors +support only two access modes: [code]#access_mode::read# and +[code]#access_mode::write#. + +The [code]#accessTarget# template parameter dictates how the +[code]#unsampled_image_accessor# can be used: [code]#image_target::device# +means the accessor can be used in a <> while +[code]#image_target::host_task# means the accessor can be used in a +<>. Programs which specify this template parameter as +[code]#image_target::device# and then use the [code]#unsampled_image_accessor# +from a <> are ill formed. Likewise, programs which specify this +template parameter as [code]#image_target::host_task# and then use the +[code]#unsampled_image_accessor# from a <> are ill +formed. + + +===== Interface for unsampled image accessors + +A synopsis of the two unsampled image accessor classes is provided below. Both +classes have member types with the same name, which are described in +<>. The constructors for the two +classes are described in <> and +<>. Both classes also have +member functions with the same name, which are described in +<>. + +The additional common special member functions and common member functions are +listed in <> in +<> and +<>, respectively. For valid implicit +conversions between unsampled accessor types refer to +<>. + +Two [code]#unsampled_image_accessor# objects of the same type must be equality +comparable in both the host code and in SYCL kernel functions. Two +[code]#host_unsampled_image_accessor# objects of the same type must be equality +comparable in the host code. + +[source,,linenums] +---- +include::{header_dir}/accessorUnsampledImage.h[lines=4..-1] +---- + + +[[table.accessors.unsampled.image.types]] +.Member types of the unsampled image classes +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member types @ Description +a@ +[source] +---- +value_type +---- + a@ If the accessor is read-only, equal to [code]#const dataT#, otherwise + equal to [code]#dataT#. + +See <> for which accessors are +considered read-only. + +a@ +[source] +---- +reference +---- + a@ Equal to [code]#value_type&#. + +a@ +[source] +---- +const_reference +---- + a@ Equal to [code]#const dataT&#. + +|==== + + +[[table.accessors.unsampled.image.constructors]] +.Constructors of the [code]#unsampled_image_accessor# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +template +unsampled_image_accessor( + unsampled_image &imageRef, + handler &commandGroupHandlerRef, + const property_list &propList = {}) +---- + a@ Constructs an [code]#unsampled_image_accessor# for accessing an + [code]#unsampled_image# within a <> on the [code]#queue# + associated with [code]#commandGroupHandlerRef#. The optional + [code]#property_list# provides properties for the constructed object. + +If [code]#accessTarget# is [code]#image_target::device#, throws an +[code]#exception# with the [code]#errc::feature_not_supported# error code if +the device associated with [code]#commandGroupHandlerRef# does not have +[code]#aspect::image#. + +a@ +[source] +---- +template +unsampled_image_accessor( + unsampled_image &imageRef, + handler &commandGroupHandlerRef, TagT tag, + const property_list &propList = {}) +---- + a@ Constructs an [code]#unsampled_image_accessor# for accessing an + [code]#unsampled_image# within a <> on the [code]#queue# + associated with [code]#commandGroupHandlerRef#. The [code]#tag# is used + to deduce template arguments of the [code]#unsampled_image_accessor# as + described in <>. The optional + [code]#property_list# provides properties for the constructed object. + +If [code]#accessTarget# is [code]#image_target::device#, throws an +[code]#exception# with the [code]#errc::feature_not_supported# error code if +the device associated with [code]#commandGroupHandlerRef# does not have +[code]#aspect::image#. + +|==== + + +[[table.accessors.host.unsampled.image.constructors]] +.Constructors of the [code]#host_unsampled_image_accessor# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +template +host_unsampled_image_accessor( + unsampled_image &imageRef, + const property_list &propList = {}) +---- + a@ Constructs a [code]#host_unsampled_image_accessor# for accessing an + [code]#unsampled_image# immediately on the host. The optional + [code]#property_list# provides properties for the constructed object. + +a@ +[source] +---- +template +host_unsampled_image_accessor( + unsampled_image &imageRef, + TagT tag, const property_list &propList = {}) +---- + a@ Constructs a [code]#host_unsampled_image_accessor# for accessing an + [code]#unsampled_image# immediately on the host. The [code]#tag# is used + to deduce template arguments of the [code]#host_unsampled_image_accessor# + as described in <>. The optional + [code]#property_list# provides properties for the constructed object. + +|==== + + +[[table.accessors.unsampled.image.members]] +.Member functions of the unsampled image classes +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +size_t size() const noexcept +---- + a@ Returns the number of elements of the underlying [code]#unsampled_image# + that this accessor is accessing. + +a@ +[source] +---- +template +dataT read(const coordT &coords) const +---- + a@ Available only when [code]#(accessMode == access_mode::read)#. + +Reads and returns an element of the [code]#unsampled_image# at the coordinates +specified by [code]#coords#. Permitted types for [code]#coordT# are +[code]#int# when [code]#dimensions == 1#, [code]#int2# when +[code]#dimensions == 2# and [code]#int4# when [code]#dimensions == 3#. + +For [code]#unsampled_image_accessor#, this function may only be called from +within a <>. + +a@ +[source] +---- +template +void write(const coordT &coords, const dataT &color) const +---- + a@ Available only when [code]#(accessMode == access_mode::write)#. + +Writes the value specified by [code]#color# to the element of the image at the +coordinates specified by [code]#coords#. Permitted types for [code]#coordT# +are [code]#int# when [code]#dimensions == 1#, [code]#int2# when +[code]#dimensions == 2# and [code]#int4# when [code]#dimensions == 3#. + +For [code]#unsampled_image_accessor#, this function may only be called from +within a <>. + +|==== + + +[[sec:accessor.unsampled.image.tags]] +===== Deduction tags for unsampled image accessors + +Some [code]#unsampled_image_accessor# constructors take a [code]#TagT# +parameter, which is used to deduce template arguments. The permissible values +for this parameter are listed in <> along +with the access mode and accessor target that they imply. + +[[table.accessors.unsampled.image.tags]] +.Enumeration of tags available for [code]#unsampled_image_accessor# construction +[width="100%",options="header",cols="33%,33%,34%"] +|==== +| Tag value | Access mode | Accessor target +| [code]#read_only# + | [code]#access_mode::read# + | [code]#image_target::device# +| [code]#write_only# + | [code]#access_mode::write# + | [code]#image_target::device# +| [code]#read_only_host_task# + | [code]#access_mode::read# + | [code]#image_target::host_task# +| [code]#write_only_host_task# + | [code]#access_mode::write# + | [code]#image_target::host_task# +|==== + +Some [code]#host_unsampled_image_accessor# constructors also take a +[code]#TagT# parameter. The permissible values for this parameter are listed +in <> along with the access mode +that they imply. + +[[table.accessors.host.unsampled.image.tags]] +.Enumeration of tags available for [code]#host_unsampled_image_accessor# construction +[width="100%",options="header",cols="50%,50%"] +|==== +| Tag value | Access mode +| [code]#read_only# + | [code]#access_mode::read# +| [code]#write_only# + | [code]#access_mode::write# +|==== + + +[[sec:accessor.unsampled.image.conversions]] +===== Read only unsampled image accessors and implicit conversions + +All specializations of unsampled image accessors with [code]#access_mode::read# +are read-only regardless of whether [code]#dataT# is [code]#const# qualified. +There is an implicit conversion between the [code]#const# qualified and +non-[code]#const# qualified specializations, provided that all other template +parameters are the same. + + +==== Sampled image accessors + +There are two classes which implement accessors for sampled images, +[code]#sampled_image_accessor# and [code]#host_sampled_image_accessor#. +The former provides access from within a <> or from +within a <>. The latter provides access from host code that is +outside of a <>. + +The dimensionality of a sampled image accessor must match the dimensionality +of the underlying image to which it provides access. Sampled image accessors +are always read-only. + +The [code]#accessTarget# template parameter dictates how the +[code]#sampled_image_accessor# can be used: [code]#image_target::device# means +the accessor can be used in a <> while +[code]#image_target::host_task# means the accessor can be used in a +<>. Programs which specify this template parameter as +[code]#image_target::device# and then use the [code]#sampled_image_accessor# +from a <> are ill formed. Likewise, programs which specify this +template parameter as [code]#image_target::host_task# and then use the +[code]#sampled_image_accessor# from a <> are ill formed. + + + +===== Interface for sampled image accessors + +A synopsis of the two sampled image accessor classes is provided below. Both +classes have member types with the same name, which are described in +<>. The constructors for the two +classes are described in <> and +<>. Both classes also have +member functions with the same name, which are described in +<>. + +The additional common special member functions and common member functions are +listed in <> in +<> and +<>, respectively. For valid implicit +conversions between sampled accessor types refer to +<>. + +Two [code]#sampled_image_accessor# objects of the same type must be equality +comparable in both the host code and in SYCL kernel functions. Two +[code]#host_sampled_image_accessor# objects of the same type must be equality +comparable in the host code. + +[source,,linenums] +---- +include::{header_dir}/accessorSampledImage.h[lines=4..-1] +---- + + +[[table.accessors.sampled.image.types]] +.Member types of the sampled image classes +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member types @ Description +a@ +[source] +---- +value_type +---- + a@ Equal to [code]#const dataT#. + +a@ +[source] +---- +reference +---- + a@ Equal to [code]#const dataT&#. + +a@ +[source] +---- +const_reference +---- + a@ Equal to [code]#const dataT&#. + +|==== + + +[[table.accessors.sampled.image.constructors]] +.Constructors of the [code]#sampled_image_accessor# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +template +sampled_image_accessor( + sampled_image &imageRef, + handler &commandGroupHandlerRef, + const property_list &propList = {}) +---- + a@ Constructs a [code]#sampled_image_accessor# for accessing a + [code]#sampled_image# within a <> on the [code]#queue# + associated with [code]#commandGroupHandlerRef#. The optional + [code]#property_list# provides properties for the constructed object. + +If [code]#accessTarget# is [code]#image_target::device#, throws an +[code]#exception# with the [code]#errc::feature_not_supported# error code if +the device associated with [code]#commandGroupHandlerRef# does not have +[code]#aspect::image#. + +a@ +[source] +---- +template +sampled_image_accessor( + sampled_image &imageRef, + handler &commandGroupHandlerRef, TagT tag, + const property_list &propList = {}) +---- + a@ Constructs a [code]#sampled_image_accessor# for accessing a + [code]#sampled_image# within a <> on the [code]#queue# + associated with [code]#commandGroupHandlerRef#. The [code]#tag# is used + to deduce template arguments of the [code]#sampled_image_accessor# as + described in <>. The optional + [code]#property_list# provides properties for the constructed object. + +If [code]#accessTarget# is [code]#image_target::device#, throws an +[code]#exception# with the [code]#errc::feature_not_supported# error code if +the device associated with [code]#commandGroupHandlerRef# does not have +[code]#aspect::image#. + +|==== + + +[[table.accessors.host.sampled.image.constructors]] +.Constructors of the [code]#host_sampled_image_accessor# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +template +host_sampled_image_accessor( + sampled_image &imageRef, + const property_list &propList = {}) +---- + a@ Constructs a [code]#host_sampled_image_accessor# for accessing a + [code]#sampled_image# immediately on the host. The optional + [code]#property_list# provides properties for the constructed object. + +|==== + + +[[table.accessors.sampled.image.members]] +.Member functions of the sampled image classes +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +size_t size() const noexcept +---- + a@ Returns the number of elements of the underlying [code]#sampled_image# + that this accessor is accessing. + +a@ +[source] +---- +template +dataT read(const coordT &coords) const +---- + a@ Reads and returns a sampled element of the [code]#sampled_image# at the + coordinates specified by [code]#coords#. Permitted types for + [code]#coordT# are [code]#float# when [code]#dimensions == 1#, + [code]#float2# when [code]#dimensions == 2# and [code]#float4# when + [code]#dimensions == 3#. + +For [code]#sampled_image_accessor#, this function may only be called from +within a <>. + +|==== + + +[[sec:accessor.sampled.image.tags]] +===== Deduction tags for sampled image accessors + +Some [code]#sampled_image_accessor# constructors take a [code]#TagT# parameter, +which is used to deduce template arguments. The permissible values for this +parameter are listed in <> along with the +accessor target that they imply. + +[[table.accessors.sampled.image.tags]] +.Enumeration of tags available for [code]#sampled_image_accessor# construction +[width="100%",options="header",cols="50%,50%"] +|==== +| Tag value | Accessor target +| [code]#read_only# + | [code]#image_target::device# +| [code]#read_only_host_task# + | [code]#image_target::host_task# +|==== + + +[[sec:accessor.sampled.image.conversions]] +===== Read only sampled image accessors and implicit conversions + +All specializations of sampled image accessors are read-only regardless of +whether [code]#dataT# is [code]#const# qualified. There is an implicit +conversion between the [code]#const# qualified and non-[code]#const# qualified +specializations, provided that all other template parameters are the same. + + +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% end accessors %%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +=== Address space classes + +In SYCL, there are five different address spaces: global, local, constant, +private and generic. In a SYCL generic implementation, types are not +affected by the address spaces. However, there are situations where users +need to explicitly carry address spaces in the type. For example: + + * For performance tuning and genericness. Even if the platform supports + the representation of the generic address space, this may come at some + performance sacrifice. In order to help the target compiler, it can be + useful to track specifically which address space a pointer is + addressing. + * When linking SYCL kernels with <>-specific functions. In this + case, it might be necessary to specify the address space for any pointer + parameters. + +Direct declaration of pointers with address spaces is discouraged as the +definition is implementation-defined. Users must rely on the +[code]#multi_ptr# class to handle address space boundaries and +interoperability. + + +[[sec:multiptr]] +==== Multi-pointer class + +The multi-pointer class is the common interface for the explicit pointer +classes, defined in <>. + +There are situations where a user may want to make their type address space dependent. +This allows performing generic programming that depends on the address space associated +with their data. An example might be wrapping a pointer inside a class, where +a user may need to template the class according to the address space of the +pointer the class is initialized with. In this case, the [code]#multi_ptr# +class enables users to do this in a portable and stable way. + +The [code]#multi_ptr# class exposes 3 flavors of the same interface. +If the value of [code]#access::decorated# is [code]#access::decorated::no#, +the interface exposes pointers and references type that are not decorated by an address space. +If the value of [code]#access::decorated# is [code]#access::decorated::yes#, +the interface exposes pointers and references type that are decorated by an address space. +The decoration is implementation dependent and relies on device compiler extensions. +The decorated type may be distinct from the non-decorated one. +For interoperability with the <>, users should rely on types exposed +by the decorated version. +If the value of [code]#access::decorated# is [code]#access::decorated::legacy#, +the 1.2.1 interface is exposed. +This interface is deprecated. + +The template traits [code]#remove_decoration# and type alias +[code]#remove_decoration_t# retrieve the non-decorated pointer or +reference from a decorated one. Using this template trait with a +non-decorated type is safe and returns the same type. + + +It is possible to use the [code]#void# type for the [code]#multi_ptr# +class, but in that case some functionality is disabled. +[code]#multi_ptr# does not provide the [code]#reference# or +[code]#const_reference# types, the access operators +([code]#operator*()#, [code]#+operator->()+#), the arithmetic +operators or [code]#prefetch# member function. +Conversions from [code]#multi_ptr# to [code]#multi_ptr# of the +same address space are allowed, and will occur implicitly. +Conversions from [code]#multi_ptr# to any other +[code]#multi_ptr# type of the same address space +are allowed, but must be explicit. +The same rules apply to [code]#multi_ptr#. + +An overview of the interface provided for the [code]#multi_ptr# class +follows. + +[source,,linenums] +---- +include::{header_dir}/multipointer.h[lines=4..-1] +---- + + +[[table.constructors.multiptr]] +.Constructors of the SYCL [code]#multi_ptr# class template +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +multi_ptr() +---- + a@ Default constructor. + +a@ +[source] +---- +multi_ptr(const multi_ptr &) +---- + a@ Copy constructor. + +a@ +[source] +---- +multi_ptr(multi_ptr&&) +---- + a@ Move constructor. + +a@ +[source] +---- +multi_ptr(multi_ptr::pointer) +---- + a@ Constructor that takes as an argument a decorated pointer. + +a@ +[source] +---- +multi_ptr(std::nullptr_t) +---- + a@ Constructor from a [code]#nullptr#. + +a@ +[source] +---- +template +multi_ptr(accessor); +---- + a@ Available only when: + [code]#Space == access::address_space::global_space || Space == access::address_space::generic_space#. + +Constructs a [code]#multi_ptr# from an accessor of +[code]#target::device#. + +This constructor may only be called from within a <>. + +a@ +[source] +---- +template +multi_ptr(local_accessor) +---- + a@ Available only when: + [code]#Space == access::address_space::global_space || Space == access::address_space::generic_space#. + +Constructs a [code]#multi_ptr# from a [code]#local_accessor#. + +This constructor may only be called from within a <>. + +a@ +[source] +---- +template +multi_ptr(accessor); +---- + a@ Deprecated in SYCL 2020. Use the overload with + [code]#local_accessor# instead. + +Available only when: +[code]#Space == access::address_space::global_space || Space == access::address_space::generic_space#. + +Constructs a [code]#multi_ptr# from an accessor of [code]#target::local#. + +This constructor may only be called from within a <>. + +a@ +[source] +---- +template + multi_ptr make_ptr(ElementType* pointer) +---- + a@ Global function to create a [code]#multi_ptr# instance depending + on the address space of the [code]#pointer# argument. + An implementation must return [code]#nullptr# if the run-time value of + [code]#pointer# is not compatible with [code]#Space#, and must issue a + compile-time diagnostic if the deduced address space is not compatible + with [code]#Space#. + +|==== + + + +[[table.multiptr.operators]] +.Operators of [code]#multi_ptr# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Operators @ Description +a@ +[source] +---- +template + multi_ptr &operator=(const multi_ptr&) +---- + a@ Copy assignment operator. + +a@ +[source] +---- +template + multi_ptr &operator=(multi_ptr&&) +---- + a@ Move assignment operator. + +a@ +[source] +---- +template + multi_ptr &operator=(std::nullptr_t) +---- + a@ Assigns [code]#nullptr# to the [code]#multi_ptr#. + +a@ +[source] +---- +template + multi_ptr &operator=(const multi_ptr&) +---- + a@ Available only when: [code]#Space == access::address_space::generic_space && ASP != access::address_space::constant_space#. + +Assigns the value of the left hand side [code]#multi_ptr# into the [code]#generic_ptr#. + +a@ +[source] +---- +template + multi_ptr &operator=(multi_ptr&& +---- + a@ Available only when: + [code]#Space == access::address_space::generic_space && ASP != access::address_space::constant_space#. + +Move the value of the left hand side [code]#multi_ptr# into the [code]#generic_ptr#. + +a@ +[source] +---- +template + pointer operator->() const +---- + a@ Available only when: [code]#!std::is_void::value#. + +Returns the underlying pointer. + +a@ +[source] +---- +template + reference operator*() const +---- + a@ Available only when: [code]#!std::is_void::value#. + +Returns a reference to the pointed value. + +a@ +[source] +---- +template + operator pointer() const +---- + a@ Implicit conversion to the underlying pointer type. + *Deprecated:* The member function [code]#get# should be used instead + +a@ +[source] +---- +template + operator multi_ptr() const +---- + a@ Available only when: + [code]#Space == access::address_space::generic_space#. + +Conversion from [code]#generic_ptr# to [code]#private_ptr#. +The result is undefined if the pointer does not address the private +address space. + +a@ +[source] +---- +template + operator multi_ptr() const +---- + a@ Available only when: + [code]#Space == access::address_space::generic_space#. + +Conversion from [code]#generic_ptr# to [code]#private_ptr#. +The result is undefined if the pointer does not address the private +address space. + +a@ +[source] +---- +template + operator multi_ptr() const +---- + a@ Available only when: + [code]#Space == access::address_space::generic_space#. + +Conversion from [code]#generic_ptr# to [code]#global_ptr#. +The result is undefined if the pointer does not address the global +address space. + +a@ +[source] +---- +template + operator multi_ptr() const +---- + a@ Available only when: + [code]#Space == access::address_space::generic_space#. + +Conversion from [code]#generic_ptr# to [code]#global_ptr#. +The result is undefined if the pointer does not address the global +address space. + +a@ +[source] +---- +template + operator multi_ptr() const +---- + a@ Available only when: + [code]#Space == access::address_space::generic_space#. + +Conversion from [code]#generic_ptr# to [code]#local_ptr#. +The result is undefined if the pointer does not address the local +address space. + +a@ +[source] +---- +template + operator multi_ptr() const +---- + a@ Available only when: + [code]#Space == access::address_space::generic_space#. + +Conversion from [code]#generic_ptr# to [code]#local_ptr#. +The result is undefined if the pointer does not address the local +address space. + +a@ +[source] +---- +template + operator multi_ptr() const +---- + a@ Available only when: + [code]#!std::is_void::value && !std::is_const::value#. + +Implicit conversion to a [code]#multi_ptr# of type [code]#void#. + +a@ +[source] +---- +template + operator multi_ptr() const +---- + a@ Available only when: + [code]#!std::is_void::value && std::is_const::value#. + +Implicit conversion to a [code]#multi_ptr# of type [code]#const void#. + +a@ +[source] +---- +template + operator multi_ptr() const +---- + a@ Implicit conversion to a [code]#multi_ptr# + of type [code]#const value_type#. + +a@ +[source] +---- + + operator multi_ptr() const +---- + a@ Available only when: + [code]#is_decorated == true#. + +Implicit conversion to the equivalent [code]#multi_ptr# object that does not expose +decorated pointers or references. + +a@ +[source] +---- + + operator multi_ptr() const +---- + a@ Available only when: + [code]#is_decorated == false#. + +Implicit conversion to the equivalent [code]#multi_ptr# object that exposes +decorated pointers and references. + +|==== + + + +[[table.multiptr.members]] +.Member functions of [code]#multi_ptr# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +pointer get() const +---- + a@ Returns the underlying pointer. + Whether the pointer is decorated depends on the value of [code]#DecorateAddress#. + +a@ +[source] +---- +__unspecified__ * get_decorated() const +---- + a@ Returns the underlying pointer decorated by the address space that it addresses. + Note that the support involves implementation-defined device compiler extensions. + +a@ +[source] +---- +std::add_pointer_t get_raw() const +---- + a@ Returns the underlying pointer, always undecorated. + +a@ +[source] +---- +void prefetch(size_t numElements) const +---- + a@ Available only when: [code]#Space == access::address_space::global_space#. + +Prefetches a number of elements specified by [code]#numElements# into +the <> cache. This operation is an implementation-defined +optimization and does not effect the functional behavior of the SYCL +kernel function. + +|==== + + + +[[table.multipointer.hiddenfriendfunctions]] +.Hidden friend functions of the [code]#multi_ptr# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Hidden friend function @ Description +a@ +[source] +---- +reference operator*(const multi_ptr& mp) +---- + a@ Available only when: [code]#!std::is_void::value#. + +Operator that returns a reference to the [code]#value_type# +of [code]#mp#. + +a@ +[source] +---- +multi_ptr& operator++(multi_ptr& mp) +---- + a@ Available only when: [code]#!std::is_void::value#. + +Increments [code]#mp# by [code]#1# and returns [code]#mp#. + +a@ +[source] +---- +multi_ptr operator++(multi_ptr& mp, int) +---- + a@ Available only when: [code]#!std::is_void::value#. + +Increments [code]#mp# by [code]#1# and returns a new [code]#multi_ptr# +with the value of the original [code]#mp#. + +a@ +[source] +---- +multi_ptr& operator--(multi_ptr& mp) +---- + a@ Available only when: [code]#!std::is_void::value#. + +Decrements [code]#mp# by [code]#1# and returns [code]#mp#. + +a@ +[source] +---- +multi_ptr operator--(multi_ptr& mp, int) +---- + a@ Available only when: [code]#!std::is_void::value#. + +Decrements [code]#mp# by [code]#1# and returns a new [code]#multi_ptr# +with the value of the original [code]#mp#. + +a@ +[source] +---- +multi_ptr& operator+=(multi_ptr& lhs, difference_type r) +---- + a@ Available only when: [code]#!std::is_void::value#. + +Moves [code]#mp# forward by [code]#r# and returns [code]#lhs#. + +a@ +[source] +---- +multi_ptr& operator-=(multi_ptr& lhs, difference_type r) +---- + a@ Available only when: [code]#!std::is_void::value#. + +Moves [code]#mp# backward by [code]#r# and returns [code]#lhs#. + +a@ +[source] +---- +multi_ptr operator+(const multi_ptr& lhs, difference_type r) +---- + a@ Available only when: [code]#!std::is_void::value#. + +Creates a new [code]#multi_ptr# that points [code]#r# forward +compared to [code]#lhs#. + +a@ +[source] +---- +multi_ptr operator-(const multi_ptr& lhs, difference_type r) +---- + a@ Available only when: [code]#!std::is_void::value#. + +Creates a new [code]#multi_ptr# that points [code]#r# backward +compared to [code]#lhs#. + +a@ +[source] +---- +bool operator==(const multi_ptr& lhs, const multi_ptr& rhs) +---- + a@ Comparison operator [code]#==# for [code]#multi_ptr# class. + +a@ +[source] +---- +bool operator!=(const multi_ptr& lhs, const multi_ptr& rhs) +---- + a@ Comparison operator [code]#!=# for [code]#multi_ptr# class. + +a@ +[source] +---- +bool operator<(const multi_ptr& lhs, const multi_ptr& rhs) +---- + a@ Comparison operator [code]#<# for [code]#multi_ptr# class. + +a@ +[source] +---- +bool operator>(const multi_ptr& lhs, const multi_ptr& rhs) +---- + a@ Comparison operator [code]#># for [code]#multi_ptr# class. + +a@ +[source] +---- +bool operator<=(const multi_ptr& lhs, const multi_ptr& rhs) +---- + a@ Comparison operator [code]#+<=+# for [code]#multi_ptr# class. + +a@ +[source] +---- +bool operator>=(const multi_ptr& lhs, const multi_ptr& rhs) +---- + a@ Comparison operator [code]#>=# for [code]#multi_ptr# class. + +a@ +[source] +---- +bool operator==(const multi_ptr& lhs, std::nullptr_t) +---- + a@ Comparison operator [code]#==# for [code]#multi_ptr# class with a + [code]#std::nullptr_t#. + +a@ +[source] +---- +bool operator!=(const multi_ptr& lhs, std::nullptr_t) +---- + a@ Comparison operator [code]#!=# for [code]#multi_ptr# class with a + [code]#std::nullptr_t#. + +a@ +[source] +---- +bool operator<(const multi_ptr& lhs, std::nullptr_t) +---- + a@ Comparison operator [code]#<# for [code]#multi_ptr# class with a + [code]#std::nullptr_t#. + +a@ +[source] +---- +bool operator>(const multi_ptr& lhs, std::nullptr_t) +---- + a@ Comparison operator [code]#># for [code]#multi_ptr# class with a + [code]#std::nullptr_t#. + +a@ +[source] +---- +bool operator<=(const multi_ptr& lhs, std::nullptr_t) +---- + a@ Comparison operator [code]#+<=+# for [code]#multi_ptr# class with a + [code]#std::nullptr_t#. + +a@ +[source] +---- +bool operator>=(const multi_ptr& lhs, std::nullptr_t) +---- + a@ Comparison operator [code]#>=# for [code]#multi_ptr# class with a + [code]#std::nullptr_t#. + +a@ +[source] +---- +bool operator==(std::nullptr_t, const multi_ptr& rhs) +---- + a@ Comparison operator [code]#==# for [code]#multi_ptr# class with a + [code]#std::nullptr_t#. + +a@ +[source] +---- +bool operator!=(std::nullptr_t, const multi_ptr& rhs) +---- + a@ Comparison operator [code]#!=# for [code]#multi_ptr# class with a + [code]#std::nullptr_t#. + +a@ +[source] +---- +bool operator<(std::nullptr_t, const multi_ptr& rhs) +---- + a@ Comparison operator [code]#<# for [code]#multi_ptr# class with a + [code]#std::nullptr_t#. + +a@ +[source] +---- +bool operator>(std::nullptr_t, const multi_ptr& rhs) +---- + a@ Comparison operator [code]#># for [code]#multi_ptr# class with a + [code]#std::nullptr_t#. + +a@ +[source] +---- +bool operator<=(std::nullptr_t, const multi_ptr& rhs) +---- + a@ Comparison operator [code]#+<=+# for [code]#multi_ptr# class with a + [code]#std::nullptr_t#. + +a@ +[source] +---- +bool operator>=(std::nullptr_t, const multi_ptr& rhs) +---- + a@ Comparison operator [code]#>=# for [code]#multi_ptr# class with a + [code]#std::nullptr_t#. + +|==== + + +The following is the overview of the legacy interface from 1.2.1 provided +for the [code]#multi_ptr# class. + +This legacy class supports the deprecated [code]#address_space::constant_space# +address space, which can be used to represent a pointer to <>. +Pointers to <> have an implementation-defined address space, +and each implementation can define whether it is legal to assign such a pointer +to a generic address pointer. + +[source,,linenums] +---- +include::{header_dir}/multipointerlegacy.h[lines=4..-1] +---- + + +[[sec:pointerclasses]] +==== Explicit pointer aliases + +SYCL provides aliases to the [code]#multi_ptr# class template (see +<>) for each specialization of [code]#access::address_space#. + +A synopsis of the SYCL [code]#multi_ptr# class template +aliases is provided below. + +// Interface of the explicit pointer classes +[source,,linenums] +---- +include::{header_dir}/pointer.h[lines=4..-1] +---- + +Note that using [code]#global_ptr#, [code]#local_ptr#, +[code]#constant_ptr# or [code]#private_ptr# +without specifying the decoration is deprecated. +The default argument is provided for compatibility with 1.2.1. + + +[[subsec:samplers]] +=== Image samplers + +The SYCL [code]#image_sampler# struct contains a configuration for sampling a +[code]#sampled_image#. The members of this struct are defined by the following +tables. + +// Interface of the sampler class +[source,,linenums] +---- +include::{header_dir}/imageSampler.h[lines=4..-1] +---- + + +[[table.addressing.mode.sampler]] +.Addressing modes description +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ addressing_mode @ Description +a@ +[source] +---- +mirrored_repeat +---- + a@ Out of range coordinates will be flipped at every integer junction. This addressing mode + can only be used with normalized coordinates. If normalized coordinates are not used, this + addressing mode may generate image coordinates that are undefined. + +a@ +[source] +---- +repeat +---- + a@ Out of range image coordinates are wrapped to the valid range. This addressing mode can only + be used with normalized coordinates. If normalized coordinates are not used, this + addressing mode may generate image coordinates that are undefined. + +a@ +[source] +---- +clamp_to_edge +---- + a@ Out of range image coordinates are clamped to the extent. + +a@ +[source] +---- +clamp +---- + a@ Out of range image coordinates will return a border color. + +a@ +[source] +---- +none +---- + a@ For this addressing mode the programmer guarantees that the image coordinates used to + sample elements of the image refer to a location inside the image; otherwise the results are + undefined. + +|==== + + + +[[table.filtering.mode.sampler]] +.Filtering modes description +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ filtering_mode @ Description +a@ +[source] +---- +nearest +---- + a@ Chooses a color of nearest pixel. + +a@ +[source] +---- +linear +---- + a@ Performs a linear sampling of adjacent pixels. + +|==== + + + +[[table.normalization.mode.sampler]] +.Coordinate normalization modes description +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ coordinate_normalization_mode @ Description +a@ +[source] +---- +normalized +---- + a@ Normalizes image coordinates. + +a@ +[source] +---- +unnormalized +---- + a@ Does not normalize image coordinates. + +|==== + + +// \input{usm} + +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% begin usm %%%%%%%%%%%%%%%%%%%%%%%%%%%% + +[[sec:usm]] +== Unified shared memory (USM) + +This section describes properties and routines for pointer-based +memory management interfaces in SYCL. These routines augment, rather +than replace, the buffer-based interfaces in SYCL. + +Unified Shared Memory (<>) provides a pointer-based alternative to +the buffer programming model. USM enables: + + * Easier integration into existing code bases by representing allocations + as pointers rather than buffers, with full support for pointer + arithmetic into allocations. + * Fine-grain control over ownership and accessibility of allocations, to + optimally choose between performance and programmer convenience. + * A simpler programming model, by automatically migrating some allocations + between SYCL devices and the host. + +To show the differences with example from <>, the +following source code example shows how shared memory can be used +between host and device: + +[source,,linenums] +---- +include::{code_dir}/usm_shared.cpp[lines=4..-1] +---- + +By comparison, the following source code example uses less capable +device memory, which requires explicit copy between the device and the +host: +[source,,linenums] +---- +include::{code_dir}/usm_device.cpp[lines=4..-1] +---- + + +=== Unified addressing + +Unified Addressing guarantees that all devices will use a unified address +space. Pointer values in the unified address space will always refer to the +same location in memory. The unified address space encompasses the host and +one or more devices. Note that this does not require addresses in the +unified address space to be accessible on all devices, just that pointer +values will be consistent. + + +=== Kinds of unified shared memory + +<> is a capability that, when available, provides the ability +to create allocations that are visible to both host and device(s). +USM builds upon Unified Addressing to define a shared address space +where pointer values in this space always refer to the same location +in memory. USM defines three types of memory allocations +described in <>. + +[[table.USM.allocation]] +.Type of USM allocations +[width="100%",options="header",cols="20%,80%"] +|==== +| USM allocation type | Description +| [code]#host# + | Allocations in host memory that are accessible by a device +| [code]#device# + | Allocations in device memory that are *not* accessible by the host +| [code]#shared# + | Allocations in shared memory that are accessible by both host and + device +|==== + +The following [code]#enum# is used to refer to the different types of allocations +inside of a SYCL program: + +[source,,linenums] +---- +namespace sycl { + namespace usm { + enum class alloc { + host, + device, + shared, + unknown + }; + } +} +---- + +USM is an optional feature which may not be supported by all devices, and +devices that support USM may not support all types of USM allocation. A SYCL +application can use the [code]#device::has()# function to determine the +level of USM support for a device. See <> in +<> for more details. + +The characteristics of USM allocations are summarized in +<>. + +[[table.USM.allocation.characteristics]] +.Characteristics of the different kinds of USM allocation +[width="100%",options="header",cols="16%,16%,16%,16%,16%,16%"] +|==== +| Allocation Type | Initial Location | Accessible By | | Migratable To | +.3+| [code]#device# .3+| [code]#device# | [code]#host# | No | [code]#host# | No +| [code]#device# | Yes | [code]#device# | N/A +| Another [code]#device# | Optional (P2P)| Another [code]#device#| No + +.2+| [code]#host# .2+| [code]#host# | [code]#host# | Yes | [code]#host# | N/A +| Any [code]#device# | Yes | [code]#device# | No + +.3+| [code]#shared# .3+| Unspecified | [code]#host# | Yes | [code]#host# | Yes +| [code]#device# | Yes | [code]#device# | Yes +| Another [code]#device# | Optional | Another [code]#device#| Optional +|==== + +USM allocations are only guaranteed to be valid in the SYCL context in which +they were created. The behavior of accessing a USM allocation in a different +context from which it was created is undefined. Attempting to access a kind +of USM allocation that is not supported by the device results in undefined +behavior. + +Device allocations are used for explicitly managing device memory. +Programmers directly allocate device memory and explicitly copy data +between host memory and a device allocation. Device allocations are obtained +through SYCL USM device allocation routines instead of system allocation +routines like [code]#std::malloc# or {cpp} [code]#new#. Device +allocations are not accessible on the host, but the pointer values remain +consistent on account of Unified Addressing. The size of device allocations +will be limited by the amount of memory in a device. Support for device +allocations on a specific device can be queried through +[code]#aspect::usm_device_allocations#. + +Device allocations must be explicitly copied between the host and a device. +The member functions to copy and initialize data are found in +<> and <>, and these +functions may be used on device allocations if a device supports +[code]#aspect::usm_device_allocations#. + +Host allocations allow devices to directly read and write host memory +inside of a kernel. This can be useful for several reasons, such as when the +overhead of moving a small amount of data is not worth paying over the cost of a +remote access or when the size of a data set exceeds the size of a device's memory. +Host allocations must also be obtained using SYCL routines instead +of system allocation routines. While a device may remotely read and +write a host allocation, the allocation does not migrate to the device - +it remains in host memory. Users should take care to properly synchronize +access to host allocations between host execution and kernels. The total +size of host allocations will be limited by the amount of pinnable-memory +on the host on most systems. Support for host allocations on a specific +device can be queried through [code]#aspect::usm_host_allocations#. +Support for atomic modification of host allocations +on a specific device can be queried through +[code]#aspect::usm_atomic_host_allocations#. + +Shared allocations implicitly share data between the host +and devices. Data may move to where it is being used without the programmer +explicitly informing the runtime. It is up to the runtime and backends +to make sure that a shared allocation is available where it is used. +Shared allocations must also be obtained using SYCL allocation routines +instead of the system allocator. The maximum size of a shared allocation +on a specific device, and the total size of all shared allocations in a +context, are implementation-defined. +Support for shared allocations on a +specific device can be queried through [code]#aspect::usm_shared_allocations#. + +Not all devices may support concurrent access of a shared allocation +with the host. If a device does not support this, +host execution and device code must take turns accessing the allocation, so +the host must not access a shared allocation while a kernel is executing. +Host access to a shared allocation which is also accessed +by an executing kernel on a device that does not support +concurrent access results in undefined behavior. If a device does +support concurrent access, both the host and and the device may atomically +modify the same data inside an allocation. Allocations, or pieces of allocations, +are now free to migrate to different devices in the same context +that also support this capability. Additionally, many devices that support +concurrent access may support a working set of shared allocations +larger than device memory. +Users may query whether a device supports concurrent access with atomic +modification of shared allocations through the aspect +[code]#aspect::usm_atomic_shared_allocations#. +See <> in <> for more details. + +Performance hints for shared allocations may be specified by the user +by enqueueing [code]#prefetch# operations on a device. These operations +inform the SYCL runtime that the specified shared allocation is +likely to be accessed on the device in the future, and that it is free +to migrate the allocation to the device. +More about [code]#prefetch# is found in <> and +<>. If a device supports concurrent access to +shared allocations, then [code]#prefetch# operations may be overlapped +with kernel execution. + +Additionally, users may use the [code]#mem_advise# member function to annotate +shared allocations with [code]#advice#. Valid [code]#advice# is defined by the +device and its associated backend. See <> and +<> for more information. + +In the most capable systems, users do not need to use SYCL USM allocation functions +to create shared allocations. The system allocator ([code]#malloc#/[code]#new#) may +instead be used. Likewise, [code]#std::free# and +[code]#delete# are used instead of [code]#sycl::free#. Note that +host and device allocations are unaffected by this +change and must still be allocated using their respective USM functions in +order to guarantee their behavior. Users may query the device to determine +if system allocations are supported for use on the device, through +[code]#aspect::usm_system_allocations#. + + + +=== USM allocations + +USM provides several allocation functions. These functions accept a [code]#property_list# parameter, which is provided for future extensibility. This specification does not yet define any USM allocation properties. + +==== {cpp} allocator interface + +USM provides an allocator class that aligns with the {cpp} allocator interface. This is useful when +using USM with things like {cpp} containers or routines like [code]#std::allocate_shared#. However, due +to how {cpp} library routines that use allocators tend to assume that any memory allocated by an allocator +may be accessed on the host, the [code]#usm_allocator# class is not required to support +allocating [code]#usm::alloc::device# allocations. + +[source,,linenums] +---- +template +class usm_allocator { +public: + using value_type = T; + using propagate_on_container_copy_assignment = std::true_type; + using propagate_on_container_move_assignment = std::true_type; + using propagate_on_container_swap = std::true_type; + +public: + template struct rebind { + typedef usm_allocator other; + }; + + usm_allocator() noexcept = delete; + usm_allocator(const context &ctxt, + const device &dev, + const property_list &propList = {}) noexcept; + usm_allocator(const queue &q, + const property_list &propList = {}) noexcept; + usm_allocator(const usm_allocator &other) noexcept = default; + usm_allocator(usm_allocator &&) noexcept = default; + usm_allocator &operator=(const usm_allocator &) = delete; + usm_allocator &operator=(usm_allocator &&) = default; + + + template + usm_allocator(usm_allocator const &) noexcept; + + /// Allocate memory + T *allocate(size_t count); + + /// Deallocate memory + void deallocate(T *Ptr, size_t count); + + /// Equality Comparison + /// + /// Allocators only compare equal if they are of the same USM kind, alignment, + /// context, and device + template + friend bool operator==(const usm_allocator &, + const usm_allocator &); + + /// Inequality Comparison + /// Allocators only compare unequal if they are not of the same USM kind, alignment, + /// context, or device + template + friend bool operator!=(const usm_allocator &, + const usm_allocator &); +}; +---- + +While the modern {cpp} [code]#usm_allocator# interface is sufficient for +specifying USM allocations and deallocations, many programmers may prefer +C-style [code]#malloc-influenced# APIs. As a convenience to +programmers, [code]#malloc-style# APIs are also defined. Additionally, +other utility functions are specified in the following sections to perform +various operations such as memory copies and initializations as well as to +provide performance hints. + +If the user attempts to allocate a kind of USM allocation on a device that does +not support it, the allocation functions will throw a synchronous [code]#exception# with the +[code]#errc::feature_not_supported# error code. + +==== Device allocation functions + +[[table.usm.device.allocs]] +.USM Device Memory Allocation Functions +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Function @ Description +a@ +[source] +---- +void* sycl::malloc_device(size_t numBytes, + const device& syclDevice, + const context& syclContext, + const property_list &propList = {}) +---- +a@ Returns a pointer to the newly allocated memory on [code]#syclDevice# on +success. The allocation size is specified in bytes. This memory is not +accessible on the host. Memory allocated by [code]#sycl::malloc_device# +must be deallocated with [code]#sycl::free# to avoid memory leaks. On failure, +returns [code]#nullptr#. Zero or more properties can be provided to the +allocation function via an instance of [code]#property_list#. Throws a +synchronous [code]#exception# with the [code]#errc::feature_not_supported# +error code if the [code]#syclDevice# does not have +[code]#aspect::usm_device_allocations#. + +a@ +[source] +---- +template +T* sycl::malloc_device(size_t count, + const device& syclDevice, + const context& syclContext, + const property_list &propList = {}) +---- +a@ Returns a pointer to the newly allocated memory on [code]#syclDevice# on +success. The allocation size is specified in number of elements of type +[code]#T#. This memory is not accessible on the host. Memory allocated +by [code]#sycl::malloc_device# must be deallocated with +[code]#sycl::free# to avoid memory leaks. On failure, returns [code]#nullptr#. +Zero or more properties can be provided to the allocation function +via an instance of [code]#property_list#. +Throws a synchronous [code]#exception# with the +[code]#errc::feature_not_supported# error code if the [code]#syclDevice# +does not have [code]#aspect::usm_device_allocations#. + +a@ +[source] +---- +void* sycl::malloc_device(size_t numBytes, + const queue& syclQueue, + const property_list &propList = {}) +---- +a@ Simplified form where [code]#syclQueue# provides the [code]#device# +and [code]#context#. +Zero or more properties can be provided to the allocation function +via an instance of [code]#property_list#. +Throws a synchronous [code]#exception# with the +[code]#errc::feature_not_supported# error code if the device +does not have [code]#aspect::usm_device_allocations#. + +a@ +[source] +---- +template +T* sycl::malloc_device(size_t count, + const queue& syclQueue, + const property_list &propList = {}) +---- +a@ Simplified form where [code]#syclQueue# provides the [code]#device# +and [code]#context#. +Zero or more properties can be provided to the allocation function +via an instance of [code]#property_list#. +Throws a synchronous [code]#exception# with the +[code]#errc::feature_not_supported# error code if the device +does not have [code]#aspect::usm_device_allocations#. + +a@ +[source] +---- +void* +sycl::aligned_alloc_device(size_t alignment, + size_t numBytes, + const device& syclDevice, + const context& syclContext, + const property_list &propList = {}) +---- +a@ Returns a pointer to the newly allocated memory on +the specified [code]#device# with [code]#alignment#-byte alignment on success. +The allocation size is specified in bytes. This memory is not accessible on +the host. Memory allocated by [code]#sycl::aligned_alloc_device# must be +deallocated with [code]#sycl::free# to avoid memory leaks. On failure, returns +[code]#nullptr#. Devices may only permit certain alignments. Zero or more +properties can be provided to the allocation function via an instance of +[code]#property_list#. Throws a synchronous [code]#exception# with the +[code]#errc::feature_not_supported# error code if the [code]#syclDevice# +does not have [code]#aspect::usm_device_allocations#. + +a@ +[source] +---- +template +T* +sycl::aligned_alloc_device(size_t alignment, + size_t count, + const device& syclDevice, + const context& syclContext, + const property_list &propList = {}) +---- +a@ Returns a pointer to the newly allocated memory on +the specified [code]#device# with [code]#alignment#-byte alignment on success. +The allocation size is specified in elements of type [code]#T#. This memory is +not accessible on the host. Memory allocated by +[code]#sycl::aligned_alloc_device# must be deallocated with [code]#sycl::free# +to avoid memory leaks. On failure, returns [code]#nullptr#. Devices may only +permit certain alignments. Zero or more properties can be provided to the +allocation function via an instance of [code]#property_list#. Throws a +synchronous [code]#exception# with the [code]#errc::feature_not_supported# +error code if the [code]#syclDevice# does not have +[code]#aspect::usm_device_allocations#. + +a@ +[source] +---- +void* +sycl::aligned_alloc_device(size_t alignment, + size_t numBytes, + const queue& syclQueue, + const property_list &propList = {}) +---- +a@ Simplified form where [code]#syclQueue# provides the [code]#device# +and [code]#context#. +Zero or more properties can be provided to the allocation function +via an instance of [code]#property_list#. +Throws a synchronous [code]#exception# with the +[code]#errc::feature_not_supported# error code if the device +does not have [code]#aspect::usm_device_allocations#. + +a@ +[source] +---- +template +T* +sycl::aligned_alloc_device(size_t alignment, + size_t count, + const queue& syclQueue, + const property_list &propList = {}) +---- +a@ Simplified form where [code]#syclQueue# provides the [code]#device# +and [code]#context#. +Zero or more properties can be provided to the allocation function +via an instance of [code]#property_list#. +Throws a synchronous [code]#exception# with the +[code]#errc::feature_not_supported# error code if the device +does not have [code]#aspect::usm_device_allocations#. + +|==== + +==== Host allocation functions + +[[table.usm.host.allocs]] +.USM Host Memory Allocation Functions +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Function @ Description +a@ +[source] +---- +void* sycl::malloc_host(size_t numBytes, + const context& syclContext, + const property_list &propList = {}) +---- +a@ Returns a pointer to the newly allocated host memory on +success. This allocation is specified in bytes. The allocation is +accessible on the host and devices contained in the specified [code]#context#. +Memory allocated by [code]#sycl::malloc_host# must be +deallocated with [code]#sycl::free# to avoid memory leaks. On +failure, returns [code]#nullptr#. +Zero or more properties can be provided to the allocation function +via an instance of [code]#property_list#. +Only devices that have [code]#aspect::usm_host_allocations# may access the +memory allocated by this function. Attempting to access the memory from +a device that does not have the aspect results in undefined behavior. + +a@ +[source] +---- +template +T* sycl::malloc_host(size_t count, + const context& syclContext, + const property_list &propList = {}) +---- +a@ Returns a pointer to the newly allocated host memory on +success. This allocation is specified in number of elements of type [code]#T#. +The allocation is accessible on the host and devices contained in the +specified [code]#context#. +Memory allocated by [code]#sycl::malloc_host# must be +deallocated with [code]#sycl::free# to avoid memory leaks. On +failure, returns [code]#nullptr#. +Zero or more properties can be provided to the allocation function +via an instance of [code]#property_list#. +Only devices that have [code]#aspect::usm_host_allocations# may access the +memory allocated by this function. Attempting to access the memory from +a device that does not have the aspect results in undefined behavior. + +a@ +[source] +---- +void* sycl::malloc_host(size_t numBytes, + const queue& syclQueue, + const property_list &propList = {}) +---- +a@ Simplified form where [code]#syclQueue# provides the [code]#context#. +Zero or more properties can be provided to the allocation function +via an instance of [code]#property_list#. +Only devices that have [code]#aspect::usm_host_allocations# may access the +memory allocated by this function. Attempting to access the memory from +a device that does not have the aspect results in undefined behavior. + +a@ +[source] +---- +template +T* sycl::malloc_host(size_t count, + const queue& syclQueue, + const property_list &propList = {}) +---- +a@ Simplified form where [code]#syclQueue# provides the [code]#context#. +Zero or more properties can be provided to the allocation function +via an instance of [code]#property_list#. +Only devices that have [code]#aspect::usm_host_allocations# may access the +memory allocated by this function. Attempting to access the memory from +a device that does not have the aspect results in undefined behavior. + +a@ +[source] +---- +void* +sycl::aligned_alloc_host(size_t alignment, + size_t numBytes, + const context& syclContext, + const property_list &propList = {}) +---- +a@ Returns a pointer to the newly allocated host memory on +success. This allocation is specified in bytes and aligned to the specified +alignment. The allocation is accessible on the host and devices contained +in the specified [code]#context#. +Memory allocated by [code]#sycl::malloc_host# must be +deallocated with [code]#sycl::free# to avoid memory leaks. On +failure, returns [code]#nullptr#. +Zero or more properties can be provided to the allocation function +via an instance of [code]#property_list#. +Only devices that have [code]#aspect::usm_host_allocations# may access the +memory allocated by this function. Attempting to access the memory from +a device that does not have the aspect results in undefined behavior. + +a@ +[source] +---- +template +T* +sycl::aligned_alloc_host(size_t alignment, + size_t count, + const context& syclContext, + const property_list &propList = {}) +---- +a@ Returns a pointer to the newly allocated host memory on +success. This allocation is specified in elements of type [code]#T# and +aligned to the specified alignment. The allocation is accessible on the +host and devices contained in the specified [code]#context#. +Memory allocated by [code]#sycl::malloc_host# must be +deallocated with [code]#sycl::free# to avoid memory leaks. On +failure, returns [code]#nullptr#. +Zero or more properties can be provided to the allocation function +via an instance of [code]#property_list#. +Only devices that have [code]#aspect::usm_host_allocations# may access the +memory allocated by this function. Attempting to access the memory from +a device that does not have the aspect results in undefined behavior. + +a@ +[source] +---- +void* +sycl::aligned_alloc_host(size_t alignment, + size_t numBytes, + const queue& syclQueue, + const property_list &propList = {}) +---- +a@ Simplified form where [code]#syclQueue# provides the [code]#context#. +Zero or more properties can be provided to the allocation function +via an instance of [code]#property_list#. +Only devices that have [code]#aspect::usm_host_allocations# may access the +memory allocated by this function. Attempting to access the memory from +a device that does not have the aspect results in undefined behavior. + +a@ +[source] +---- +template +void* +sycl::aligned_alloc_host(size_t alignment, + size_t count, + const queue& syclQueue, + const property_list &propList = {}) +---- +a@ Simplified form where [code]#syclQueue# provides the [code]#context#. +Zero or more properties can be provided to the allocation function +via an instance of [code]#property_list#. +Only devices that have [code]#aspect::usm_host_allocations# may access the +memory allocated by this function. Attempting to access the memory from +a device that does not have the aspect results in undefined behavior. + +|==== + +==== Shared allocation functions + +[[table.usm.shared.allocs]] +.USM Shared Memory Allocation Functions +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Function @ Description +a@ +[source] +---- +void* sycl::malloc_shared(size_t numBytes, + const device& syclDevice, + const context& syclContext, + const property_list &propList = {}) +---- +a@ Returns a shared allocation that is accessible on the host and +on [code]#syclDevice#. [code]#syclContext# must contain [code]#syclDevice#. +This allocation is specified in bytes. This memory +must be deallocated with [code]#sycl::free# to avoid memory leaks. On failure, +returns [code]#nullptr#. +Zero or more properties can be provided to the allocation function +via an instance of [code]#property_list#. +Throws a synchronous [code]#exception# with the +[code]#errc::feature_not_supported# error code if the [code]#syclDevice# +does not have [code]#aspect::usm_shared_allocations#. + +a@ +[source] +---- +template +T* sycl::malloc_shared(size_t count, + const device& syclDevice, + const context& syclContext, + const property_list &propList = {}) +---- +a@ Returns a shared allocation that is accessible on the host and +on [code]#syclDevice#. [code]#syclContext# must contain [code]#syclDevice#. +This allocation is specified in number of elements of +type [code]#T#. This memory must be deallocated with [code]#sycl::free# to avoid +memory leaks. On failure, returns [code]#nullptr#. +Zero or more properties can be provided to the allocation function +via an instance of [code]#property_list#. +Throws a synchronous [code]#exception# with the +[code]#errc::feature_not_supported# error code if the [code]#syclDevice# +does not have [code]#aspect::usm_shared_allocations#. + +a@ +[source] +---- +void* sycl::malloc_shared(size_t numBytes, + const queue& syclQueue, + const property_list &propList = {}) +---- +a@ Simplified form where [code]#syclQueue# provides the [code]#device# and +[code]#context#. +Zero or more properties can be provided to the allocation function +via an instance of [code]#property_list#. +Throws a synchronous [code]#exception# with the +[code]#errc::feature_not_supported# error code if the device +does not have [code]#aspect::usm_shared_allocations#. + +a@ +[source] +---- +template +T* sycl::malloc_shared(size_t count, + const queue& syclQueue, + const property_list &propList = {}) +---- +a@ Simplified form where [code]#syclQueue# provides the [code]#device# and +[code]#context#. +Zero or more properties can be provided to the allocation function +via an instance of [code]#property_list#. +Throws a synchronous [code]#exception# with the +[code]#errc::feature_not_supported# error code if the device +does not have [code]#aspect::usm_shared_allocations#. + +a@ +[source] +---- +void* +sycl::aligned_alloc_shared(size_t alignment, + size_t numBytes, + const device& syclDevice, + const context& syclContext, + const property_list &propList = {}) +---- +a@ Returns a shared allocation that is accessible on the host and +on [code]#syclDevice#. [code]#syclContext# must contain [code]#syclDevice#. +This allocation is specified in bytes and aligned to the +specified alignment. This memory +must be deallocated with [code]#sycl::free# to avoid memory leaks. On failure, +returns [code]#nullptr#. +Zero or more properties can be provided to the allocation function +via an instance of [code]#property_list#. +Throws a synchronous [code]#exception# with the +[code]#errc::feature_not_supported# error code if the [code]#syclDevice# +does not have [code]#aspect::usm_shared_allocations#. + +a@ +[source] +---- +template +T* +sycl::aligned_alloc_shared(size_t alignment, + size_t count, + const device& syclDevice, + const context& syclContext, + const property_list &propList = {}) +---- +a@ Returns a shared allocation that is accessible on the host and +on [code]#syclDevice#. [code]#syclContext# must contain [code]#syclDevice#. +This allocation is specified in number of elements of type [code]#T# and aligned to the +specified alignment. This memory +must be deallocated with [code]#sycl::free# to avoid memory leaks. On failure, +returns [code]#nullptr#. +Zero or more properties can be provided to the allocation function +via an instance of [code]#property_list#. +Throws a synchronous [code]#exception# with the +[code]#errc::feature_not_supported# error code if the [code]#syclDevice# +does not have [code]#aspect::usm_shared_allocations#. + +a@ +[source] +---- +void* +sycl::aligned_alloc_shared(size_t alignment, + size_t numBytes, + const queue& syclQueue, + const property_list &propList = {}) +---- +a@ Simplified form where [code]#syclQueue# provides the [code]#device# and +[code]#context#. +Zero or more properties can be provided to the allocation function +via an instance of [code]#property_list#. +Throws a synchronous [code]#exception# with the +[code]#errc::feature_not_supported# error code if the device +does not have [code]#aspect::usm_shared_allocations#. + +a@ +[source] +---- +template +T* +sycl::aligned_alloc_shared(size_t alignment, + size_t count, + const queue& syclQueue, + const property_list &propList = {}) +---- +a@ Simplified form where [code]#syclQueue# provides the [code]#device# and +[code]#context#. +Zero or more properties can be provided to the allocation function +via an instance of [code]#property_list#. +Throws a synchronous [code]#exception# with the +[code]#errc::feature_not_supported# error code if the device +does not have [code]#aspect::usm_shared_allocations#. + +|==== + +==== Parameterized allocation functions + +Device aspects define the set of legal allocation [code]#kind# in the +parameterized allocation functions that follow. [code]#usm:alloc::host# +allocations require a device to have [code]#aspect::usm_host_allocations#. +[code]#usm:alloc::device# allocations require a device to have +[code]#aspect::usm_device_allocations#. +[code]#usm:alloc::shared# allocations require a device to have +[code]#aspect::usm_shared_allocations#. Allocating a [code]#kind# +on a device that doesn't have the appropriate aspect results in +the allocation function throwing a synchronous [code]#exception# +with the [code]#errc::feature_not_supported# error code, or +undefined behavior in the case of use of a host allocation on +a device that doesn't have [code]#aspect::usm_host_allocations#. + + +[[table.usm.param.allocs]] +.USM Parameterized Allocation Functions +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Function @ Description +a@ +[source] +---- +void *sycl::malloc(size_t numBytes, + const device& syclDevice, + const context& syclContext, + usm::alloc kind, + const property_list &propList = {}) +---- +a@ Returns a [code]#kind# allocation. If [code]#kind# is [code]#usm::alloc::host#, +[code]#syclDevice# is ignored. If not, [code]#syclContext# must contain +[code]#syclDevice#. +This allocation is specified in bytes. This memory +must be deallocated with [code]#sycl::free# to avoid memory leaks. On failure, +returns [code]#nullptr#. +Zero or more properties can be provided to the allocation function +via an instance of [code]#property_list#. + +a@ +[source] +---- +template +T *sycl::malloc(size_t count, + const device& syclDevice, + const context& syclContext, + usm::alloc kind, + const property_list &propList = {}) +---- +a@ Returns a [code]#kind# allocation. If [code]#kind# is [code]#usm::alloc::host#, +[code]#syclDevice# is ignored. If not, [code]#syclContext# must contain +[code]#syclDevice#. +This allocation is specified in number of elements of type [code]#T#. +This memory must be deallocated with [code]#sycl::free# to avoid memory leaks. +On failure, returns [code]#nullptr#. +Zero or more properties can be provided to the allocation function +via an instance of [code]#property_list#. + + +a@ +[source] +---- +void *sycl::malloc(size_t numBytes, + const queue& syclQueue, + usm::alloc kind, + const property_list &propList = {}) +---- +a@ Simplified form where [code]#syclQueue# provides the [code]#context# +and any necessary [code]#device#. +Zero or more properties can be provided to the allocation function +via an instance of [code]#property_list#. + +a@ +[source] +---- +template +T *sycl::malloc(size_t count, + const queue& syclQueue, + usm::alloc kind, + const property_list &propList = {}) +---- +a@ Simplified form where [code]#syclQueue# provides the [code]#context# +and any necessary [code]#device#. +Zero or more properties can be provided to the allocation function +via an instance of [code]#property_list#. + +a@ +[source] +---- +void *sycl::aligned_alloc(size_t alignment, + size_t numBytes, + const device& syclDevice, + const context& syclContext, + usm::alloc kind, + const property_list &propList = {}) +---- +a@ Returns a [code]#kind# allocation. If [code]#kind# is [code]#usm::alloc::host#, +[code]#syclDevice# is ignored. If not, [code]#syclContext# must contain +[code]#syclDevice#. +This allocation is specified in bytes and aligned to the +specified alignment. This memory +must be deallocated with [code]#sycl::free# to avoid memory leaks. On failure, +returns [code]#nullptr#. +Zero or more properties can be provided to the allocation function +via an instance of [code]#property_list#. + +a@ +[source] +---- +template +T* sycl::aligned_alloc(size_t alignment, + size_t count, + const device& syclDevice, + const context& syclContext, + usm::alloc kind, + const property_list &propList = {}) +---- +a@ Returns a [code]#kind# allocation. If [code]#kind# is [code]#usm::alloc::host#, +[code]#syclDevice# is ignored. If not, [code]#syclContext# must contain +[code]#syclDevice#. +This allocation is specified in number of elements of type [code]#T# and aligned +to the specified alignment. This memory +must be deallocated with [code]#sycl::free# to avoid memory leaks. On failure, +returns [code]#nullptr#. +Zero or more properties can be provided to the allocation function +via an instance of [code]#property_list#. + +a@ +[source] +---- +void *sycl::aligned_alloc(size_t alignment, + size_t numBytes, + const queue& syclQueue, + usm::alloc kind, + const property_list &propList = {}) +---- +a@ Simplified form where [code]#syclQueue# provides the [code]#context# +and any necessary [code]#device#. +Zero or more properties can be provided to the allocation function +via an instance of [code]#property_list#. + +a@ +[source] +---- +template +T* sycl::aligned_alloc(size_t alignment, + size_t count, + const queue& syclQueue, + usm::alloc kind, + const property_list &propList = {}) +---- +a@ Simplified form where [code]#syclQueue# provides the [code]#context# +and any necessary [code]#device#. +Zero or more properties can be provided to the allocation function +via an instance of [code]#property_list#. + +|==== + + +==== Memory deallocation functions + +[[table.usm.free]] +.USM Deallocation Functions +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Function @ Description +a@ +[source] +---- +void sycl::free(void* ptr, sycl::context& syclContext) +---- +a@ Frees an allocation. The memory pointed to by [code]#ptr# must have been +allocated using one of the USM allocation routines. [code]#syclContext# must +be the same [code]#context# that was used to allocate the memory. + +a@ +[source] +---- +void sycl::free(void* ptr, sycl::queue& syclQueue) +---- +a@ Alternate form where [code]#syclQueue# provides the [code]#context#. + +|==== + +=== Unified shared memory pointer queries + +Since USM pointers look like raw {cpp} pointers, users cannot deduce what kind of +USM allocation a given pointer may be from examining its type. However, two +functions are defined that let users query the type of a USM allocation and, if +applicable, the [code]#device# on which it was allocated. These query functions +are only supported on the host. + +[[table.usm.ptr.query]] +.USM Pointer Query Functions +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Function @ Description +a@ +[source] +---- +usm::alloc get_pointer_type(const void *ptr, + const context &ctxt) +---- +a@ Returns the USM allocation type for [code]#ptr# if [code]#ptr# +falls inside a valid USM allocation. Returns [code]#usm::alloc::unknown# if +[code]#ptr# is not a valid USM allocation. + +a@ +[source] +---- +sycl::device get_pointer_device(const void *ptr, + const context &ctxt) +---- +a@ Returns the [code]#device# associated with the USM allocation. If +[code]#ptr# is an allocation of type [code]#usm::alloc::host#, returns the +first device in [code]#ctxt#. Throws an error if [code]#ptr# is not a valid +USM allocation. + +|==== + +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% begin expressingParallelism %%%%%%%%%%%%%%%%%%%%%%%%%%%% + +[[sec:expr-parall-thro]] +== Expressing parallelism through kernels + + +[[ranges-identifiers]] +=== Ranges and index space identifiers + +The data parallelism of the SYCL kernel execution model requires +instantiation of a parallel execution over a +range of iteration space coordinates. To achieve this, SYCL exposes types +to define the range of execution and to identify a given execution +instance's point in the iteration space. + +The following types are defined: [code]#range#, +[code]#nd_range#, [code]#id#, [code]#item#, [code]#h_item#, +[code]#nd_item# and [code]#group#. + +When constructing multi-dimensional ids or ranges from integers, the elements +are written such that the right-most element varies fastest in a linearization +of the multi-dimensional space (see <>). + + +[[table.id.summary]] +.Summary of types used to identify points in an index space, and ranges over which those points can vary +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Type @ Description +a@ +[source] +---- +id +---- + a@ A point within a range + +a@ +[source] +---- +range +---- + a@ Bounds over which an [code]#id# may vary + +a@ +[source] +---- +item +---- + a@ Pairing of an [code]#id# (specific point) and the + [code]#range# that it is bounded by + +a@ +[source] +---- +nd_range +---- + a@ Encapsulates both global and local (work-group size) + [code]#ranges# over which work-item [code]#ids# will + vary + +a@ +[source] +---- +nd_item +---- + a@ Encapsulates two [code]#items#, one for global + [code]#id# and [code]#range#, and one for local [code]#id# + and [code]#range# + +a@ +[source] +---- +h_item +---- + a@ Index point queries within hierarchical parallelism + ([code]#parallel_for_work_item)#. Encapsulates physical global and + local [code]#ids# and [code]#ranges#, as well as a + logical local [code]#id# and [code]#range# defined by hierarchical + parallelism + +a@ +[source] +---- +group +---- + a@ Work-group queries within hierarchical parallelism + ([code]#parallel_for_work_group)#, and exposes the + [code]#parallel_for_work_item# construct that identifies code to be + executed by each work-item. Encapsulates work-group [code]#ids# + and [code]#ranges# + +|==== + + + +[[range-class]] +==== [code]#range# class + +[code]#range# +is a 1D, 2D or 3D vector that defines +the iteration domain of either a single work-group in a parallel +dispatch, or the overall dimensions of the dispatch. It can be +constructed from integers. + +The SYCL [code]#range# class template provides the common by-value +semantics (see <>). + +A synopsis of the SYCL [code]#range# class is provided below. The +constructors, member functions and non-member functions of the SYCL +[code]#range# class are listed in +<>, <> and +<> respectively. The additional common +special member functions and common member functions are listed in +<> in +<> and +<> respectively. + +[source,,linenums] +---- +include::{header_dir}/range.h[lines=4..-1] +---- + + +[[table.constructors.range]] +.Constructors of the [code]#range# class template +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +range(size_t dim0) +---- + a@ Construct a 1D range with value dim0. + Only valid when the template parameter [code]#dimensions# is equal + to 1. + +a@ +[source] +---- +range(size_t dim0, size_t dim1) +---- + a@ Construct a 2D range with values dim0 and dim1. + Only valid when the template parameter [code]#dimensions# is equal + to 2. + +a@ +[source] +---- +range(size_t dim0, size_t dim1, size_t dim2) +---- + a@ Construct a 3D range with values dim0, dim1 and dim2. + Only valid when the template parameter [code]#dimensions# is equal + to 3. + +|==== + + + +[[table.members.range]] +.Member functions of the [code]#range# class template +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +size_t get(int dimension) const +---- + a@ Return the value of the specified dimension of the + [code]#range#. + +a@ +[source] +---- +size_t &operator[](int dimension) +---- + a@ Return the l-value of the specified dimension of the + [code]#range#. + +a@ +[source] +---- +size_t operator[](int dimension) const +---- + a@ Return the value of the specified dimension of the + [code]#range#. + +a@ +[source] +---- +size_t size() const +---- + a@ Return the size of the range computed as dimension0*...*dimensionN. + +|==== + + + +[[table.functions.range]] +.Hidden friend functions of the SYCL [code]#range# class template +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Hidden friend function @ Description +a@ +[source] +---- +range operatorOP(const range &lhs, const range &rhs) +---- + a@ Where [code]#OP# is: [code]#pass:[+]#, [code]#-#, [code]#*#, + [code]#/#, [code]#%#, [code]#<<#, [code]#>>#, + [code]#&#, [code]#|#, [code]#^#, + [code]#&&#, [code]#||#, + [code]#<#, [code]#>#, [code]#+<=+#, + [code]#>=#. + +Constructs and returns a new instance of the SYCL [code]#range# class +template with the same dimensionality as [code]#lhs# [code]#range#, +where each element of the new SYCL [code]#range# instance is the +result of an element-wise [code]#OP# operator between each element of +[code]#lhs# [code]#range# and each element of the [code]#rhs# +[code]#range#. If the operator returns a [code]#bool#, the result +is the cast to [code]#size_t#. + +a@ +[source] +---- +range operatorOP(const range &lhs, const size_t &rhs) +---- + a@ Where [code]#OP# is: [code]#pass:[+]#, [code]#-#, [code]#*#, + [code]#/#, [code]#%#, [code]#<<#, [code]#>>#, + [code]#&#, [code]#|#, [code]#^#, + [code]#&&#, [code]#||#, + [code]#<#, [code]#>#, [code]#+<=+#, + [code]#>=#. + +Constructs and returns a new instance of the SYCL [code]#range# class +template with the same dimensionality as [code]#lhs# [code]#range#, +where each element of the new SYCL [code]#range# instance is the result +of an element-wise [code]#OP# operator between each element of this +SYCL [code]#range# and the [code]#rhs# [code]#size_t#. If +the operator returns a [code]#bool#, the result is the cast to +[code]#size_t#. + +a@ +[source] +---- +range &operatorOP(range &lhs, const range &rhs) +---- + a@ Where [code]#OP# is: [code]#pass:[+=]#, [code]#-=#,[code]#*=#, [code]#/=#, [code]#%=#, [code]#+<<=+#, [code]#>>=#, [code]#&=#, [code]#|=#, [code]#^=#. + +Assigns each element of [code]#lhs# [code]#range# instance with the +result of an element-wise [code]#OP# operator between each element +of [code]#lhs# [code]#range# and each element of the [code]#rhs# +[code]#range# and returns [code]#lhs# [code]#range#. If the operator returns a [code]#bool#, the result is the cast +to [code]#size_t#. + +a@ +[source] +---- +range &operatorOP(range &lhs, const size_t &rhs) +---- + a@ Where [code]#OP# is: [code]#pass:[+=]#, [code]#-=#,[code]#*=#, [code]#/=#, [code]#%=#, [code]#+<<=+#, [code]#>>=#, [code]#&=#, [code]#|=#, [code]#^=#. + +Assigns each element of [code]#lhs# [code]#range# instance with the +result of an element-wise [code]#OP# operator between each element +of [code]#lhs# [code]#range# and the [code]#rhs# [code]#size_t# and returns [code]#lhs# [code]#range#. If the +operator returns a [code]#bool#, the result is the cast to +[code]#size_t#. + +a@ +[source] +---- +range operatorOP(const size_t &lhs, const range &rhs) +---- + a@ Where [code]#OP# is: [code]#pass:[+]#, [code]#-#, [code]#*#, + [code]#/#, [code]#%#, [code]#<<#, [code]#>>#, + [code]#&#, [code]#|#, [code]#^#, + [code]#&&#, [code]#||#, + [code]#<#, [code]#>#, [code]#+<=+#, + [code]#>=#. + +Constructs and returns a new instance of the SYCL [code]#range# class +template with the same dimensionality as the [code]#rhs# SYCL +[code]#range#, where each element of the new SYCL [code]#range# +instance is the result of an element-wise [code]#OP# operator between +the [code]#lhs# [code]#size_t# and each element of the +[code]#rhs# SYCL [code]#range#. If the operator returns a +[code]#bool#, the result is the cast to [code]#size_t#. + +a@ +[source] +---- +range operatorOP(const range &rhs) +---- + a@ Where [code]#OP# is: unary [code]#pass:[+]#, unary [code]#-#. + +Constructs and returns a new instance of the SYCL [code]#range# class +template with the same dimensionality as the [code]#rhs# SYCL +[code]#range#, where each element of the new SYCL [code]#range# +instance is the result of an element-wise [code]#OP# operator on +the [code]#rhs# SYCL [code]#range#. + +a@ +[source] +---- +range & operatorOP(range &rhs) +---- + a@ Where [code]#OP# is: prefix [code]#pass:[++]#, prefix [code]#--#. + +Assigns each element of the [code]#rhs# [code]#range# instance with the result +of an element-wise [code]#OP# operator on each element of the [code]#rhs# +[code]#range# and returns this [code]#range#. + +a@ +[source] +---- +range operatorOP(range &lhs, int) +---- + a@ Where [code]#OP# is: postfix [code]#pass:[++]#, postfix [code]#--#. + +Make a copy of the [code]#lhs# [code]#range#. +Assigns each element of the [code]#lhs# [code]#range# instance with the result +of an element-wise [code]#OP# operator on each element of the [code]#lhs# +[code]#range#. +Then return the initial copy of the [code]#range#. + +|==== + + + + +[[subsubsec:nd-range-class]] +==== [code]#nd_range# class + +// Interface for class: nd_range +[source,,linenums] +---- +include::{header_dir}/ndRange.h[lines=4..-1] +---- + +[code]#nd_range# +defines the iteration domain of both +the work-groups and the overall dispatch. To define this the +[code]#nd_range# comprises two ranges: the whole range over which +the kernel is to be executed, and the range of each work +group. + +The SYCL [code]#nd_range# class template provides the common by-value +semantics (see <>). + +A synopsis of the SYCL [code]#nd_range# class is provided below. The +constructors and member functions of the SYCL [code]#nd_range# class +are listed in <> and +<> respectively. The additional common special +member functions and common member functions are listed in +<> in <> +and <> respectively. + + +[[table.constructors.ndrange]] +.Constructors of the [code]#nd_range# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +nd_range( + range globalSize, + range localSize) + id offset = id()) +---- + a@ Construct an [code]#nd_range# from the local and global + constituent ranges. Supplying the option offset is + deprecated in SYCL 2020. + If the offset is not provided it will default to no offset. + +|==== + + + +[[table.members.ndrange]] +.Member functions for the [code]#nd_range# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +range get_global_range() const +---- + a@ Return the constituent global range. + +a@ +[source] +---- +range get_local_range() const +---- + a@ Return the constituent local range. + +a@ +[source] +---- +range get_group_range() const +---- + a@ Return a range representing the number of groups in each + dimension. This range would result from + [code]#globalSize/localSize# as provided on construction. + +a@ +[source] +---- +id get_offset() const +// Deprecated in SYCL 2020. +---- + a@ Deprecated in SYCL 2020. + Return the constituent offset. + +|==== + + + +[[id-class]] +==== [code]#id# class + +[code]#id# is a vector of dimensions that is used to +represent an <> into a global or local +[code]#range#. It can be used as an index in an accessor of the +same rank. The subscript operator ([code]#operator[](n)#) returns the component +[code]#n# as a [code]#size_t#. + +The SYCL [code]#id# class template provides the common by-value semantics +(see <>). + +A synopsis of the SYCL [code]#id# class is provided below. The +constructors, member functions and non-member functions of the SYCL +[code]#id# class are listed in <>, +<> and <> respectively. The +additional common special member functions and common member functions are +listed in <> in +<> and +<> respectively. + +[source,,linenums] +---- +include::{header_dir}/id.h[lines=4..-1] +---- + + +[[table.constructors.id]] +.Constructors of the [code]#id# class template +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +id() +---- + a@ Construct a SYCL [code]#id# with the value [code]#0# for each dimension. + +a@ +[source] +---- +id(size_t dim0) +---- + a@ Construct a 1D [code]#id# with value dim0. + Only valid when the template parameter [code]#dimensions# is equal + to 1. + +a@ +[source] +---- +id(size_t dim0, size_t dim1) +---- + a@ Construct a 2D [code]#id# with values dim0, dim1. + Only valid when the template parameter [code]#dimensions# is equal + to 2. + +a@ +[source] +---- +id(size_t dim0, size_t dim1, size_t dim2) +---- + a@ Construct a 3D [code]#id# with values dim0, dim1, dim2. + Only valid when the template parameter [code]#dimensions# is equal + to 3. + +a@ +[source] +---- +id(const range &range) +---- + a@ Construct an [code]#id# from the dimensions of [code]#range#. + +a@ +[source] +---- +id(const item &item) +---- + a@ Construct an [code]#id# from [code]#item.get_id()#. + +|==== + + + +[[table.members.id]] +.Member functions of the [code]#id# class template +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +size_t get(int dimension) const +---- + a@ Return the value of the [code]#id# for dimension + [code]#dimension#. + +a@ +[source] +---- +size_t &operator[](int dimension) +---- + a@ Return a reference to the requested dimension of the [code]#id# + object. + +a@ +[source] +---- +size_t operator[](int dimension) const +---- + a@ Return the value of the requested dimension of the [code]#id# + object. + +a@ +[source] +---- +operator size_t() const +---- + a@ Available only when: [code]#dimensions == 1# + +Returns the same value as [code]#get(0)#. + +|==== + +[[table.functions.id]] +.Hidden friend functions of the [code]#id# class template +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Hidden friend function @ Description +a@ +[source] +---- +id operatorOP(const id &lhs, const id &rhs) +---- + a@ Where [code]#OP# is: [code]#pass:[+]#, [code]#-#, [code]#*#, [code]#/#, [code]#%#, [code]#<<#, [code]#>>#, + [code]#&#, [code]#|#, [code]#^#, [code]#&&#, [code]#||#, [code]#<#, [code]#>#, [code]#+<=+#, [code]#>=#. + +Constructs and returns a new instance of the SYCL [code]#id# class +template with the same dimensionality as [code]#lhs# [code]#id#, where +each element of the new SYCL [code]#id# instance is the result of an +element-wise [code]#OP# operator between each element of [code]#lhs# +[code]#id# and each element of the [code]#rhs# [code]#id#. +If the operator returns a [code]#bool# the result is the cast to +[code]#size_t#. + +a@ +[source] +---- +id operatorOP(const id &lhs, const size_t &rhs) +---- + a@ Where [code]#OP# is: [code]#pass:[+]#, [code]#-#, [code]#*#, [code]#/#, [code]#%#, [code]#<<#, [code]#>>#, + [code]#&#, [code]#|#, [code]#^#, [code]#&&#, [code]#||#, [code]#<#, [code]#>#, [code]#+<=+#, [code]#>=#. + +Constructs and returns a new instance of the SYCL [code]#id# class +template with the same dimensionality as [code]#lhs# [code]#id#, where +each element of the new SYCL [code]#id# instance is the result of an +element-wise [code]#OP# operator between each element of [code]#lhs# +[code]#id# and the [code]#rhs# [code]#size_t#. If the +operator returns a [code]#bool# the result is the cast to +[code]#size_t#. + +a@ +[source] +---- +id &operatorOP(id &lhs, const id &rhs) +---- + a@ Where [code]#OP# is: [code]#pass:[+=]#, [code]#-=#,[code]#*=#, [code]#/=#, [code]#%=#, + [code]#+<<=+#, [code]#>>=#, [code]#&=#, [code]#|=#, [code]#^=#. + +Assigns each element of [code]#lhs# [code]#id# instance with the +result of an element-wise [code]#OP# operator between each element +of [code]#lhs# [code]#id# and each element of the [code]#rhs# +[code]#id# and returns [code]#lhs# [code]#id#. If +the operator returns a [code]#bool# the result is the cast to +[code]#size_t#. + +a@ +[source] +---- +id &operatorOP(id &lhs, const size_t &rhs) +---- + a@ Where [code]#OP# is: [code]#pass:[+=]#, [code]#-=#,[code]#*=#, [code]#/=#, [code]#%=#, + [code]#+<<=+#, [code]#>>=#, [code]#&=#, [code]#|=#, [code]#^=#. + +Assigns each element of [code]#lhs# [code]#id# instance with the +result of an element-wise [code]#OP# operator between each element +of [code]#lhs# [code]#id# and the [code]#rhs# [code]#size_t# +and returns [code]#lhs# [code]#id#. If the operator +returns a [code]#bool# the result is the cast to [code]#size_t#. + +a@ +[source] +---- +id operatorOP(const size_t &lhs, const id &rhs) +---- + a@ Where [code]#OP# is: [code]#pass:[+]#, [code]#-#, [code]#*#, [code]#/#, [code]#%#, [code]#<<#, [code]#>>#, + [code]#&#, [code]#|#, [code]#^#, [code]#&&#, [code]#||#, [code]#<#, [code]#>#, [code]#+<=+#, [code]#>=#. + +Constructs and returns a new instance of the SYCL [code]#id# class +template with the same dimensionality as the [code]#rhs# SYCL +[code]#id#, where each element of the new SYCL [code]#id# +instance is the result of an element-wise [code]#OP# operator between +the [code]#lhs# [code]#size_t# and each element of the +[code]#rhs# SYCL [code]#id#. If the operator returns a +[code]#bool# the result is the cast to [code]#size_t#. + +a@ +[source] +---- +id operatorOP(const id &rhs) +---- + a@ Where [code]#OP# is: unary [code]#pass:[+]#, unary [code]#-#. + +Constructs and returns a new instance of the SYCL [code]#id# class +template with the same dimensionality as the [code]#rhs# SYCL +[code]#id#, where each element of the new SYCL [code]#id# +instance is the result of an element-wise [code]#OP# operator on +the [code]#rhs# SYCL [code]#id#. + +a@ +[source] +---- +id & operatorOP(id &rhs) +---- + a@ Where [code]#OP# is: prefix [code]#pass:[++]#, prefix [code]#--#. + +Assigns each element of the [code]#rhs# [code]#id# instance with the result +of an element-wise [code]#OP# operator on each element of the [code]#rhs# +[code]#id# and returns this [code]#id#. + +a@ +[source] +---- +id operatorOP(id &lhs, int) +---- + a@ Where [code]#OP# is: postfix [code]#pass:[++]#, postfix [code]#--#. + +Make a copy of the [code]#lhs# [code]#id#. +Assigns each element of the [code]#lhs# [code]#id# instance with the result +of an element-wise [code]#OP# operator on each element of the [code]#lhs# +[code]#id#. +Then return the initial copy of the [code]#id#. + +|==== + + + +[[subsec:item.class]] +==== [code]#item# class + +<> identifies an instance of the function object +executing at each point in a [code]#range#. It is passed to a +[code]#parallel_for# call or returned by member functions of [code]#h_item#. +It encapsulates enough information to identify the work-item's range +of possible values and its ID in that range. It can optionally carry the offset of the +range if provided to the [code]#parallel_for#; note this is deprecated in SYCL 2020. +Instances of the [code]#item# class are +not user-constructible and are passed by the runtime to each instance +of the function object. + +The SYCL [code]#item# class template provides the common by-value semantics +(see <>). + +A synopsis of the SYCL [code]#item# class is provided below. The member +functions of the SYCL [code]#item# class are listed in +<>. The additional common special member functions +and common member functions are listed in <> in +<> and +<> respectively. + +// Interface for class: item +[source,,linenums] +---- +include::{header_dir}/item.h[lines=4..-1] +---- + + +[[table.members.item]] +.Member functions for the [code]#item# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +id get_id() const +---- + a@ Return the constituent [code]#id# + representing the work-item's position in the iteration space. + +a@ +[source] +---- +size_t get_id(int dimension) const +---- + a@ Return the same value as [code]#get_id()[dimension]#. + +a@ +[source] +---- +size_t operator[](int dimension) const +---- + a@ Return the same value as [code]#get_id(dimension)#. + +a@ +[source] +---- +range get_range() const +---- + a@ Returns a [code]#range# representing the dimensions of the + range of possible values of the [code]#item#. + +a@ +[source] +---- +size_t get_range(int dimension) const +---- + a@ Return the same value as [code]#get_range().get(dimension)#. + +a@ +[source] +---- +id get_offset() const +// Deprecated in SYCL 2020. +---- + a@ Deprecated in SYCL 2020. + Returns an [code]#id# representing the _n_-dimensional offset + provided to the [code]#parallel_for# and that is added by + the runtime to the global-ID of each work-item, if this item + represents a global range. For an item converted from an item with + no offset this will always return an [code]#id# of all 0 values. + +This member function is only available if [code]#with_offset# is [code]#true#. + +a@ +[source] +---- +operator item() const +---- + a@ Available only when: [code]#with_offset == false# + +Returns an [code]#item# representing the same information as the object holds +but also includes the offset set to 0. This conversion allow users to seamlessly +write code that assumes an offset and still provides an offset-less [code]#item#. + +a@ +[source] +---- +operator size_t() const +---- + a@ Available only when: [code]#dimensions == 1# + +Returns the same value as [code]#get(0)#. + +a@ +[source] +---- +size_t get_linear_id() const +---- + a@ Return the id as a linear index value. Calculating a linear + address from the multi-dimensional index follows + <>. + +|==== + + + +[[nditem-class]] +==== [code]#nd_item# class + +[code]#nd_item# identifies an instance of the function object +executing at each point in an [code]#nd_range# passed to a +[code]#parallel_for# call. It encapsulates enough +information to identify the <>'s local and global <>, the +<> and also provides access to the [code]#group# and +[code]#sub_group# classes. Instances of the [code]#nd_item# class are not user-constructible and are passed by the runtime to +each instance of the function object. + +The SYCL [code]#nd_item# class template provides the common by-value +semantics (see <>). + +A synopsis of the SYCL [code]#nd_item# class is provided below. The +member functions of the SYCL [code]#nd_item# class are listed in +<>. The additional common special member +functions and common member functions are listed in +<> in <> +and <> respectively. + +% interface for nd_item class +[source,,linenums] +---- +include::{header_dir}/nditem.h[lines=4..-1] +---- + + +[[table.members.nditem]] +.Member functions for the [code]#nd_item# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +id get_global_id() const +---- + a@ Return the constituent <> representing the + work-item's position in the global iteration space. + +a@ +[source] +---- +size_t get_global_id(int dimension) const +---- + a@ Return the constituent element of the <> + representing the work-item's position in the <> + in the given [code]#dimension#. + +a@ +[source] +---- +size_t get_global_linear_id() const +---- + a@ Return the constituent <> as a linear index value, representing the work-item's + position in the global iteration space. The linear address is calculated from the + multi-dimensional index by first subtracting the offset and then following + <>. + +a@ +[source] +---- +id get_local_id() const +---- + a@ Return the constituent <> representing the + work-item's position within the current <>. + +a@ +[source] +---- +size_t get_local_id(int dimension) const +---- + a@ Return the constituent element of the <> representing the + work-item's position within the current <> in the given + [code]#dimension#. + +a@ +[source] +---- +size_t get_local_linear_id() const +---- + a@ Return the constituent <> as a linear index value, representing the work-item's + position within the current <>. The linear address is calculated from the + multi-dimensional index following <>. + +a@ +[source] +---- +group get_group() const +---- + a@ Return the constituent <>, [code]#group# + representing the <>'s position within the overall + <>. + +a@ +[source] +---- +sub_group get_sub_group() const +---- + a@ Return a [code]#sub_group# representing the <> to which the work-item belongs. + +a@ +[source] +---- +size_t get_group(int dimension) const +---- + a@ Return the constituent element of the group [code]#id# representing + the work-group's position within the overall [code]#nd_range# in the + given [code]#dimension#. + +a@ +[source] +---- +size_t get_group_linear_id() const +---- + a@ Return the group id as a linear index value. Calculating a linear address + from a multi-dimensional index follows <>. + +a@ +[source] +---- +range get_group_range() const +---- + a@ Returns the number of <> in the iteration space. + +a@ +[source] +---- +size_t get_group_range(int dimension) const +---- + a@ Return the number of <> for [code]#dimension# in the + iteration space. + +a@ +[source] +---- +range get_global_range() const +---- + a@ Returns a [code]#range# representing the dimensions of the + global iteration space. + +a@ +[source] +---- +size_t get_global_range(int dimension) const +---- + a@ Return the same value as [code]#get_global_range().get(dimension)#. + +a@ +[source] +---- +range get_local_range() const +---- + a@ Returns a [code]#range# representing the dimensions of the current + work-group. + +a@ +[source] +---- +size_t get_local_range(int dimension) const +---- + a@ Return the same value as [code]#get_local_range().get(dimension)#. + +a@ +[source] +---- +id get_offset() const +// Deprecated in SYCL 2020. +---- + a@ Deprecated in SYCL 2020. + Returns an <> representing the n-dimensional offset + provided to the constructor of the [code]#nd_range# and that + is added by the runtime to the <> of each <>. + +a@ +[source] +---- +nd_range get_nd_range() const +---- + a@ Returns the [code]#nd_range# of the current execution. + +a@ +[source] +---- +template + device_event async_work_group_copy( + decorated_local_ptr dest, decorated_global_ptr src, + size_t numElements) const +---- + a@ Permitted types for [code]#dataT# are all scalar and vector types. + Asynchronously copies a number of elements specified by [code]#numElements# from the source pointer [code]#src# to destination + pointer [code]#dest# and returns a SYCL [code]#device_event# + which can be used to wait on the completion of the copy. + +a@ +[source] +---- +template + device_event async_work_group_copy( + decorated_global_ptr dest, decorated_local_ptr src, + size_t numElements) const +---- + a@ Permitted types for [code]#dataT# are all scalar and vector types. + Asynchronously copies a number of elements specified by [code]#numElements# from the source pointer [code]#src# to destination + pointer [code]#dest# and returns a SYCL [code]#device_event# + which can be used to wait on the completion of the copy. + +a@ +[source] +---- +template + device_event async_work_group_copy( + decorated_local_ptr dest, decorated_global_ptr src, + size_t numElements, size_t srcStride) const +---- + a@ Permitted types for [code]#dataT# are all scalar and vector types. + Asynchronously copies a number of elements specified by [code]#numElements# from the source pointer [code]#src# to destination + pointer [code]#dest# with a source stride specified by + [code]#srcStride# and returns a SYCL [code]#device_event# + which can be used to wait on the completion of the copy. + +a@ +[source] +---- +template + device_event async_work_group_copy( + decorated_global_ptr dest, decorated_local_ptr src, + size_t numElements, size_t destStride) const +---- + a@ Permitted types for [code]#dataT# are all scalar and vector types. + Asynchronously copies a number of elements specified by [code]#numElements# from the source pointer [code]#src# to destination + pointer [code]#dest# with a destination stride specified by + [code]#destStride# and returns a SYCL [code]#device_event# + which can be used to wait on the completion of the copy. + +a@ +[source] +---- +template + void wait_for(eventTN... events) const +---- + a@ Permitted type for [code]#eventTN# is [code]#device_event#. + Waits for the asynchronous operations associated with each [code]#device_event# to complete. + +|==== + + + +[[hitem-class]] +==== [code]#h_item# class + +[code]#h_item# identifies an instance of a +[code]#group::parallel_for_work_item# function object executing at each +point in a local [code]#range# passed to a +[code]#parallel_for_work_item# call or to the corresponding +[code]#parallel_for_work_group# call if no [code]#range# is passed +to the [code]#parallel_for_work_item# call. It encapsulates enough +information to identify the <>'s local and global <> +according to the information given to [code]#parallel_for_work_group# +(physical ids) as well as the <>'s logical local <> +in the logical local range. All returned <> objects are +offset-less. Instances of the [code]#h_item# class are +not user-constructible and are passed by the runtime to each instance of the +function object. + +The SYCL [code]#h_item# class template provides the common by-value +semantics (see <>). + +A synopsis of the SYCL [code]#h_item# class is provided below. The +member functions of the SYCL [code]#h_item# class are listed in +<>. The additional common special member +functions and common member functions are listed in +<> in <> +and <> respectively. + +[source,,linenums] +---- +include::{header_dir}/hitem.h[lines=4..-1] +---- + + +[[table.members.hitem]] +.Member functions for the [code]#h_item# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +item get_global() const +---- + a@ Return the constituent global <> representing the + work-item's position in the global iteration space as provided upon kernel invocation. + +a@ +[source] +---- +item get_local() const +---- + a@ Return the same value as [code]#get_logical_local()#. + +a@ +[source] +---- +item get_logical_local() const +---- + a@ Return the constituent element of the logical local <> + work-item's position in the local iteration space as provided upon the invocation of the + [code]#group::parallel_for_work_item#. + +If the [code]#group::parallel_for_work_item# was called without any logical local range +then the member function returns the physical local <>. + +A physical id can be computed from a logical id by getting the remainder of the integer division +of the logical id and the physical range: +[code]#get_logical_local().get() % get_physical_local.get_range() == get_physical_local().get()#. + +a@ +[source] +---- +item get_physical_local() const +---- + a@ Return the constituent element of the physical local <> + work-item's position in the local iteration space as provided (by the user or the runtime) + upon the kernel invocation. + +a@ +[source] +---- +range get_global_range() const +---- + a@ Return the same value as [code]#get_global().get_range()# + +a@ +[source] +---- +size_t get_global_range(int dimension) const +---- + a@ Return the same value as [code]#get_global().get_range(dimension)# + +a@ +[source] +---- +id get_global_id() const +---- + a@ Return the same value as [code]#get_global().get_id()# + +a@ +[source] +---- +size_t get_global_id(int dimension) const +---- + a@ Return the same value as [code]#get_global().get_id(dimension)# + +a@ +[source] +---- +range get_local_range() const +---- + a@ Return the same value as [code]#get_local().get_range()# + +a@ +[source] +---- +size_t get_local_range(int dimension) const +---- + a@ Return the same value as [code]#get_local().get_range(dimension)# + +a@ +[source] +---- +id get_local_id() const +---- + a@ Return the same value as [code]#get_local().get_id()# + +a@ +[source] +---- +size_t get_local_id(int dimension) const +---- + a@ Return the same value as [code]#get_local().get_id(dimension)# + +a@ +[source] +---- +range get_logical_local_range() const +---- + a@ Return the same value as [code]#get_logical_local().get_range()# + +a@ +[source] +---- +size_t get_logical_local_range(int dimension) const +---- + a@ Return the same value as [code]#get_logical_local().get_range(dimension)# + +a@ +[source] +---- +id get_logical_local_id() const +---- + a@ Return the same value as [code]#get_logical_local().get_id()# + +a@ +[source] +---- +size_t get_logical_local_id(int dimension) const +---- + a@ Return the same value as [code]#get_logical_local().get_id(dimension)# + +a@ +[source] +---- +range get_physical_local_range() const +---- + a@ Return the same value as [code]#get_physical_local().get_range()# + +a@ +[source] +---- +size_t get_physical_local_range(int dimension) const +---- + a@ Return the same value as [code]#get_physical_local().get_range(dimension)# + +a@ +[source] +---- +id get_physical_local_id() const +---- + a@ Return the same value as [code]#get_physical_local().get_id()# + +a@ +[source] +---- +size_t get_physical_local_id(int dimension) const +---- + a@ Return the same value as [code]#get_physical_local().get_id(dimension)# + +|==== + + + +[[group-class]] +==== [code]#group# class + +The [code]#group# encapsulates all functionality +required to represent a particular <> within a +parallel execution. It is not user-constructible. + +The local range stored in the group class is provided either by +the programmer, when it is passed as an optional parameter to +[code]#parallel_for_work_group#, or by the runtime system when it +selects the optimal work-group size. This allows the developer to +always know how many concurrent work-items are active in each +executing work-group, even through the abstracted iteration range of the +[code]#parallel_for_work_item# loops. + +The SYCL [code]#group# class template provides the common by-value +semantics (see <>). + +A synopsis of the SYCL [code]#group# class is provided below. The +member functions of the SYCL [code]#group# class are listed in +<>. The additional common special member +functions and common member functions are listed in +<> in <> +and <> respectively. + +// Interface for class: group +[source,,linenums] +---- +include::{header_dir}/group.h[lines=4..-1] +---- + +[[table.members.group]] +.Member functions for the [code]#group# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +id get_group_id() const +---- + a@ Return an <> representing the index of the work-group + within the <> for every dimension. + +a@ +[source] +---- +size_t get_group_id(int dimension) const +---- + a@ Return the same value as [code]#get_id()[dimension]#. + +a@ +[source] +---- +id get_local_id() const +---- + a@ Return a SYCL [code]#id# representing the calling work-item's position + within the <>. + +It is undefined behavior for this member function to be invoked from within +a [code]#parallel_for_work_item# context. + +a@ +[source] +---- +size_t get_local_id(int dimension) const +---- + a@ Return the calling work-item's position within the <> in the specified dimension. + +It is undefined behavior for this member function to be invoked from within +a [code]#parallel_for_work_item# context. + +a@ +[source] +---- +range get_local_range() const +---- + a@ Return a SYCL [code]#range# representing all dimensions of the local range. + This local range may have been provided by the programmer, or chosen by the <>. + +a@ +[source] +---- +size_t get_local_range(int dimension) const +---- + a@ Return the dimension of the local range specified by the [code]#dimension# parameter. + +a@ +[source] +---- +range get_group_range() const +---- + a@ Return a [code]#range# representing the number of <> in the [code]#nd_range#. + +a@ +[source] +---- +size_t get_group_range(int dimension) const +---- + a@ Return element [code]#dimension# from the constituent group range. + +a@ +[source] +---- +size_t operator[](int dimension) const +---- + a@ Return the same value as [code]#get_id(dimension)#. + +a@ +[source] +---- +range get_max_local_range() const +---- + a@ Return a [code]#range# representing the maximum number of work-items in any <> + in the [code]#nd_range#. + +a@ +[source] +---- +size_t get_group_linear_id() const +---- + a@ Get a linearized version of the <>. + Calculating a linear <> + from a multi-dimensional index follows <>. + +a@ +[source] +---- +size_t get_group_linear_range() const +---- + a@ Return the total number of <>s in the [code]#nd_range#. + +a@ +[source] +---- +size_t get_local_linear_id() const +---- + a@ Get a linearized version of the calling work-item's <>. + Calculating a linear <> + from a multi-dimensional index follows <>. + +It is undefined behavior for this member function to be invoked from within +a [code]#parallel_for_work_item# context. + +a@ +[source] +---- +size_t get_local_linear_range() const +---- + a@ Return the total number of work-items in the <>. + +a@ +[source] +---- +bool leader() const +---- + a@ Return true for exactly one work-item in the <>, if the + calling work-item is the leader of the work-group, and false for all + other work-items in the work-group. + +The leader of the work-group is determined during construction of the +work-group, and is invariant for the lifetime of the work-group. The +leader of the work-group is guaranteed to be the work-item with a +local id of 0. + +a@ +[source] +---- +template + void parallel_for_work_item(const workItemFunctionT &func) const +---- + a@ Launch the work-items for this work-group. + +[code]#func# is a function object type with a public member function +[code]#void F::operator()(h_item)# +representing the work-item computation. + +This member function can only be invoked within a +[code]#parallel_for_work_group# context. It is +undefined behavior for this member function to be invoked +from within the [code]#parallel_for_work_group# form that +does not define work-group size, because then the number of +work-items that should execute the code is not defined. It is +expected that this form of [code]#parallel_for_work_item# +is invoked within the [code]#parallel_for_work_group# form +that specifies the size of a work-group. + +a@ +[source] +---- +template + void parallel_for_work_item(range + logicalRange, const workItemFunctionT &func) const +---- + a@ Launch the work-items for this work-group using a logical local range. + The function object [code]#func# is executed as if the kernel were + invoked with [code]#logicalRange# as the local range. This new local + range is emulated and may not map one-to-one with the physical range. + +[code]#logicalRange# is the new local range to be used. +This range can be smaller or larger than the one used to invoke the kernel. +[code]#func# is a function object type with a public member function +[code]#void F::operator()(h_item)# +representing the work-item computation. + +Note that the logical range does not need to be uniform +across all work-groups in a kernel. For example the logical range may depend on +a work-group varying query (e.g. [code]#group::get_linear_id)#, +such that different work-groups in the same kernel invocation execute +different logical range sizes. + +This member function can only be invoked within a +[code]#parallel_for_work_group# context. + +a@ +[source] +---- +template + device_event async_work_group_copy( + decorated_local_ptr dest, decorated_global_ptr src, + size_t numElements) const +---- + a@ Permitted types for [code]#dataT# are all scalar and vector types. + Asynchronously copies a number of elements specified by [code]#numElements# from the source pointer [code]#src# to destination + pointer [code]#dest# and returns a SYCL [code]#device_event# + which can be used to wait on the completion of the copy. + +a@ +[source] +---- +template + device_event async_work_group_copy( + decorated_global_ptr dest, decorated_local_ptr src, + size_t numElements) const +---- + a@ Permitted types for [code]#dataT# are all scalar and vector types. + Asynchronously copies a number of elements specified by [code]#numElements# from the source pointer [code]#src# to destination + pointer [code]#dest# and returns a SYCL [code]#device_event# + which can be used to wait on the completion of the copy. + +a@ +[source] +---- +template + device_event async_work_group_copy( + decorated_local_ptr dest, decorated_global_ptr src, + size_t numElements, size_t srcStride) const +---- + a@ Permitted types for [code]#dataT# are all scalar and vector types. + Asynchronously copies a number of elements specified by [code]#numElements# from the source pointer [code]#src# to destination + pointer [code]#dest# with a source stride specified by + [code]#srcStride# and returns a SYCL [code]#device_event# + which can be used to wait on the completion of the copy. + +a@ +[source] +---- +template + device_event async_work_group_copy( + decorated_global_ptr dest, decorated_local_ptr src, + size_t numElements, size_t destStride) const +---- + a@ Permitted types for [code]#dataT# are all scalar and vector types. + Asynchronously copies a number of elements specified by [code]#numElements# from the source pointer [code]#src# to destination + pointer [code]#dest# with a destination stride specified by + [code]#destStride# and returns a SYCL [code]#device_event# + which can be used to wait on the completion of the copy. + +a@ +[source] +---- +template + void wait_for(eventTN... events) const +---- + a@ Permitted type for [code]#eventTN# is [code]#device_event#. + Waits for the asynchronous operations associated with each [code]#device_event# to complete. + +|==== + + + +[[sub-group-class]] +==== [code]#sub_group# class + +The [code]#sub_group# class encapsulates all functionality +required to represent a particular <> within a +parallel execution. It is not user-constructible. + +The SYCL [code]#sub_group# class provides the common by-value +semantics (see <>). + +A synopsis of the SYCL [code]#sub_group# class is provided below. The +member functions of the SYCL [code]#sub_group# class are listed in +<>. The additional common special member +functions and common member functions are listed in +<> in <> +and <> respectively. + +// Interface for class: subgroup +[source,,linenums] +---- +include::{header_dir}/subgroup.h[lines=4..-1] +---- + + +[[table.members.subgroup]] +.Member functions for the [code]#sub_group# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +id<1> get_group_id() const +---- + a@ Return an <> representing the index of the sub-group + within the <>. + +a@ +[source] +---- +id<1> get_local_id() const +---- + a@ Return a SYCL [code]#id# representing the calling work-item's position + within the <>. + +a@ +[source] +---- +range<1> get_local_range() const +---- + a@ Return a [code]#range# representing the size of the <>. + This size may be less than the value returned by + [code]#get_max_local_range()#, depending on the position of the + sub-group within its parent <> and the manner in which + sub-groups are constructed by the implementation. + +a@ +[source] +---- +range<1> get_group_range() const +---- + a@ Return a [code]#range# representing the number of <>s in the + <>. + +a@ +[source] +---- +range<1> get_max_local_range() const +---- + a@ Return a [code]#range# representing the maximum number of work-items + permitted in a <> for the executing kernel. This value may + have been chosen by the programmer via an attribute, or chosen by the + <>. + +a@ +[source] +---- +uint32_t get_group_linear_id() const +---- + a@ Equivalent to [code]#get_group_id()#. + +a@ +[source] +---- +uint32_t get_group_linear_range() const +---- + a@ Equivalent to [code]#get_group_range()#. + +a@ +[source] +---- +uint32_t get_local_linear_id() const +---- + a@ Equivalent to [code]#get_local_id()#. + +a@ +[source] +---- +uint32_t get_local_linear_range() const +---- + a@ Equivalent to [code]#get_local_range()#. + +a@ +[source] +---- +bool leader() const +---- + a@ Return true for exactly one work-item in the <>, if the + calling work-item is the leader of the sub-group, and false for all + other work-items in the sub-group. + +The leader of the sub-group is determined during construction of the +sub-group, and is invariant for the lifetime of the sub-group. The +leader of the sub-group is guaranteed to be the work-item with a +local id of 0. + +|==== + + +[[sec:reduction]] +=== Reduction variables + +All functionality related to <> is captured by the +[code]#reducer# class and the [code]#reduction# function. + +The example below demonstrates how to write a <> +kernel that performs two reductions simultaneously on the same input values, +computing both the sum of all values in a buffer and the maximum value in the +buffer. For each reduction variable passed to [code]#parallel_for#, a +reference to a [code]#reducer# object is passed as a parameter to the kernel +function in the same order. + +[source,,linenums] +---- +include::{code_dir}/reduction.cpp[lines=4..-1] +---- + +Reductions are supported for all trivially copyable types (as defined by the +{cpp} core language). If the reduction operator is non-associative or +non-commutative, the behavior of a reduction may be non-deterministic. If +multiple reductions reference the same reduction variable, or a reduction +variable is accessed directly during the lifetime of a reduction (e.g. via an +[code]#accessor# or USM pointer), the behavior is undefined. + +Certain implementations of reductions can be made more efficient if the +identity value associated with the reduction operator is known. For standard +binary operators (e.g. [code]#plus# on arithmetic types), an implementation +must determine the correct identity value automatically in order to avoid +performance penalties. For user-defined reduction operators, an implementation +should issue a compile-time warning if the user does not provide an identity +value and this is known to negatively impact performance. + +If an implementation can identify the identity value for a given combination of +accumulator type and function object type, the value is defined as a member of +the [code]#known_identity# trait class. Whether this member value exists can +be tested using the [code]#has_known_identity# trait class. + +[source,,linenums] +---- +include::{header_dir}/identity.h[lines=4..-1] +---- + +The reduction interface is limited to reduction variables whose size can be +determined at compile-time. As such, [code]#buffer# and USM pointer arguments +are interpreted by the reduction interface as describing a single variable. +A reduction operation associated with a [code]#span# represents an array +reduction. An array reduction of size _N_ is functionally equivalent to +specifying _N_ independent scalar reductions. The combination operations +performed by an array reduction are limited to the extent of a USM allocation +described by a [code]#span#, and access to elements outside of these regions +results in undefined behavior. + +[NOTE] +==== +Since a [code]#span# is one-dimensional, there is currently no way to describe +an array reduction with more than one dimension. This is expected to change in +a future version of the SYCL specification, but depends on the introduction of +a multi-dimensional [code]#span#. +==== + +[[reduction-interface]] +==== [code]#reduction# interface + +The [code]#reduction# interface is used to attach <> semantics +to a variable, by specifying: the reduction variable, the +reduction operator and an optional identity value associated with the operator. +The overloads of the interface are described in <>. +The return value of the [code]#reduction# interface is an +implementation-defined object of unspecified type, which is interpreted by +[code]#parallel_for# to construct an appropriate [code]#reducer# +type as detailed in <>. + +The initial value of the reduction variable is included +in the reduction operation, unless the [code]#property::reduction::initialize_to_identity# +property was specified when the [code]#reduction# interface was invoked. + +The reduction variable +is updated so as to contain the result of the reduction when the kernel finishes +execution. + +[source,,linenums] +---- +include::{header_dir}/reduction.h[lines=4..-1] +---- + + +[[table.reduction]] +.Overloads of the [code]#reduction# interface +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Function @ Description +a@ +[source] +---- +reduction(BufferT vars, handler& cgh, +BinaryOperation combiner, const property_list &propList = {}) +---- + a@ Construct an unspecified object representing a reduction + of the variable(s) described by [code]#vars# using the combination + operation specified by [code]#combiner#. Zero or more properties can be + provided via an instance of [code]#property_list#. + Throws an [code]#exception# with the [code]#errc::invalid# + error code if the range of the [code]#vars# buffer is not 1. + +a@ +[source] +---- +reduction(T* var, +BinaryOperation combiner, const property_list &propList = {}) +---- + a@ Construct an unspecified object representing a reduction + of the variable described by [code]#var# using the combination + operation specified by [code]#combiner#. Zero or more properties + can be provided via an instance of [code]#property_list#. + +a@ +[source] +---- +reduction(span vars, +BinaryOperation combiner, const property_list &propList = {}) +---- + a@ Available only when [code]#Extent != std::dynamic_extent#. + Construct an unspecified object representing a reduction + of the variable(s) described by [code]#vars# using the combination + operation specified by [code]#combiner#. Zero or more properties + can be provided via an instance of [code]#property_list#. + +a@ +[source] +---- +reduction(BufferT vars, handler& cgh, +const BufferT::value_type& identity, BinaryOperation combiner, +const property_list &propList = {}) +---- + a@ Available only when [code]#has_known_identity::value# is [code]#false#. + Construct an unspecified object representing a reduction + of the variable(s) described by [code]#vars# using the combination + operation specified by [code]#combiner#. The value of + [code]#identity# may be used by the implementation to initialize + temporary accumulation variables; using an [code]#identity# value + that is not the identity value of the combination operation specified + by [code]#combiner# results in undefined behavior. Zero or more + properties can be provided via an instance of [code]#property_list#. + Throws an [code]#exception# with the [code]#errc::invalid# + error code if the range of the [code]#vars# buffer is not 1. + +a@ +[source] +---- +reduction(T* var, const T& identity, +BinaryOperation combiner, const property_list &propList = {}) +---- + a@ Available only when [code]#has_known_identity::value# + is [code]#false#. + Construct an unspecified object representing a reduction + of the variable described by [code]#var# using the combination + operation specified by [code]#combiner#. The value of + [code]#identity# may be used by the implementation to initialize + temporary accumulation variables; using an [code]#identity# value + that is not the identity value of the combination operation specified + by [code]#combiner# results in undefined behavior. Zero or more + properties can be provided via an instance of [code]#property_list#. + +a@ +[source] +---- +reduction(span vars, const T& identity, +BinaryOperation combiner, const property_list &propList = {}) +---- + a@ Available only when [code]#has_known_identity::value# + is [code]#false# and [code]#Extent != std::dynamic_extent#. + Construct an unspecified object representing a reduction + of the variable(s) described by [code]#vars# using the combination + operation specified by [code]#combiner#. The value of + [code]#identity# may be used by the implementation to initialize + temporary accumulation variables; using an [code]#identity# value + that is not the identity value of the combination operation specified + by [code]#combiner# results in undefined behavior. Zero or more + properties can be provided via an instance of [code]#property_list#. + +|==== + +[[sec:reduction-properties]] +==== Reduction properties + +The properties that can be provided when using the [code]#reduction# interface +are described in <>. + + +[[table.properties.reduction]] +.Properties supported by the [code]#reduction# interface +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Property @ Description +a@ +[source] +---- +property::reduction::initialize_to_identity +---- + a@ The [code]#initialize_to_identity# property adds the requirement that the + <> must initialize the [code]#reduction# variable to the + identity value of its associated reduction operator. If the identity + value of the reduction operator cannot be determined, the compiler must + raise a diagnostic. When this property is set, the original value of the + reduction variable is not included + in the reduction. + +|==== + + +The constructors of the reduction property classes are listed in +<>. + +[[table.constructors.properties.reduction]] +.Constructors of the [code]#reduction# [code]#property# classes +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +property::reduction::initialize_to_identity::initialize_to_identity() +---- + a@ Constructs an [code]#initialize_to_identity# property instance. + +|==== + + +[[reducer-class]] +==== [code]#reducer# class + +The [code]#reducer# class defines the interface between a work-item and a +reduction variable during the execution of a SYCL kernel, restricting access to +the underlying reduction variable. The intermediate values of a reduction +variable cannot be inspected during kernel execution, and the variable cannot +be updated using anything other than the reduction's specified combination +operation. The combination order of different reducers is unspecified, as are +when and how the value of each reducer is combined with the original reduction +variable. + +To enable compile-time specialization of reduction algorithms, the +implementation of the [code]#reducer# class is unspecified, +except for the functions and operators defined in <> +and <>. As such, developers should not specify the +template arguments of a [code]#reducer# directly, and should instead employ +generic programming techniques that allow kernel functions to accept a +reference to a variable of any [code]#reducer# type. Kernels written as +lambdas should employ [code]#auto&# or [code]#+auto&...+#, and kernels written as +function objects should employ template parameters or template parameter packs. + +An implementation must guarantee that it is safe for each concurrently +executing work-item in a kernel to call the combine function of a +[code]#reducer# in parallel. An implementation is free to re-use reducer +variables (e.g. across work-groups scheduled to the same compute unit) if it +can guarantee that it is safe to do so. + +The member functions of the [code]#reducer# class are listed in +<>. Additional shorthand operators may be made +available for certain combinations of reduction variable type and combination +operation, as described in <>. + +[source,,linenums] +---- +include::{header_dir}/reducer.h[lines=4..-1] +---- + +[[table.members.reducer]] +.Member functions of the [code]#reducer# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +void combine(const T& partial) const +---- + a@ Combine the value of [code]#partial# with the reduction variable + associated with this [code]#reducer#. + +a@ +[source] +---- +__unspecified__ &operator[](size_t index) const +---- + a@ Available only when: [code]#Dimensions > 1#. + Returns an instance of an undefined intermediate type representing + a [code]#reducer# of the same type as this [code]#reducer#, + with the dimensionality [code]#Dimensions-1# and containing an + implicit SYCL [code]#id# with index [code]#Dimensions# set + to [code]#index#. The intermediate type returned must provide + all member functions and operators defined by the [code]#reducer# + class that are appropriate for the type it represents (including this + subscript operator). + +a@ +[source] +---- +T identity() const +---- + a@ Return the identity value of the combination operation associated with + this [code]#reducer#. Only available if the identity value is known + to the implementation. + +|==== + +[[table.operators.reducer]] +.Operators of the [code]#reducer# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Operator @ Description +a@ +[source] +---- +template + void operator+=(reducer,0>& accum, const T& partial) +---- + a@ Equivalent to calling [code]#accum.combine(partial)#. + +a@ +[source] +---- +template + void operator*=(reducer,0>& accum, const T& partial) +---- + a@ Equivalent to calling [code]#accum.combine(partial)#. + +a@ +[source] +---- +template + void operator|=(reducer,0>& accum, const T& partial) +---- + a@ Equivalent to calling [code]#accum.combine(partial)#. + Only available for integral types. + +a@ +[source] +---- +template + void operator&=(reducer,0>& accum, const T& partial) +---- + a@ Equivalent to calling [code]#accum.combine(partial)#. + Only available for integral types. + +a@ +[source] +---- +template + void operator^=(reducer,0>& accum, const T& partial) +---- + a@ Equivalent to calling [code]#accum.combine(partial)#. + Only available for integral types. + +a@ +[source] +---- +template + void operator++(reducer,0>& accum) +---- + a@ Equivalent to calling [code]#accum.combine(1)#. + Only available for integral types. + +|==== + + +[[sec:command.group.scope]] +=== Command group scope + +A <>, as defined in <>, +may execute a single <> such as invoking a kernel, copying memory, +or executing a host task. It is legal for a <> to +statically contain more than one call to a <> function, but any +single execution of the <> may execute no more +than one <>. The statements that call <> together with +the statements that define the requirements for a kernel form the +<>. The command group +function object takes as a parameter an instance of the <> class which +encapsulates all the member functions executed in the command group scope. +The member functions and objects defined in this scope will define the requirements for the +kernel execution or explicit memory operation, and will be used by the <> +to evaluate if the operation is ready for execution. +Host code within a <> (typically setting up +requirements) is executed once, before the command group submit call returns. +This abstraction of the kernel +execution unifies the data with its processing, and consequently allows more +abstraction and flexibility in the parallel programming models that can be +implemented on top of SYCL. + +The <> and the [code]#handler# class +serve as an interface for the encapsulation of <>. +A <> is defined as a function object. All the device data accesses are +defined inside this group and any transfers are managed by the <>. The +rules for the data transfers regarding device and +host data accesses are better described in <>, +where buffers (<>) and accessor (<>) classes +are described. The overall memory model of the SYCL application is described in +<>. + +It is possible to obtain events for the start of the <>, +the kernel starting, and the command group completing. +These events are useful for +profiling and synchronization of kernels. +When using buffers, safe synchronization in SYCL requires synchronization on +buffer availability, not on kernel completion. This is because +the memory that data is stored in upon kernel +completion is not rigidly specified. The events are provided at the submission of the +<> to the queue to be executed on. + +It is possible for a <> to fail to enqueue to a queue, +or for it to fail to execute correctly. A user can therefore supply a secondary +queue when submitting a command group to the primary queue. If the <> +fails to enqueue or execute a command group on a primary queue, it can attempt +to run the command group on the secondary queue. The circumstances in which it +is, or is not, possible for a <> to fall-back from primary to +secondary queue are unspecified in the specification. Even if a command group +is run on the secondary queue, the requirement that host code within the command group +is executed exactly once remains, regardless of whether the fallback queue is used for +execution. + +The command group [code]#handler# class provides the interface +for all of the member functions that are able to be executed inside the command group +scope, and it is also provided as a scoped object to all of the data access +requests. The <> class provides the interface +in which every command in the command group scope will be submitted to a queue. + + +[[sec:handlerClass]] +=== Command group [code]#handler# class + +A <> object can only be constructed by the SYCL +runtime. All of the accessors defined in <> take as a +parameter an instance of the <>, and all the +kernel invocation functions are member functions of this class. + +The constructors of the SYCL [code]#handler# class are described in +<>. + +It is disallowed for an instance of the SYCL [code]#handler# class to +be moved or copied. + +// Interface for class: handler +[source,,linenums] +---- +include::{header_dir}/commandGroupHandler.h[lines=4..-1] +---- + + +[[table.constructors.handler]] +.Constructors of the [code]#handler# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +handler(___unspecified___) +---- + a@ Unspecified implementation-defined constructor. + +|==== + + +[[sub.section.requirement]] +==== SYCL functions for adding requirements + +When an accessor is created from a <>, a *requirement* is +implicitly added to the <> for the accessor's data. However, +this does not happen when creating a [keyword]#placeholder# accessor. In order +to create a *requirement* for a [keyword]#placeholder# accessor, code +must call the [code]#handler::require()# member function. + +SYCL events may also be used to create requirements for a <>. +Such requirements state that the actions represented by the events must +complete before the <> may execute. Such requirements +are added when code calls the [code]#handler::depends_on()# member function. + +[[table.members.handler.requirements]] +.Member functions of the [code]#handler# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +template + void require(accessor + acc) +---- + a@ Requires access to the memory object associated with the accessor. + +The <> now has a *requirement* to gain access +to the given memory object before executing the kernel. +If the accessor has already been registered with the <>, +calling this function has no effect. + +Throws [code]#exception# with the [code]#errc::invalid# error code +if [code]#(acc.empty() == true)#. + +a@ +[source] +---- +void depends_on(event depEvent) +---- +a@ The <> now has a *requirement* that the action represented +by [code]#depEvent# must complete before executing this +<> action. + +a@ +[source] +---- +void depends_on(const std::vector &depEvents) +---- +a@ The <> now has a *requirement* that the actions represented +by each event in [code]#depEvents# must complete before executing this +<> action. + +|==== + + +[[subsec:invokingkernels]] +==== SYCL functions for invoking kernels + +<> can be invoked as [keyword]#single tasks#, basic +[keyword]#data-parallel# <>, <> in +<>, or [keyword]#hierarchical parallelism#. + +Each function takes an optional kernel name template parameter. The user +may optionally provide a <>, otherwise an implementation-defined name +will be generated for the kernel. + +All the functions for invoking kernels are member functions of the command group +[code]#handler# class (<>), which +is used to encapsulate all the member functions provided in a command group scope. +<> lists all the members of the +[code]#handler# class related to the kernel invocation. + + +[[table.members.handler.kernel]] +.Member functions of the [code]#handler# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +template + void set_arg(int argIndex, T &&arg) +---- + a@ This function must only be used to set arguments for a kernel that + was constructed using a backend specific interoperability function + or for a device built-in kernel. Attempting to use this function to set + arguments for other kernels results in undefined behavior. The precise + semantics of this function are defined by each SYCL backend + specification. + +a@ +[source] +---- +template + void set_args(Ts &&... args) +---- + a@ Set all arguments for a given kernel, as if each argument in + [code]#args# was passed to [code]#set_arg# in the same order and + with an increasing index starting at 0. + +a@ +[source] +---- +template + void single_task(const KernelType &kernelFunc) +---- + a@ Defines and invokes a <> as a lambda function + or a named function object type. + Specification of a <> ([code]#typename KernelName#), as + described in <>, is optional. + The callable + [code]#KernelType# can optionally take a [code]#kernel_handler# + in which case the <> will construct an instance of + [code]#kernel_handler# and pass it to [code]#KernelType#. + +a@ +[source] +---- +template + void parallel_for( + range numWorkItems, + Rest&&... rest) +---- + a@ Defines and invokes a <> as a lambda function + or a named function object type, + for the specified range and given an item or integral type (e.g [code]#int#, + [code]#size_t)#, if range is 1-dimensional, for indexing in the indexing + space defined by range. Generic kernel functions are permitted, + in that case the argument type is an [code]#item#. + Specification of a <> ([code]#typename KernelName#), as + described in <>, is optional. + The [code]#rest# parameter pack consists of 0 or more objects created by + the [code]#reduction# function, followed by a callable. For each + object in [code]#rest#, the kernel function must take an additional + reference parameter corresponding to that object's [code]#reducer# type, + in the same order. + The callable can optionally take a [code]#kernel_handler# + as its last parameter, in which case the <> will + construct an instance of [code]#kernel_handler# and pass it to + the callable. + +a@ +[source] +---- +template + void parallel_for( + range numWorkItems, + id workItemOffset, + const KernelType &kernelFunc) +// Deprecated in SYCL 2020. +---- + a@ Deprecated in SYCL 2020. + Defines and invokes a <> as a lambda function + or a named function object type, + for the specified range and offset and given an item or integral type + (e.g [code]#int#, [code]#size_t)#, if range is 1-dimensional, + for indexing in the indexing space defined by range. Generic kernel functions + are permitted, in that case the argument type is an [code]#item#. + Specification of a <> ([code]#typename KernelName#), as + described in <>, is optional. + The [code]#rest# parameter pack consists of 0 or more objects created by + the [code]#reduction# function, followed by a callable. For each + object in [code]#rest#, the kernel function must take an additional + reference parameter corresponding to that object's [code]#reducer# type, + in the same order. + The callable can optionally take a [code]#kernel_handler# + as its last parameter, in which case the <> will + construct an instance of [code]#kernel_handler# and pass it to + the callable. +a@ +[source] +---- +template + void parallel_for( + nd_range executionRange, + Rest&&... rest) +---- + a@ Defines and invokes a <> as a lambda function + or a named function object type, + for the specified <> and given an <> + for indexing in the indexing space defined by the <>. + Generic kernel functions are permitted, in that case the argument type is + an <>. + Specification of a <> ([code]#typename KernelName#), as + described in <>, is optional. + The [code]#rest# parameter pack consists of 0 or more objects created by + the [code]#reduction# function, followed by a callable. For each + object in [code]#rest#, the kernel function must take an additional + reference parameter corresponding to that object's [code]#reducer# type, + in the same order. + The callable can optionally take a [code]#kernel_handler# + as its last parameter, in which case the <> will + construct an instance of [code]#kernel_handler# and pass it to + the callable. + +a@ +[source] +---- +template + void parallel_for_work_group( + range numWorkGroups, + const WorkgroupFunctionType &kernelFunc) +---- + a@ Defines and invokes a hierarchical kernel as a lambda function + encoding the body of each work-group to launch. Generic kernel + functions are permitted, in that case the argument type is a [code]#group#. May + contain multiple calls to [code]#parallel_for_work_item(..)# member functions + representing the execution on each work-item. Launches + [code]#num_work_groups# work-groups of runtime-defined + size. Described in detail in <>. The callable + [code]#WorkgroupFunctionType# can optionally take a + [code]#kernel_handler# as it's last parameter, in which case the + <> will construct an instance of + [code]#kernel_handler# and pass it to [code]#WorkgroupFunctionType#. + +a@ +[source] +---- +template + void parallel_for_work_group( + range numWorkGroups, + range workGroupSize, + const WorkgroupFunctionType &kernelFunc) +---- + a@ Defines and invokes a hierarchical kernel as a lambda function + encoding the body of each work-group to launch. Generic kernel + functions are permitted, in that case the argument type is a [code]#group#. + May contain multiple calls to [code]#parallel_for_work_item# member functions + representing the execution on each work-item. Launches + [code]#num_work_groups# work-groups of + [code]#work_group_size# work-items each. Described in + detail in <>. The callable + [code]#WorkgroupFunctionType# can optionally take a + [code]#kernel_handler# as it's last parameter, in which case the + <> will construct an instance of [code]#kernel_handler# + and pass it to [code]#WorkgroupFunctionType#. + +a@ +[source] +---- +void single_task(const kernel &kernelObject) +---- + a@ This function must only be used to invoke a kernel that was constructed + using a backend specific interoperability function or to invoke a device + built-in kernel. Attempting to use this function to invoke other kernels + results in undefined behavior. The precise semantics of this function + are defined by each SYCL backend specification, but the intent is that + the kernel should execute exactly once. + +This invocation function ignores any [code]#kernel_bundle# that was bound to +this command group handler via [code]#handler::use_kernel_bundle()# and instead +implicitly uses the kernel bundle that contains the [code]#kernelObject#. +Throws an [code]#exception# with the [code]#errc::kernel_not_supported# error +code if the [code]#kernelObject# is not compatible with either the device +associated with the primary queue of the <> or with the device +associated with the secondary queue (if specified). + +a@ +[source] +---- +template void parallel_for( + range numWorkItems, + const kernel &kernelObject) +---- + a@ This function must only be used to invoke a kernel that was constructed + using a backend specific interoperability function or to invoke a device + built-in kernel. Attempting to use this function to invoke other kernels + results in undefined behavior. The precise semantics of this function + are defined by each SYCL backend specification, but the intent is that + the kernel should be invoked for the specified range of index values. + +This invocation function ignores any [code]#kernel_bundle# that was bound to +this command group handler via [code]#handler::use_kernel_bundle()# and instead +implicitly uses the kernel bundle that contains the [code]#kernelObject#. +Throws an [code]#exception# with the [code]#errc::kernel_not_supported# error +code if the [code]#kernelObject# is not compatible with either the device +associated with the primary queue of the <> or with the device +associated with the secondary queue (if specified). + +a@ +[source] +---- +template void parallel_for( + nd_range ndRange, + const kernel &kernelObject) +---- + a@ This function must only be used to invoke a kernel that was constructed + using a backend specific interoperability function or to invoke a device + built-in kernel. Attempting to use this function to invoke other kernels + results in undefined behavior. The precise semantics of this function + are defined by each SYCL backend specification, but the intent is that + the kernel should be invoked for the specified [code]#ndrange#. + +This invocation function ignores any [code]#kernel_bundle# that was bound to +this command group handler via [code]#handler::use_kernel_bundle()# and instead +implicitly uses the kernel bundle that contains the [code]#kernelObject#. +Throws an [code]#exception# with the [code]#errc::kernel_not_supported# error +code if the [code]#kernelObject# is not compatible with either the device +associated with the primary queue of the <> or with the device +associated with the secondary queue (if specified). + +|==== + + +// Interface for apis +// include headers/parallelFor.h ? + + +===== [code]#single_task# invoke + +SYCL provides a simple interface to enqueue a kernel that will be +sequentially executed on a device. Only one instance of the +kernel will be executed. This interface is useful as a primitive for more +complicated parallel algorithms, as it can easily create a chain of +sequential tasks on a SYCL device with each of them managing its +own data transfers. + +This function can only be called inside a command group using the +[code]#handler# object created by the runtime. +Any accessors that are used in a kernel should be defined inside the +same command group. + +Local accessors are disallowed for single task invocations. + +[source,,linenums] +---- +include::{code_dir}/singletask.cpp[lines=4..-1] +---- + +For single tasks, the kernel member function takes no parameters, as there +is no need for <> in a unary index space. + +A [code]#kernel_handler# can optionally be passed as a parameter +to the <> that is invoked by +[code]#single_task# for the purpose explained +in <>. + +[source,,linenums] +---- +include::{code_dir}/singleTaskWithKernelHandler.cpp[lines=4..-1] +---- + + +===== [code]#parallel_for# invoke + +The [code]#parallel_for# member function of the SYCL +[code]#handler# class provides an interface to define and invoke a SYCL +kernel function in a command group, to execute in parallel execution over a +3 dimensional index space. There are three overloads of the +[code]#parallel_for# member function which provide variations of this +interface, each with a different level of complexity and providing a +different set of features. + +For the simplest case, users need only provide the global range (the total +number of work-items in the index space) via a SYCL [code]#range# +parameter. In this case the function object that represents the SYCL kernel +function must take one of: +1) a single SYCL [code]#item# parameter, 2) single generic parameter +([code]#template# parameter or [code]#auto)#, 3) any other type +implicitly converted from SYCL [code]#item#, representing the currently +executing work-item within the range specified by the [code]#range# +parameter. + +The execution of the kernel function is the same whether the parameter to +the SYCL kernel function is a SYCL [code]#id# or a SYCL +[code]#item#. What differs is the functionality that is available to +the SYCL kernel function via the respective interfaces. + +Below is an example of invoking a SYCL kernel function with +[code]#parallel_for# using a lambda function, and passing a SYCL +[code]#id# parameter. In this case, only the global id is available. +This variant of [code]#parallel_for# is designed for when it is not +necessary to query the global range of the index space being executed across. + +[source,,linenums] +---- +include::{code_dir}/basicparallelfor.cpp[lines=4..-1] +---- + +Below is an example of invoking a SYCL kernel function with +[code]#parallel_for# using a lambda function and passing a SYCL +[code]#item# parameter. In this case, both the global id and global +range are queryable. This variant of [code]#parallel_for# is designed +for when it is necessary to query the global range of the index space +being executed across. + +[source,,linenums] +---- +include::{code_dir}/basicParallelForItem.cpp[lines=4..-1] +---- + +Below is an example of invoking a SYCL kernel function with +[code]#parallel_for# using a lambda function and passing +[code]#auto# parameter, treated as [code]#item#. In this case, both +the global id and global range are queryable. The same effect can be +achieved using class with templatized [code]#operator()#. This variant +of [code]#parallel_for# is designed for when it is necessary to query +the global range within which the global id will vary. + +[source,,linenums] +---- +include::{code_dir}/basicParallelForGeneric.cpp[lines=4..-1] +---- + +Below is an example of invoking a SYCL kernel function with +[code]#parallel_for# using a lambda function and passing integral type +(e.g. [code]#int#, [code]#size_t#) parameter. This example is only +valid when calling [code]#parallel_for# with [code]#range<1>#. In +this case only the global id is available. This variant of +[code]#parallel_for# is designed for when it is not necessary to query +the global range of the index space being executed across. + +[source,,linenums] +---- +include::{code_dir}/basicParallelForIntegral.cpp[lines=4..-1] +---- + +The [code]#parallel_for# overload without an offset can be called with +either a number or a [code]#braced-init-list# with 1-3 elements. In that +case the following calls are equivalent: + + * [code]#parallel_for(N, some_kernel)# has same effect as + [code]#parallel_for(range<1>(N), some_kernel)# + * [code]#parallel_for({N}, some_kernel)# has same effect as + [code]#parallel_for(range<1>(N), some_kernel)# + * [code]#parallel_for({N1, N2}, some_kernel)# has same effect as + [code]#parallel_for(range<2>(N1, N2), some_kernel)# + * [code]#parallel_for({N1, N2, N3}, some_kernel)# has same effect + as [code]#parallel_for(range<3>(N1, N2, N3), some_kernel)# + +Below is an example of invoking [code]#parallel_for# with a number +instead of an explicit [code]#range# object. + +[source,,linenums] +---- +include::{code_dir}/basicParallelForNumber.cpp[lines=4..-1] +---- + +For SYCL kernel functions invoked via the above described overload of the +[code]#parallel_for# member function, it is disallowed to use local +accessors or to use a <>. + +The following two examples show how a kernel function object can be launched +over a 3D grid, with 3 elements in each dimension. In the first case +work-item ids range from 0 to 2 inclusive, and in the second case +work-item ids run from 1 to 3. + +[source,,linenums] +---- +include::{code_dir}/parallelfor.cpp[lines=4..-1] +---- + +The last case of a parallel_for invocation enables low-level functionality +of work-items and work-groups. This becomes valuable when an execution +requires groups of work-items that communicate and synchronize. These are +exposed in SYCL through [code]#+parallel_for (nd_range,...)+# and the +[code]#nd_item# class. In this case, the developer needs to define the +[code]#nd_range# that the kernel will execute on in order to have fine +grained control of the enqueuing of the kernel. This variation of +parallel_for expects an [code]#nd_range#, specifying both local and +global ranges, defining the global number of work-items and the number in +each cooperating work-group. The resulting function object is passed an +[code]#nd_item# instance making all the information available, as well +as <> to synchronize between the <>s in +the <>. + +The following example shows how sixty-four work-items may be launched +in a three-dimensional grid with four in each dimension, and divided +into eight work-groups. Each group of work-items synchronizes with a +<>. + +[source,,linenums] +---- +include::{code_dir}/parallelforbarrier.cpp[lines=4..-1] +---- + +In all of these cases the underlying <> will be created +and the kernel defined as a function object will be created and enqueued +as part of the command group scope. + +Some forms of [code]#parallel_for# accept an offset parameter of type +[code]#id#, where the number of dimensions of the [code]#id# is the same +as the number of dimensions of the [code]#range# that determines the iteration space. +These forms of [code]#parallel_for# execute the same number of iterations as the form +with no offset. The difference is that the [code]#id# or [code]#item# parameter passed +to the kernel function has the value of [code]#offset# implicitly added. +This offset parameter is deprecated in SYCL 2020. + +An offset can also be passed to the forms of [code]#parallel_for# that accept an +[code]#nd_range# via the third parameter to the [code]#nd_range# constructor. These +forms of [code]#parallel_for# also execute the same number of iterations as if no offset +was specified. The difference is that the [code]#nd_item# parameter passed to the kernel +function has the value of the offset implicitly added to the constituent <>. +This offset parameter is deprecated in SYCL 2020. + + +A [code]#kernel_handler# can optionally be passed as a parameter to the +<> that is invoked by both variants of +[code]#parallel_for#. + +[source,,linenums] +---- +include::{code_dir}/parallelForWithKernelHandler.cpp[lines=4..-1] +---- + + +===== Parallel for hierarchical invoke + +The hierarchical parallel kernel execution interface provides the same +functionality as is available from the <> interface, but +exposed differently. To execute the same sixty-four work-items in +sixteen work-groups that we saw in the previous example, we execute an +outer [code]#parallel_for_work_group# call to create the +groups. The member function +[code]#handler::parallel_for_work_group# is parameterized by the +number of work-groups, such that the size of each group is chosen by +the runtime, or by the number of work-groups and number of work-items +for users who need more control. + +The body of the outer [code]#parallel_for_work_group# call +consists of a lambda function or function object. The body of this +function object contains code that is executed only once for the +entire work-group. If the code has no side-effects and the compiler +heuristic suggests that it is more efficient to do so, this code will be +executed for each work-item. + +Within this region any variable declared will have the semantics of +<>, shared between all <> in the +<>. If the +device compiler can prove that an array of such variables is accessed only by +a single work-item throughout the lifetime of the work-group, for +example if access is derived from the id of the work-item with no +transformation, then it can allocate the data in private memory or +registers instead. + +To guarantee use of private per-work-item memory, the +[code]#private_memory# class can be used to wrap the data. +This class simply constructs private data for a given group across the +entire group. The id of the current work-item is passed to any access +to grab the correct data. + +The [code]#private_memory# class has the following interface: + +[[paragraph.private.memory]] +.Private memory class +[source,,linenums] +---- +include::{header_dir}/priv.h[lines=4..-1] +---- + +[[table.constructors.private.memory]] +.Constructor of the [code]#private_memory# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +private_memory(const group &) +---- + a@ Place an object of type [code]#T# in the underlying private memory of each <>. + The type [code]#T# must be default constructible. + The underlying constructor will be called for each <>. + +|==== + +[[table.members.private.memory]] +.Member functions of the [code]#private_memory# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member functions @ Description +a@ +[source] +---- +T &operator()(const h_item &id) +---- + a@ Retrieve a reference to the object for the <>. + +|==== + +<> is allocated per underlying <>, not per +iteration of the [code]#parallel_for_work_item# loop. The number +of instances of a private memory object is only under direct control +if a work-group size is passed to the +[code]#parallel_for_work_group# call. If the underlying +work-group size is chosen by the runtime, the number of private memory +instances is opaque to the program. Explicit private memory +declarations should therefore be used with care and with a full +understanding of which instances of a +[code]#parallel_for_work_item# loop will share the same +underlying variable. + +Also within the lambda body can be a sequence of calls to +[code]#parallel_for_work_item#. At the edges of these inner parallel +executions the work-group synchronizes. As a result the pair of +[code]#parallel_for_work_item# calls in the code below is equivalent to +the parallel execution with a <> in the earlier +example. + +[source,,linenums] +---- +include::{code_dir}/parallelforworkgroup.cpp[lines=4..-1] +---- + +It is valid to use more flexible dimensions of the work-item loops. In +the following example we issue 8 work-groups but let the runtime +choose their size, by not passing a work-group size to the +[code]#parallel_for_work_group# call. The +[code]#parallel_for_work_item# loops may also vary in size, with +their execution ranges unrelated to the dimensions of the work-group, +and the compiler generating an appropriate iteration space to fill the +gap. In this case, the [code]#h_item# provides access to local ids and +ranges that reflect both kernel and [code]#parallel_for_work_item# invocation ranges. + +[source,,linenums] +---- +include::{code_dir}/parallelforworkgroup2.cpp[lines=4..-1] +---- + +This interface offers a more intuitive way for tiling parallel +programming paradigms. In summary, the hierarchical model allows a +developer to distinguish the execution at work-group level and at +work-item level using the [code]#parallel_for_work_group# and the nested +[code]#parallel_for_work_item# functions. It also provides this visibility +to the compiler without the need for difficult loop fission such that +host execution may be more efficient. + +A [code]#kernel_handler# can optionally be passed as a parameter to the +<> that is invoked by any variant of +[code]#parallel_for_work_group#. + +[source,,linenums] +---- +include::{code_dir}/parallelForWorkGroupWithKernelHandler.cpp[lines=4..-1] +---- + +// \input{sycl_explicit_memory} + +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% begin sycl_explicit_memory %%%%%%%%%%%%%%%%%%%%%%%%%%%% + +[[subsec:explicitmemory]] +==== SYCL functions for explicit memory operations + +In addition to <>, <> objects can also be used to +perform manual operations on host and device memory by using the +[keyword]#copy# API of the <>. +Manual copy operations can be seen as specialized kernels executing on the +device, except that typically this operations will be implemented using a +host API that exists as part of a backend (e.g, OpenCL enqueue copy operations). + +The SYCL memory objects involved in a copy operation are specified using +buffer accessors. +Explicit copy operations have a source and a destination. +When an accessor is the _source_ of the operation, the destination can be +a host pointer or another accessor. +The _source_ accessor can have either [code]#read# or +[code]#read_write# access mode. + +When an accessor is the _destination_ of the explicit copy operation, +the source can be a host pointer or another accessor. +The _destination_ accessor can have either +[code]#write#, [code]#read_write#, [code]#discard_write#, +[code]#discard_read_write# access modes. + +When accessors are both the origin and the destination, +the operation is executed on objects controlled by the SYCL runtime. +The SYCL runtime is allowed to not perform an explicit in-copy operation +if a different path to update the data is available according to +the SYCL application memory model. + +The most recent copy of the memory object may reside on any context controlled +by the SYCL runtime, or on the host in a pointer controlled by the +SYCL runtime. The SYCL runtime will ensure that data is copied to the destination +once the <> has completed execution. + +Whenever a host pointer is used as either the host or the destination of these +explicit memory operations, it is the responsibility +of the user for that pointer to have at least as much memory allocated as +the accessor is giving access to, e.g: if an accessor accesses a range +of 10 elements of [code]#int# type, the host pointer must at least have +[code]#10 * sizeof(int)# bytes of memory allocated. + +A special case is the [code]#update_host# member function. +This member function only requires an accessor, and instructs the runtime to update +the internal copy of the data in the host, if any. This is particularly +useful when users use manual synchronization with host pointers, e.g. +via mutex objects on the [code]#buffer# constructors. + +<> describes the interface for the +explicit copy operations. + + +[[table.members.handler.copy]] +.Member functions of the [code]#handler# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +template +void copy(accessor src, + std::shared_ptr dest) +---- +a@ Copies the contents of the memory object accessed by +[code]#src# into the memory pointed to by [code]#dest#. +[code]#dest# must have at least as many bytes as the +range accessed by [code]#src#. + +a@ +[source] +---- +template +void copy(std::shared_ptr src, + accessor dest) +---- +a@ Copies the contents of the memory pointed to by [code]#src# +into the memory object accessed by [code]#dest#. +[code]#src# must have at least as many bytes as the +range accessed by [code]#dest#. + +a@ +[source] +---- +template +void copy(accessor src, + T_dest * dest) +---- +a@ Copies the contents of the memory object accessed by +[code]#src# into the memory pointed to by [code]#dest#. +[code]#dest# must have at least as many bytes as the +range accessed by [code]#src#. + +a@ +[source] +---- +template +void copy(const T_src * src, + accessor dest) +---- +a@ Copies the contents of the memory pointed to by [code]#src# +into the memory object accessed by [code]#dest#. +[code]#src# must have at least as many bytes as the +range accessed by [code]#dest#. + +a@ +[source] +---- +template +void copy(accessor src, + accessor dest) +---- +a@ Copies the contents of the memory object accessed by [code]#src# +into the memory object accessed by [code]#dest#. The size of the [code]#src# +accessor determines the number of bytes that are copied, and [code]#dest# must +have at least this many bytes. If the size of [code]#dest# is too small, the +implementation throws a synchronous [code]#exception# with the +[code]#errc::invalid_object# error code. + +a@ +[source] +---- +template +void update_host(accessor acc) +---- +a@ The contents of the memory object accessed via [code]#acc# +on the host are guaranteed to be up-to-date after this +<> object execution is complete. + +a@ +[source] +---- +template +void fill(accessor dest, + const T& src) +---- +a@ Replicates the value of [code]#src# into the +memory object accessed by [code]#dest#. +T must be a scalar value or a SYCL vector type. + +a@ +[source] +---- +void memcpy(void* dest, const void* src, size_t numBytes) +---- +a@ Copies [code]#numBytes# of data from the pointer +[code]#src# to the pointer [code]#dest#. +Both [code]#dest# and [code]#src# may be either +host or USM pointers. +For more detail on USM, please see <>. + +a@ +[source] +---- +template +void copy(T* dest, const T* src, size_t count) +---- +a@ Copies [code]#count# elements of type [code]#T# from the pointer +[code]#src# to the pointer [code]#dest#. +Both [code]#dest# and [code]#src# may be either +host or USM pointers. +For more detail on USM, please see <>. + +a@ +[source] +---- +void memset(void* ptr, int value, size_t numBytes) +---- +a@ Fills [code]#numBytes# bytes of memory beginning at address [code]#ptr# +with [code]#value#. [code]#ptr# must be a USM allocation. +Note that [code]#value# is interpreted as an +[code]#unsigned char#. For more detail on USM, please see <>. + +a@ +[source] +---- +template +void fill(void* ptr, const T& pattern, size_t count) +---- +a@ Replicates the provided [code]#pattern# into the target +USM pointer [code]#ptr#. [code]#ptr# must be a USM allocation. +[code]#pattern# is filled [code]#count# +times. +For more detail on USM, please see <>. + +a@ +[source] +---- +void prefetch(void* ptr, size_t numBytes) +---- +a@ Enqueues a prefetch of [code]#num_bytes# of data pointed to by +the USM pointer [code]#ptr#. +For more detail on USM, please see <>. + +a@ +[source] +---- +void mem_advise(void* ptr, size_t numBytes, int advice) +---- +a@ Provides information to the SYCL runtime about the USM allocation +at [code]#ptr#. Acceptable values of [code]#advice# are +device-defined. A value of [code]#0# reverts the advice for +[code]#ptr# to the default behavior. +For more detail on USM, please see <>. + +|==== + + +The listing below illustrates how to use explicit copy +operations in SYCL. The example copies half of the contents of +a [code]#std::vector# into the device, leaving the rest of the +contents of the buffer on the device unchanged. + +[source,,linenums] +---- +include::{code_dir}/explicitcopy.cpp[lines=4..-1] +---- + + +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% end sycl_explicit_memory %%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +[[sec:handler.usekernelbundle]] +==== Functions for using a kernel bundle + +[source,,linenums] +---- +include::{header_dir}/handler/useKernelBundle.h[lines=4..-1] +---- + +_Effects:_ The <> associated with the [code]#handler# will use +<> of the [code]#kernel_bundle# [code]#execBundle# +in any of its <>. If the +[code]#kernel_bundle# contains multiple <> that are +compatible with the <> to which the kernel is submitted, then the +<> chosen is implementation-defined. + +If the <> attempts to invoke a kernel that is not contained by +a compatible device image in [code]#execBundle#, the +<> throws a synchronous [code]#exception# with the +[code]#errc::kernel_not_supported# error code. If the <> has a +secondary queue, then the [code]#execBundle# must contain a kernel that is +compatible with both the primary queue's device and the secondary queue's +device, otherwise the <> throws this exception. + +Since the handler method for setting specialization constants is incompatible +with the kernel bundle method, applications should not call this function if +[code]#handler::set_specialization_constant()# has been previously called for +this same <>. + +_Throws:_ + + * An [code]#exception# with the [code]#errc::invalid# error code if + the <> associated with the <> via its associated + <> is different from the <> associated with the + <> specified by [code]#execBundle#. + + * An [code]#exception# with the [code]#errc::invalid# error code if + [code]#handler::set_specialization_constant()# has been called for this + <>. + + +=== Specialization constants + +Device code can make use of <> +which represent constants whose values can be set dynamically during execution +of the <>. The values of these constants are fixed when a +<> is invoked, and they do not change during the +execution of the kernel. However, the application is able to set a new value +for a specialization constant each time a kernel is invoked, so the values can +be tuned differently for each invocation. + +There are two methods for an application to use specialization constants, one +method requires creating a [code]#kernel_bundle# object and the other does not. +The syntax for both methods is mostly the same. Both methods declare +specialization constants in the same way, and kernels read their values in the +same way. The main difference is whether their values are set via +[code]#handler::set_specialization_constant()# or via +[code]#kernel_bundle::set_specialization_constant()#. These two methods are +incompatible with one another, so they may not both be used by the same +<>. + +[NOTE] +==== +Implementations that support online compilation of kernel bundles will likely +implement both methods of specialization constants using kernel bundles. +Therefore, applications should expect that there is some overhead associated +with invoking a kernel with new values for its specialization constants. A +typical implementation records the values of specialization constants set via +[code]#handler::set_specialization_constant()# and remembers these values until +a kernel is invoked (e.g. via [code]#parallel_for()#). At this point, the +implementation determines the bundle that contains the invoked kernel. If +that bundle has already been compiled for the handler's device and compiled +with the correct values for the specialization constants, the kernel is +scheduled for invocation. Otherwise, the implementation compiles the +bundle before scheduling the kernel for invocation. Therefore, applications +that frequently change the values of specialization constants may see an +overhead associated with recompilation of the kernel's bundle. +==== + + +==== Declaring a specialization constant + +Specialization constants must be declared using the [code]#specialization_id# +class, and the declaration must be outside of <> using static +storage duration. The declaration must be in either namespace scope or class +scope. + +A synopsis of this class is shown below. The template parameter [code]#T# must +be a forward-declarable type. + +[source,,linenums] +---- +include::{header_dir}/expressingParallelism/classSpecializationId.h[lines=4..-1] +---- + +===== Constructors + +[source] +---- +template +explicit constexpr specialization_id(Args&&... args); +---- + +_Constraints:_ Available only when [code]#+std::is_constructible_v+# +evaluates to [code]#true#. + +_Effects:_ Constructs a [code]#specialization_id# containing an instance of +[code]#T# initialized with [code]#+args...+#, which represents the +specialization constant's default value. + +===== Special member functions + +[source] +---- +specialization_id(const specialization_id& rhs) = delete; // (1) +specialization_id(specialization_id&& rhs) = delete; // (2) +specialization_id &operator=(const specialization_id& rhs) = delete; // (3) +specialization_id &operator=(specialization_id&& rhs) = delete; // (4) +---- + + . Deleted copy constructor. + . Deleted move constructor. + . Deleted copy assignment operator. + . Deleted move assignment operator. + + +==== Setting and getting the value of a specialization constant + +If the application uses specialization constants without creating a +[code]#kernel_bundle# object, it can set and get their values from +<> by calling member functions of the [code]#handler# +class. These member functions have a template parameter [code]#SpecName# whose +value must be a reference to a variable of type [code]#specialization_id#, +which defines the type and default value of the specialization constant. + +When not using a kernel bundle, the value of a specialization constant that is +used in a kernel invoked from a <> is affected by calls to set +its value from that same <>, but it is not affected by calls +from other <> even if those calls are from +another invocation of the same <>. + +[source] +---- +template +void set_specialization_constant( + typename std::remove_reference_t::type value); +---- + +_Effects:_ Sets the value of the specialization constant whose address is +[code]#SpecName# for this handler's <>. If the specialization +constant's value was previously set in this same <>, the value +is overwritten. + +This function may be called even if the specialization constant +[code]#SpecName# isn't used by the kernel that is invoked by this handler's +<>. Doing so has no effect on the invoked kernel. + +_Throws:_ + + * An [code]#exception# with the [code]#errc::invalid# error code if + a kernel bundle has been bound to the [code]#handler# via + [code]#use_kernel_bundle()#. + +[source] +---- +template +typename std::remove_reference_t::type get_specialization_constant(); +---- + +_Returns:_ The value of the specialization constant whose address is +[code]#SpecName# for this handler's <>. If the value was +previously set in this handler's <>, that value is returned. +Otherwise, the specialization constant's default value is returned. + +_Throws:_ + + * An [code]#exception# with the [code]#errc::invalid# error code if + a kernel bundle has been bound to the [code]#handler# via + [code]#use_kernel_bundle()#. + + +[[sec:spec-constants.device-code]] +==== Reading the value of a specialization constant from device code + +In order to read the value of a specialization constant from device code, the +<> must be declared to take an object of type +[code]#kernel_handler# as its last parameter. The <> constructs +this object, which has a member function for reading the specialization +constant's value. A synopsis of this class is shown below. + +[source,,linenums] +---- +include::{header_dir}/expressingParallelism/classKernelHandler.h[lines=4..-1] +---- + + +===== Member functions + +[source,,linenums] +---- +template +typename std::remove_reference_t::type get_specialization_constant(); +---- + +_Returns:_ The value of the <> whose address is +[code]#SpecName#. For a kernel invoked from a <> that was not +bound to a kernel bundle, the value is the same as what would have been +returned if [code]#handler::get_specialization_constant()# was called +immediately before invoking the kernel. For a kernel invoked from a +<> that was bound to a kernel bundle, the value is the same as +what would be returned if [code]#kernel_bundle::get_specialization_constant()# +was called on the bound bundle. + + +==== Example usage + +The following example performs a convolution and uses +<> to set the values of the +coefficients. + +[source,,linenums] +---- +include::{code_dir}/usingSpecConstants.cpp[lines=4..-1] +---- + + +[[subsec:interfaces.hosttasks]] +== Host tasks + + +[[sec:interfaces.hosttasks.overview]] +=== Overview + +A <> is a native {cpp} callable which is scheduled by the +<>. A <> is submitted to a <> via a +<> by a <>. + +When a <> is submitted to a <> it is scheduled +based on its data dependencies with other <> including +<> and asynchronous copies, resolving any +requisites created by <> attached to the <> as +defined in <>. + +Since a <> is invoked directly by the <> rather +than being compiled as a <>, it does not have the same +restrictions as a <>, and can therefore contain any +arbitrary {cpp} code. However, capturing or using any SYCL class with reference +semantics (see <>) is undefined behavior. + +A <> can be enqueued on any <> and the callable will be +invoked directly by the SYCL runtime, regardless of which <> the +<> is associated with. + +A <> is enqueued on a <> via the [code]#host_task# +member function of the [code]#handler# class. + +A <> can optionally be used to interoperate with the +<> associated with the <> executing the +<>, the <> that the <> is associated with, the +<> that the <> is associated with and the <> +that have been captured in the callable, via an optional +[code]#interop_handle# parameter. + +This allows <> to be used for two purposes: either as a +task which can perform arbitrary {cpp} code within the scheduling of the +<> or as a task which can perform interoperability at a point +within the scheduling of the <>. + +For the former use case, construct a buffer accessor with +[code]#target::host_task# or an image accessor with +[code]#image_target::host_task#. This makes the buffer or image available +on the host during execution of the <>. + +For the latter case, construct a buffer accessor with +[code]#target::device# or [code]#target::constant_buffer#, or construct +an image accessor with [code]#image_target::device#. This makes the buffer or +image available on the device that is associated with the queue used to submit +the <>, so that it can be accessed via interoperability member +functions provided by the [code]#interop_handle# class. + +Local <> cannot be used within a <>. + +// TODO: access mode/target resolution rules + +[source,,linenums] +---- +include::{header_dir}/hostTask/hostTaskSynopsis.h[lines=4..-1] +---- + + +[[subsec:interfaces.hosttasks.interophandle]] +=== Class [code]#interop_handle# + +The [code]#interop_handle# class is an abstraction over the <> +which is being used to invoke the <> and its associated +<> and <>. It also represents the state of the +<> dependency model at the point the <> is invoked. + +The [code]#interop_handle# class provides access to the +<> associated with the <>, <>, +<> and any <> or <> that are captured in +the callable being invoked in order to allow a <> to be used +for interoperability purposes. + +An [code]#interop_handle# cannot be constructed by user-code, only by the +<>. + +[source,,linenums] +---- +include::{header_dir}/hostTask/classInteropHandle.h[lines=4..-1] +---- + + +[[subsec:interfaces.hosttask.interophandle.ctrs]] +==== Constructors + +[source,,linenums] +---- +include::{header_dir}/hostTask/classInteropHandle/constructors.h[lines=4..-1] +---- + + . Private implementation-defined constructor with unspecified arguments so + that the <> can construct a [code]#interop_handle#. + . Explicitly deleted default constructor. + +[[subsec:interfaces.hosttask.interophandle.getbackend]] +==== Member functions + +[source,,linenums] +---- +include::{header_dir}/hostTask/classInteropHandle/getbackend.h[lines=4..-1] +---- + + . _Returns:_ Returns a [code]#backend# identifying the <> associated + with the <> associated with this [code]#interop_handle#. + +[[subsec:interfaces.hosttask.interophandle.getnative]] +==== Template member functions [code]#get_native_*# + +[source,,linenums] +---- +include::{header_dir}/hostTask/classInteropHandle/getnativeX.h[lines=4..-1] +---- + + . _Constraints:_ Available only if the optional interoperability + function [code]#get_native# taking a [code]#buffer# is + available and if [code]#accTarget# is + [code]#target::device#. ++ +-- +_Returns:_ The <> interoperability +<> associated with the <> +[code]#bufferAcc#. The <> returned must +be in a state where it represents the memory in its current state within the +<> dependency model and is capable of being used in a way +appropriate for the associated <>. It is undefined behavior to +use the <> outside of the scope of the +<>. + +_Throws:_ An [code]#exception# with the [code]#errc::invalid# error code if the +<> [code]#bufferAcc# was not registered with the +<> which contained the <>. Must throw an [code]#exception# with the +[code]#errc::backend_mismatch# error code if [code]#Backend != get_backend()#. +-- + . _Constraints:_ Available only if the optional interoperability + function [code]#get_native# taking an [code]#unsampled_image# + is available. ++ +-- +_Returns:_ The <> interoperability +<> associated with the <> +[code]#imageAcc#. The <> returned must be +in a state where it represents the memory in its current state within the +<> dependency model and is capable of being used in a way +appropriate for the associated <>. It is undefined behavior to +use the <> outside of the scope of the +<>. + +_Throws:_ An [code]#exception# with the [code]#errc::invalid# error code if the +<> [code]#imageAcc# was not registered with the +<> which contained the <>. +-- + . _Constraints:_ Available only if the optional interoperability + function [code]#get_native# taking an [code]#sampled_image# + is available. ++ +-- +_Returns:_ The <> interoperability +<> associated with the <> +[code]#imageAcc#. The <> returned must be +in a state where it represents the memory in its current state within the +<> dependency model and is capable of being used in a way +appropriate for the associated <>. It is undefined behavior to +use the <> outside of the scope of the +<>. + +_Throws:_ An [code]#exception# with the [code]#errc::invalid# error code if the +<> [code]#imageAcc# was not registered with the +<> which contained the <>. Must throw an [code]#exception# with the +[code]#errc::backend_mismatch# error code if [code]#Backend != get_backend()#. +-- + . _Constraints:_ Available only if the optional interoperability + function [code]#get_native# taking a [code]#queue# is + available. ++ +-- +_Returns:_ The <> interoperability +<> associated with the <> that the +<> was submitted to. If the <> was submitted +with a secondary <> and the fall-back was triggered, the +<> that is associated with the [code]#interop_handle# must be +the fall-back <>. The <> returned must be +in a state where it is capable of being used in a way appropriate for the +associated <>. It is undefined behavior to use the +<> outside of the scope of the <>. + +_Throws:_ Must throw an [code]#exception# with the +[code]#errc::backend_mismatch# error code if [code]#Backend != get_backend()#. +-- + . _Constraints:_ Available only if the optional interoperability + function [code]#get_native# taking a [code]#device# is + available. ++ +-- +_Returns:_ The <> interoperability +<> associated with the <> that is +associated with the <> that the <> was submitted to. +The <> returned must be in a state where it is +capable of being used in a way appropriate for the associated <>. +It is undefined behavior to use the <> outside of +the scope of the <>. + +_Throws:_ Must throw an [code]#exception# with the +[code]#errc::backend_mismatch# error code if [code]#Backend != get_backend()#. +-- + . _Constraints:_ Available only if the optional interoperability + function [code]#get_native# taking a [code]#context# is + available. ++ +-- +_Returns:_ The <> interoperability +<> associated with the <> that is +associated with the <> that the <> was submitted to. +The <> returned must be in a state where it is +capable of being used in a way appropriate for the associated <>. +It is undefined behavior to use the <> outside of +the scope of the <>. + +_Throws:_ Must throw an [code]#exception# with the +[code]#errc::backend_mismatch# error code if [code]#Backend != get_backend()#. +-- + + +[[subsec:interfaces.hosttask.handler]] +=== Additions to the [code]#handler# class + +This section describes member functions in the <> class that are +used with host tasks. + +[source,,linenums] +---- +include::{header_dir}/hostTask/classHandler/hostTask.h[lines=4..-1] +---- + + . _Effects:_ Enqueues an implementation-defined command to the + <> to invoke [code]#hostTaskCallable# exactly once. The + scheduling of the invocation of [code]#hostTaskCallable# in relation to + other <> enqueued to the <> must be in accordance + with the dependency model described in <>. + Initializes an [code]#interop_handle# object and passes it to + [code]#hostTaskCallable# when it is invoked if + [code]#std::is_invocable_v# evaluates to + [code]#true#, otherwise invokes [code]#hostTaskCallable# as a + nullary function. + + +[[sec:interfaces.bundles]] +== Kernel bundles + +Kernel bundles provide several features to a <>. For +implementations that support an online compiler, they provide fine grained +control over the online compilation of device code. For example, an +application can use a kernel bundle to compile its <> at a +specific time during the application's execution (such as during its +initialization), rather than relying on the implementation's default behavior +(which may not compile kernels until they are submitted). + +Kernel bundles also provide a way for the application to set the values of +specialization constants in many kernels before any of them are submitted to +a device, which could potentially be more efficient in some cases. + +Kernel bundles provide a way for the application to introspect its kernels. +For example, an application can use a bundle to query a kernel's work-group +size when it is run on a specific device. + +Finally, kernel bundles provide an extension point to interoperate with backend +and device specific features. Some examples of this include invocation of +device specific built-in kernels, online compilation of kernel code with vendor +specific options, or interoperation with kernels created with backend APIs. + + +=== Overview + +A kernel bundle is a high-level abstraction which represents a set of +<> that are associated with a <> and can be executed +on a number of <>, where each device is associated with that +same context. Depending on how a bundle is obtained, it could represent all of +the <> in the <>, +or a certain subset of them. + +A kernel bundle is composed of one or more <>, +where each device image is an indivisible unit of compilation and/or linking. +When the <> compiles or links one of the kernels represented by +the device image, it must also compile or link any other kernels the device +image represents. Once a device image is compiled and linked, any of the other +kernels which that device image represents may be invoked without further +compilation or linking. + +Each <> a bundle represents must reside in at least one +of the bundle's device images. However, it is not necessary for each device +image to contain all of the kernel functions that the bundle represents. The +granularity in which kernel functions are grouped into device images is an +implementation detail. + +[NOTE] +==== +To illustrate the intent of device images, a hypothetical implementation could +represent an application's kernel functions in both the SPIR-V format and also +in a native device code format. The implementation's ahead-of-time compiler +in this example produces device images with native code for certain devices and +also produces SPIR-V device images for use with other devices. Note that in +such an implementation, a particular kernel function could be represented in +more than one device image. + +An implementation could choose to have all kernel functions from all +translation units grouped together in a single device image, to have each +kernel function represented in its own device image, or to group kernel +functions in some other way. +==== + +Each device associated with a kernel bundle must have at least one compatible +device image, meaning that the implementation can either invoke the image's +kernel functions directly on the device or that the implementation can +translate the device image into a format that allows it to invoke the kernel +functions. + +An outcome of this definition is that each kernel function in a bundle must be +invocable on at least one of the devices associated with the bundle. However, +it is not necessary for every kernel function in the bundle to be invocable on +every associated device. + +[NOTE] +==== +One common reason why a kernel function might not be invocable on every device +associated with a bundle is if the kernel uses optional device features. It's +possible that these features are available to only some devices in the bundle. + +The use of optional device features could affect how the implementation groups +kernels into device images, depending on how these features are represented. +For example, consider an implementation where the optional feature is +represented in SPIR-V but translation of that SPIR-V into native code will fail +if the target device does not support the feature. In such an implementation, +kernels that use optional features should not be grouped into the same device +image as kernels that do not use these features. Since a device image is an +indivisible unit of compilation, doing so would cause a compilation failure if +a kernel K1 is invoked on a device D1 if K1 happened to reside in the same +device image as another kernel K2 that used a feature which is not supported on +device D1. + +See <> for more about optional device features. +==== + +A <> can obtain a kernel bundle by calling one of the +overloads of the [code]#get_kernel_bundle()# free function. Certain backends +may provide additional mechanisms for obtaining bundles with other +representations. If this is supported, the backend specification document will +describe the details. + +Once a kernel bundle has been obtained there are a number of free functions for +performing compilation, linking and joining. Once a bundle is compiled and +linked, the application can invoke kernels from the bundle by calling +[code]#handler::use_kernel_bundle()# as described in +<>. + + +[[sec:interfaces.bundles.overview.synopsis]] +=== Synopsis + +[source,,linenums] +---- +include::{header_dir}/bundle/freeFunctions.h[lines=4..-1] +---- + + +=== Fixed-function built-in kernels + +SYCL allows a <> to expose fixed functionality as non-programmable +built-in kernels. The availability and behavior of these built-in kernels are +backend specific and are not required to follow the SYCL execution and memory +models. However, the basic interface is common to all backends. + + +[[sec:interfaces.bundles.bundlestate]] +=== Bundle states + +A <> can be in one of three different +<> which are represented by an enum class called +[code]#bundle_state#. <> describes the semantics of +these three states. + +The states form a progression. A bundle in [code]#bundle_state::input# can +be translated into [code]#bundle_state::object# by online compilation of the +bundle. A bundle in [code]#bundle_state::object# can be translated into +[code]#bundle_state::executable# by online linking. + +[NOTE] +==== +Each implementation is free to define the "online compilation" and "online +linking" operations as it sees fit, so long as this progression of bundle +states is preserved and so long as the bundles in each state behave as +specified. +==== + +There is no requirement that an implementation must expose kernels in +[code]#bundle_state::input# or [code]#bundle_state::object#. In fact, an +implementation could expose some kernels in these states but not others. For +example, this behavior could be controlled by implementation specific options +to the ahead-of-time compiler. Kernels that are not exposed in these states +cannot be online compiled or online linked by the application. + +All kernels defined in the <>, however, must be exposed in +[code]#bundle_state::executable# because this is the only state that allows a +kernel to be invoked on a device. Device built-in kernels are also exposed +in [code]#bundle_state::executable#. + +If an application exposes a bundle in [code]#bundle_state::input# for a device +D, then the implementation must also provide an online compiler for device D. +Therefore, an application need not explicitly test for +[code]#aspect::online_compiler# if it successfully obtains a bundle in +[code]#bundle_state::input# for that device. Likewise, an implementation must +provide an online linker for device D if it exposes a bundle in +[code]#bundle_state::object# for device D. + +[[table.bundles.states]] +.Enumeration of possible bundle states +[width="100%",options="header",separator="@",cols="35%,65%"] +|==== +@ Bundle State @ Description +a@ +[source] +---- +bundle_state::input +---- + a@ The <> in the kernel bundle have a format + that must be compiled and linked before their kernels can be invoked. + For example, an implementation could use this state for device images + that are stored in an intermediate language format or for device images + that are stored as source code strings. + +a@ +[source] +---- +bundle_state::object +---- + a@ The <> in the kernel bundle have a format + that must be linked before their kernels can be invoked. + +a@ +[source] +---- +bundle_state::executable +---- + a@ The <> in the kernel bundle are in a format + that allows them to be invoked on a device. For example, an + implementation could use this state for device images that have been + compiled into the device's native code. + +|==== + + +=== Kernel identifiers + +Some of the functions related to kernel bundles take an input parameter of type +[code]#kernel_id# which identifies a kernel. A synopsis of the +[code]#kernel_id# class is shown below along with a description of its member +functions. Additionally, this class provides the common special member +functions and common member functions that are listed in +<> in <> and +<>, respectively. + +There is no public default constructor for this class. + +[source,,linenums] +---- +include::{header_dir}/bundle/kernelIdClass.h[lines=4..-1] +---- + +[source] +---- +const char *get_name() const noexcept; +---- + +_Returns:_ An implementation-defined null-terminated string containing the +name of the kernel. There is no guarantee that this name is unique amongst +all the kernels, nor is there a guarantee that the name is stable from one +run of the application to another. The lifetime of the memory containing the +name is unspecified. + +[NOTE] +==== +In practice, the lifetime of the memory containing the name will typically +extend until the application terminates, unless the kernel associated with +the name comes from a dynamic library. In this case, the lifetime of the +memory may end if the dynamic library is unloaded. +==== + + +=== Obtaining a kernel identifier + +An application can obtain an identifier for a kernel that is defined in the +application by calling one of the following free functions, or it may obtain an +identifier for a device's built-in kernels by querying the device with +[code]#info::device::built_in_kernel_ids#. + +[source] +---- +template +kernel_id get_kernel_id(); +---- + +_Preconditions:_ The template parameter [code]#KernelName# must be the +<> of a kernel that is defined in the <>. +Since lambda functions have no standard type name, kernels defined as lambda +functions must specify a [code]#KernelName# in their +<> in order to obtain their identifier via this +function. Applications which call [code]#get_kernel_id()# for a +[code]#KernelName# that is not defined are ill formed, and the implementation +must issue a diagnostic in this case. + +_Returns:_ The identifier of the kernel associated with [code]#KernelName#. + +[source] +---- +std::vector get_kernel_ids(); +---- + +_Returns:_ A vector with the identifiers for all kernels defined in the +<>. This does not include identifiers for any device +built-in kernels. + + +=== Obtaining a kernel bundle + +A <> can obtain a kernel bundle by calling one of the +overloads of the free function [code]#get_kernel_bundle()#. The implementation +may return a bundle that consists of device images that were created by the +ahead-of-time compiler, or it may call the online compiler or linker to create +the bundle's device images in the requested state. A bundle may also contain +device images that represent a device's built-in kernels. + +[source] +---- +template +kernel_bundle get_kernel_bundle(const context &ctxt, const std::vector &devs); +---- + +_Returns:_ A kernel bundle in state [code]#State# which contains all of the +<> in the application which are compatible with at least one of +the devices in [code]#devs#. This does not include any device built-in kernels. +The bundle's set of associated devices is [code]#devs#. + +Since the implementation may not represent all kernels in +[code]#bundle_state::input# or [code]#bundle_state::object#, calling this +function with one of those states may return a bundle that is missing some of +the application's kernels. + +_Throws:_ + + * An [code]#exception# with the [code]#errc::invalid# error code if any of + the devices in [code]#devs# is not in the list of devices associated with + the context [code]#ctxt#. + * An [code]#exception# with the [code]#errc::invalid# error code if + [code]#State# is [code]#bundle_state::input# and any device in [code]#devs# + does not have [code]#aspect::online_compiler#. + * An [code]#exception# with the [code]#errc::invalid# error code if + [code]#State# is [code]#bundle_state::object# and any device in [code]#devs# + does not have [code]#aspect::online_linker#. + * An [code]#exception# with the [code]#errc::build# error code if + [code]#State# is [code]#bundle_state::object# or + [code]#bundle_state::executable#, if the implementation needs to perform an + online compile or link, and if the online compile or link fails. + +[source] +---- +template +kernel_bundle get_kernel_bundle(const context &ctxt, const std::vector &devs, + const std::vector &kernelIds); +---- + +_Returns:_ A kernel bundle in state [code]#State# which contains all of the +device images that are compatible with at least one of the devices in +[code]#devs#, further filtered to contain only those device images that contain +kernels with the given identifiers. These identifiers may represent kernels +that are defined in the application, device built-in kernels, or a mixture of +the two. Since the device images may group many kernels together, the returned +bundle may contain additional kernels beyond those that are requested in +[code]#kernelIds#. The bundle's set of associated devices is [code]#devs#. + +Since the implementation may not represent all kernels in +[code]#bundle_state::input# or [code]#bundle_state::object#, calling this +function with one of those states may return a bundle that is missing some of +the kernels in [code]#kernelIds#. The application can test for this via +[code]#kernel_bundle::has_kernel()#. + +_Throws:_ + + * An [code]#exception# with the [code]#errc::invalid# error code if any of + the kernels are incompatible with all devices in [code]#devs#. + * An [code]#exception# with the [code]#errc::invalid# error code if any of + the devices in [code]#devs# is not in the list of devices associated with + the context [code]#ctxt#. + * An [code]#exception# with the [code]#errc::invalid# error code if + [code]#State# is [code]#bundle_state::input# and any device in [code]#devs# + does not have [code]#aspect::online_compiler#. + * An [code]#exception# with the [code]#errc::invalid# error code if + [code]#State# is [code]#bundle_state::object# and any device in [code]#devs# + does not have [code]#aspect::online_linker#. + * An [code]#exception# with the [code]#errc::build# error code if + [code]#State# is [code]#bundle_state::object# or + [code]#bundle_state::executable#, if the implementation needs to perform an + online compile or link, and if the online compile or link fails. + +[source] +---- +template +kernel_bundle get_kernel_bundle(const context &ctxt, + const std::vector &devs, + Selector selector); +---- + +_Preconditions:_ The [code]#selector# must be a unary predicate whose return +value is convertible to [code]#bool# and whose parameter is +[code]#const device_image &#. + +_Effects:_ The predicate function [code]#selector# is called once for every +device image in the application of state [code]#State# which is compatible +with at least one of the devices in [code]#devs#. The function's return value +determines whether a device image is included in the new kernel bundle. The +[code]#Selector# is called only for device images that contain kernels defined +in the application, not for device images that contain device built-in kernels. + +_Returns:_ A kernel bundle in state [code]#State# which contains all of the +device images for which the [code]#selector# returns [code]#true#. + +_Throws:_ + + * An [code]#exception# with the [code]#errc::invalid# error code if any of + the devices in [code]#devs# is not in the list of devices associated with + the context [code]#ctxt#. + * An [code]#exception# with the [code]#errc::invalid# error code if + [code]#State# is [code]#bundle_state::input# and any device in [code]#devs# + does not have [code]#aspect::online_compiler#. + * An [code]#exception# with the [code]#errc::invalid# error code if + [code]#State# is [code]#bundle_state::object# and any device in + [code]#devs# does not have [code]#aspect::online_linker#. + +[NOTE] +==== +This function is intended to be used in conjunction with backend specific APIs +that allow the application to choose device images based on backend specific +criteria. + +This function does not call the online compiler or linker to translate device +images into state [code]#State#. If the application wants to select specific +device images and also compile or link them into the desired state, it can do +this by calling [code]#compile()# or [code]#link()# and then optionally joining +several bundles together with [code]#join()#. +==== + +[source] +---- +template // (1) +kernel_bundle get_kernel_bundle(const context &ctxt); + +template // (2) +kernel_bundle get_kernel_bundle(const context &ctxt, + const std::vector &kernelIds); + +template // (3) +kernel_bundle get_kernel_bundle(const context &ctxt, Selector selector); +---- + + . Equivalent to [code]#get_kernel_bundle(ctxt, ctxt.get_devices())#. + . Equivalent to + [code]#get_kernel_bundle(ctxt, ctxt.get_devices(), kernelIds)#. + . Equivalent to + [code]#get_kernel_bundle(ctxt, ctxt.get_devices(), selector)#. + +[source] +---- +template // (1) +kernel_bundle get_kernel_bundle(const context &ctxt); + +template // (2) +kernel_bundle get_kernel_bundle(const context &ctxt, const std::vector &devs); +---- + +_Preconditions:_ The template parameter [code]#KernelName# must be the +<> of a kernel that is defined in the <>. +Since lambda functions have no standard type name, kernels defined as lambda +functions must specify a [code]#KernelName# in their +<> in order to use these functions. Applications +which call these functions for a [code]#KernelName# that is not defined are ill +formed, and the implementation must issue a diagnostic in this case. + + . Equivalent to + [code]#get_kernel_bundle(ctxt, ctxt.get_devices(), {get_kernel_id()})#. + . Equivalent to + [code]#get_kernel_bundle(ctxt, devs, {get_kernel_id()})#. + + +=== Querying if a kernel bundle exists + +Most overloads of [code]#get_kernel_bundle()# have a matching overload of the +free function [code]#has_kernel_bundle()# which checks to see if a kernel +bundle with the requested characteristics exists. + +[source] +---- +template +bool has_kernel_bundle(const context &ctxt, const std::vector &devs); +---- + +_Returns:_ [code]#true# only if all of the following are true: + + * The application defines at least one <> that is compatible with + at least one of the devices in [code]#devs#, and that kernel can be + represented in a device image of state [code]#State#. + * If [code]#State# is [code]#bundle_state::input#, all devices in + [code]#devs# have [code]#aspect::online_compiler#. + * If [code]#State# is [code]#bundle_state::object#, all devices in + [code]#devs# have [code]#aspect::online_linker#. + +_Throws:_ + + * An [code]#exception# with the [code]#errc::invalid# error code if any of + the devices in [code]#devs# is not in the list of devices associated with + the context [code]#ctxt#. + +[source] +---- +template +bool has_kernel_bundle(const context &ctxt, const std::vector &devs, + const std::vector &kernelIds); +---- + +_Returns:_ [code]#true# only if all of the following are true: + + * Each of the kernels in [code]#kernelIds# can be represented in a device + image of state [code]#State#. + * Each of the kernels in [code]#kernelIds# is compatible with at least one + of the devices in [code]#devs#. + * If [code]#State# is [code]#bundle_state::input#, all devices in + [code]#devs# have [code]#aspect::online_compiler#. + * If [code]#State# is [code]#bundle_state::object#, all devices in + [code]#devs# have [code]#aspect::online_linker#. + +_Throws:_ + + * An [code]#exception# with the [code]#errc::invalid# error code if any of + the devices in [code]#devs# is not in the list of devices associated with + the context [code]#ctxt#. + +[source] +---- +template // (1) +bool has_kernel_bundle(const context &ctxt); + +template // (2) +bool has_kernel_bundle(const context &ctxt, const std::vector &kernelIds); +---- + + . Equivalent to [code]#has_kernel_bundle(ctxt, ctxt.get_devices())#. + . Equivalent to + [code]#has_kernel_bundle(ctxt, ctxt.get_devices(), kernelIds)#. + +[source] +---- +template // (1) +bool has_kernel_bundle(const context &ctxt); + +template // (2) +bool has_kernel_bundle(const context &ctxt, const std::vector &devs); +---- + +_Preconditions:_ The template parameter [code]#KernelName# must be the +<> of a kernel that is defined in the <>. +Since lambda functions have no standard type name, kernels defined as lambda +functions must specify a [code]#KernelName# in their +<> in order to use these functions. Applications +which call these functions for a [code]#KernelName# that is not defined are ill +formed, and the implementation must issue a diagnostic in this case. + + . Equivalent to + [code]#has_kernel_bundle(ctxt, {get_kernel_id()})#. + . Equivalent to + [code]#has_kernel_bundle(ctxt, devs, {get_kernel_id()})#. + + +=== Querying if a kernel is compatible with a device + +The following free functions allow an application to test whether a particular +kernel is compatible with a device. A kernel that is defined in the +application is compatible with a device unless it uses optional features which +are not supported on the device, as described in +<>. A device built-in kernel is only compatible +with the device for which it is built-in. + +[source] +---- +bool is_compatible(const std::vector &kernelIds, const device &dev); +---- + +_Returns:_ [code]#true# if all of the kernels identified by [code]#kernelIds# +are compatible with the device [code]#dev#. + +[source] +---- +template +bool is_compatible(const device &dev); +---- + +_Preconditions:_ The template parameter [code]#KernelName# must be the +<> of a kernel that is defined in the <>. +Since lambda functions have no standard type name, kernels defined as lambda +functions must specify a [code]#KernelName# in their +<> in order to use this function. Applications +which call this function for a [code]#KernelName# that is not defined are ill +formed, and the implementation must issue a diagnostic in this case. + +Equivalent to +[code]#is_compatible({get_kernel_id()}, dev)#. + + +=== Joining kernel bundles + +Two or more kernel bundles of the same state may be joined together into a +single composite bundle. Joining bundles together is not the same as online +compiling or linking because it produces a new bundle in the same state as its +inputs. Rather, joining creates the union of all the devices images from the +input bundles, eliminates duplicate copies of the same device image, and +creates a new bundle from the result. + +[source] +---- +template +kernel_bundle join(const std::vector> &bundles); +---- + +_Returns:_ A new kernel bundle that represents the union of all the device +images in the input [code]#bundles# with duplicates removed. + + +[[sec:bundles.compile-link]] +=== Online compiling and linking + +If the implementation provides an online compiler or linker, a +<> can use the free functions defined in this section to +transform a kernel bundle from [code]#bundle_state::input# into a bundle of +state [code]#bundle_state::object# or to transform a bundle from +[code]#bundle_state::object# into a bundle of state +[code]#bundle_state::executable#. + +An application can query whether the implementation provides an online compiler +or linker by querying a device for [code]#aspect::online_compiler# or +[code]#aspect::online_linker#. + +All of the functions in this section accept a [code]#property_list# parameter, +which can affect the semantics of the compilation or linking operation. The +<> does not currently define any such properties, but vendors may +specify these properties as an extension. + +[source] +---- +kernel_bundle +compile(const kernel_bundle &inputBundle, + const std::vector &devs, + const property_list &propList = {}); +---- + +_Effects:_ The device images from [code]#inputBundle# are translated into one +or more new device images of state [code]#bundle_state::object#, and a new +kernel bundle is created to contain these new device images. The new bundle +represents all of the <> in [code]#inputBundles# that are +compatible with at least one of the devices in [code]#devs#. Any remaining +kernels (those that are not compatible with any of the devices [code]#devs#) +are not compiled and not represented in the new kernel bundle. + +The new bundle has the same associated context as [code]#inputBundle#, and the +new bundle's set of associated devices is [code]#devs#. + +_Returns:_ The new kernel bundle. + +_Throws:_ + + * An [code]#exception# with the [code]#errc::invalid# error code if any of + the devices in [code]#devs# are not in the set of associated devices for + [code]#inputBundle# (as defined by [code]#kernel_bundle::get_devices()#). + * An [code]#exception# with the [code]#errc::build# error code if the online + compile operation fails. + +[source] +---- +kernel_bundle +link(const std::vector> &objectBundles, + const std::vector &devs, + const property_list &propList = {}); +---- + +_Effects:_ Duplicate device images from [code]#objectBundles# are eliminated +as though they were joined via [code]#join()#, then the remaining device images +are translated into one or more new device images of state +[code]#bundle_state::executable#, and a new kernel bundle is created to contain +these new device images. The new bundle represents all of the +<> in [code]#objectBundles# that are compatible with at least +one of the devices in [code]#devs#. Any remaining kernels (those that are not +compatible with any of the devices in [code]#devs#) are not linked and not +represented in the new bundle. + +The new bundle has the same associated context as those in +[code]#objectBundles#, and the new bundle's set of associated devices is +[code]#devs#. + +_Returns:_ The new kernel bundle. + +_Throws:_ + + * An [code]#exception# with the [code]#errc::invalid# error code if the + bundles in [code]#objectBundles# do not all have the same associated + context. + * An [code]#exception# with the [code]#errc::invalid# error code if any of + the devices in [code]#devs# are not in the set of associated devices for + any of the bundles in [code]#objectBundles# (as defined by + [code]#kernel_bundle::get_devices()#). + * An [code]#exception# with the [code]#errc::build# error code if the online + link operation fails. + +[source] +---- +kernel_bundle +build(const kernel_bundle &inputBundle, + const std::vector &devs, + const property_list &propList = {}); +---- + +_Effects:_ This function performs both an online compile and link operation, +translating a kernel bundle of state [code]#bundle_state::input# into a bundle +of state [code]#bundle_state::executable#. The device images from +[code]#inputBundle# are translated into one or more new device images of state +[code]#bundle_state::executable#, and a new bundle is created to contain these +new device images. The new bundle represents all of the <> in +[code]#inputBundle# that are compatible with at least one of the devices in +[code]#devs#. Any remaining kernels (those that are not compatible with any of +the devices [code]#devs#) are not compiled or linked and are not represented in +the new bundle. + +The new bundle has the same associated context as [code]#inputBundle#, and the +new bundle's set of associated devices is [code]#devs#. + +_Returns:_ The new kernel bundle. + +_Throws:_ + + * An [code]#exception# with the [code]#errc::invalid# error code if any of + the devices in [code]#devs# are not in the set of associated devices for + [code]#inputBundle# (as defined by [code]#kernel_bundle::get_devices()#). + * An [code]#exception# with the [code]#errc::build# error code if the online + compile or link operations fail. + +[source] +---- +kernel_bundle // (1) +compile(const kernel_bundle &inputBundle, + const property_list &propList = {}); + +kernel_bundle // (2) +link(const kernel_bundle &objectBundle, + const std::vector &devs, + const property_list &propList = {}); + +kernel_bundle // (3) +link(const std::vector> &objectBundles, + const property_list &propList = {}); + +kernel_bundle // (4) +link(const kernel_bundle &objectBundle, + const property_list &propList = {}); + +kernel_bundle // (5) +build(const kernel_bundle &inputBundle, + const property_list &propList = {}); +---- + + . Equivalent to + [code]#compile(inputBundle, inputBundle.get_devices(), propList)#. + + . Equivalent to [code]#link({objectBundle}, devs, propList)#. + + . Equivalent to [code]#link(objectBundles, devs, propList)#, where + [code]#devs# is the intersection of associated devices in common for all + bundles in [code]#objectBundles#. + + . Equivalent to + [code]#link({objectBundle}, objectBundle.get_devices(), propList)#. + + . Equivalent to + [code]#build(inputBundle, inputBundle.get_devices(), propList)#. + + +=== The [code]#kernel_bundle# class + +A synopsis of the [code]#kernel_bundle# class is shown below. Additionally, +this class provides the common special member functions and common member +functions that are listed in <> in +<> and +<>, respectively. + +As with all SYCL objects that have the common reference semantics, kernel +bundles are equality comparable. Two bundles of the same <> are +considered to be equal if they are associated with the same context, have the +same set of associated devices, and contain the same set of device images. + +There is no public default constructor for this class. + +[source,,linenums] +---- +include::{header_dir}/bundle/kernelBundleClass.h[lines=4..-1] +---- + +[[sec:bundles.query]] +==== Queries + +The following member functions provide various queries for a <>. + +[source] +---- +bool empty() const noexcept; +---- + +_Returns:_ [code]#true# only if the kernel bundle contains no device images. + +[source] +---- +backend get_backend() const noexcept; +---- + +_Returns:_ The backend that is associated with the kernel bundle. + +[source] +---- +context get_context() const noexcept; +---- + +_Returns:_ The context that is associated with the kernel bundle. + +[source] +---- +std::vector get_devices() const noexcept; +---- + +_Returns:_ The set of devices that is associated with the kernel bundle. + +[source] +---- +bool has_kernel(const kernel_id &kernelId) const noexcept; // (1) +bool has_kernel(const kernel_id &kernelId, const device &dev) const noexcept; // (2) +---- + + . _Returns:_ [code]#true# only if the kernel bundle contains the kernel + identified by [code]#kernelId#. + . _Returns:_ [code]#true# only if the kernel bundle contains the kernel + identified by [code]#kernelId# and if that kernel is compatible with the + device [code]#dev#. + +[source] +---- +std::vector get_kernel_ids() const; +---- + +_Returns:_ A vector of the identifiers for all kernels that are contained in +the kernel bundle. + +[source] +---- +kernel get_kernel(const kernel_id &kernelId) const; +---- + +_Preconditions:_ This member function is only available if the kernel bundle's +state is [code]#bundle_state::executable#. + +_Returns:_ A [code]#kernel# object representing the kernel identified by +[code]#kernelId#, which resides in the bundle. + +_Throws:_ + + * An [code]#exception# with the [code]#errc::invalid# error code if the + kernel bundle does not contain the kernel identified by [code]#kernelId#. + +==== Specialization constant support + +The following member functions allow an application to manipulate +<> that are used in the +device images of a <>. Applications can set the value of +specialization constants in a kernel bundle whose state is +[code]#bundle_state::input# and then online compile that bundle into +[code]#bundle_state::object# or [code]#bundle_state::executable#. The value of +the specialization constants then become fixed in the compiled bundle and +cannot be changed. Specialization constants that have not had their values set +by the time the bundle is compiled take their default values. + +[NOTE] +==== +It is expected that many implementations will use an intermediate language +representation for a bundle in state [code]#bundle_state::input# such as +SPIR-V, and the intermediate language will have native support for +specialization constants. However, implementations that do not have such +native support must still support specialization constants in some other way. +==== + +[source] +---- +bool contains_specialization_constants() const noexcept; +---- + +_Returns:_ [code]#true# only if the kernel bundle contains at least one device +image which uses a specialization constant. + +[source] +---- +bool native_specialization_constant() const noexcept; +---- + +_Returns:_ [code]#true# only if all specialization constants used in the kernel +bundle are <> +in all of the bundle's device images. + +[source] +---- +template +bool has_specialization_constant() const noexcept; +---- + +_Returns:_ [code]#true# if any device image in the kernel bundle uses the +specialization constant whose address is [code]#SpecName#. + +[source] +---- +template +void set_specialization_constant( + typename std::remove_reference_t::type value); +---- + +_Preconditions:_ This member function is only available if the kernel bundle's +state is [code]#bundle_state::input#. + +_Effects:_ Sets the value of the <> whose address is +[code]#SpecName# for this bundle. If the specialization constant's value was +previously set in this bundle, the value is overwritten. + +The new value applies to all device images in the bundle. It is allowed to set +the value of a specialization constant even if no device image in the bundle +uses it; doing so has no effect on the execution of kernels from that bundle. + +[source] +---- +template +typename std::remove_reference_t::type get_specialization_constant() const; +---- + +_Returns:_ The value of the <> whose address is +[code]#SpecName# for this kernel bundle. The value returned is as follows: + +* If the value of this specialization constant was previously set in this + bundle, that value is returned. Otherwise, + +* If this bundle is the result of compiling, linking or joining another + bundle and this specialization constant was set in that other bundle prior + to compiling, linking or joining; then that value is returned. Otherwise, + +* The specialization constant's default value is returned. + +==== Device image support + +The following member type and functions allow iteration over the +<> contained by the kernel bundle. + +[source] +---- +using device_image_iterator = __unspecified__; +---- + +An iterator type that satisfies the {cpp} requirements of +[code]#LegacyForwardIterator#. The iterator's referenced type is +[code]#const device_image#, where [code]#State# is the same state as the +containing [code]#kernel_bundle#. + +[source] +---- +device_image_iterator begin() const; // (1) +device_image_iterator end() const; // (2) +---- + + . _Returns:_ An iterator to the first <> contained by the + kernel bundle. + . _Returns:_ An iterator to one past the last <> contained by + the kernel bundle. + + +=== The [code]#kernel# class + +A synopsis of the [code]#kernel# class is shown below. Additionally, +this class provides the common special member functions and common member +functions that are listed in <> in +<> and +<>, respectively. + +There is no public default constructor for this class. + +[source,,linenums] +---- +include::{header_dir}/bundle/kernelClass.h[lines=4..-1] +---- + +==== Queries + +The following member functions provide various queries for a <>. + +[source] +---- +backend get_backend() const noexcept; +---- + +_Returns:_ The backend associated with this kernel. + +[source] +---- +context get_context() const; +---- + +_Returns:_ The context associated with this kernel. + +[source] +---- +kernel_bundle get_kernel_bundle() const; +---- + +_Returns:_ The kernel bundle that contains this kernel. + +[source] +---- +template +typename param::return_type get_info() const; +---- + +_Preconditions:_ The [code]#param# must be one of the [code]#info::kernel# +descriptors defined in <>, and the type alias +[code]#param::return_type# must be defined in accordance with that table. + +_Returns:_ Information about the kernel that is not specific to the device on +which it is invoked. + +[source] +---- +template +typename param::return_type get_info(const device &dev) const; +---- + +_Preconditions:_ The [code]#param# must be one of the +[code]#info::kernel_device_specific# descriptors defined in +<>, and the type alias +[code]#param::return_type# must be defined in accordance with that table. + +_Returns:_ Information about the kernel that applies when the kernel is invoked +on the device [code]#dev#. + +_Throws:_ + + * An [code]#exception# with the [code]#errc::invalid# error code if the + kernel is not compatible with device [code]#dev# (as defined by + [code]#is_compatible()#). + +[source] +---- +template +typename param::return_type get_backend_info() const; +---- + +_Preconditions:_ The [code]#param# must be one of a descriptor defined by a +<> specification. + +_Returns:_ Backend specific information about the kernel that is not specific +to the device on which it is invoked. + +_Throws:_ + + * An [code]#exception# with the [code]#errc::backend_mismatch# error code if + the <> that corresponds with [code]#param# is different from the + <> that is associated with this kernel bundle. + +==== Kernel information descriptors + +A <> can be queried for information using the [code]#get_info()# +member function, specifying one of the info parameters in [code]#info::kernel#. +Every kernel must produce a valid value for each info parameter. All info +parameters in [code]#info::kernel# are specified in <> and +the synopsis for [code]#info::kernel# is described in +<>. + +[[table.kernel.info]] +.Kernel class information descriptors +[width="100%",options="header",separator="@",cols="37%,19%,44%"] +|==== +@ Kernel Descriptors @ Return type @ Description +a@ +[source] +---- +info::kernel::num_args +---- + + @ [code]#uint32_t# + a@ This descriptor is only meaningful when used to query a kernel that + resides in a kernel bundle that was constructed using a backend specific + interoperability function. Attempting to use this query for other + kernels returns an unspecified value. The semantics of this descriptor + are defined by each SYCL backend specification. + +a@ +[source] +---- +info::kernel::attributes +---- + + @ [code]#std::string# + a@ Return any attributes specified on a kernel function (as defined in + <>). + +|==== + +A <> can also be queried for device specific information using the +[code]#get_info()# member function, specifying one of the info +parameters in [code]#info::kernel_device_specific#. Every kernel must produce +a valid value for each info parameter. All info parameters in +[code]#info::kernel_device_specific# are specified in +<>. The synopsis for +[code]#info::kernel_device_specific# is described in +<>. + +[[table.kernel.devicespecificinfo]] +.Device-specific kernel information descriptors +[width="100%",options="header",separator="@",cols="37%,19%,44%"] +|==== +@ Device-specific Kernel Information Descriptors @ Return type @ Description +a@ +[source] +---- +info::kernel_device_specific::global_work_size +---- + + @ [code]#range<3># + a@ Returns the maximum global work size. Only valid if device type is + [code]#device_type::custom# or the kernel is a built-in kernel. + +a@ +[source] +---- +info::kernel_device_specific::work_group_size +---- + + @ [code]#size_t# + a@ Returns the maximum number of work-items in a work-group that can be used + to execute a kernel on a specific device. + +a@ +[source] +---- +info::kernel_device_specific::compile_work_group_size +---- + + @ [code]#range<3># + a@ Returns the work-group size specified by the device compiler if applicable, + otherwise returns [code]#{0,0,0}#. + +a@ +[source] +---- +info::kernel_device_specific::preferred_work_group_size_multiple +---- + + @ [code]#size_t# + a@ Returns a value, of which work-group size is preferred to be a multiple, + for executing a kernel on a particular device. This is a performance + hint. The value must be less than or equal to that returned by + [code]#info::kernel_device_specific::work_group_size#. + +a@ +[source] +---- +info::kernel_device_specific::private_mem_size +---- + + @ [code]#size_t# + a@ Returns the minimum amount of private memory, in bytes, used by each work-item + in the kernel. This value may include any private memory needed by an + implementation to execute the kernel, including that used by the language + built-ins and variables declared inside the kernel in the private address + space. + +a@ +[source] +---- +info::kernel_device_specific::max_num_sub_groups +---- + + @ [code]#uint32_t# + a@ Returns the maximum number of sub-groups for this kernel. + +a@ +[source] +---- +info::kernel_device_specific::compile_num_sub_groups +---- + + @ [code]#uint32_t# + a@ Returns the number of sub-groups specified by the kernel, or 0 (if not specified). + +a@ +[source] +---- +info::kernel_device_specific::max_sub_group_size +---- + + @ [code]#uint32_t# + a@ Returns the maximum sub-group size for this kernel. + +a@ +[source] +---- +info::kernel_device_specific::compile_sub_group_size +---- + + @ [code]#uint32_t# + a@ Returns the required sub-group size specified by the kernel, or 0 (if not specified). + +|==== + + +=== The [code]#device_image# class + +A synopsis of the [code]#device_image# class is shown below. Additionally, +this class provides the common special member functions and common member +functions that are listed in <> in +<> and +<>, respectively. + +[source,,linenums] +---- +include::{header_dir}/bundle/deviceImageClass.h[lines=4..-1] +---- + +There is no public constructor for this class. + +[source] +---- +bool has_kernel(const kernel_id &kernelId) const noexcept; // (1) +bool has_kernel(const kernel_id &kernelId, const device &dev) const noexcept; // (2) +---- + + . _Returns:_ [code]#true# only if the device image contains the kernel + identified by [code]#kernelId#. + . _Returns:_ [code]#true# only if the device image contains the kernel + identified by [code]#kernelId# and if that kernel is compatible with the + device [code]#dev#. + + +=== Example usage + +This section provides some examples showing typical use cases for kernel +bundles. These examples are intended to clarify the definition of the kernel +bundle interfaces, but the content of this section is non-normative. + +==== Controlling the timing of online compilation + +In some cases an application may want to pre-compile its kernels before +submitting them to a device. This gives the application control over when the +overhead of online compilation happens, rather than relying on the default +behavior (which may cause the online compilation to happen at the point when +the kernel is submitted to a device). The following example shows how this can +be achieved. + +[source,,linenums] +---- +include::{code_dir}/bundle-pre-compile.cpp[lines=4..-1] +---- + +==== Specialization constants + +An application can use a kernel bundle to set the values of specialization +constants in several kernels before any of them are submitted for execution. + +[source,,linenums] +---- +include::{code_dir}/bundle-spec-constants.cpp[lines=4..-1] +---- + +==== Kernel introspection + +Applications can use kernel bundles to introspect its kernels and use that +information to tune the arguments passed when invoking it. + +[source,,linenums] +---- +include::{code_dir}/bundle-kernel-introspection.cpp[lines=4..-1] +---- + +==== Invoking a device built-in kernel + +An application can use kernel bundles to invoke a device's built-in kernels. + +[source,,linenums] +---- +include::{code_dir}/bundle-builtin-kernel.cpp[lines=4..-1] +---- + + +== Defining kernels + +In SYCL, functions that are executed on a SYCL device are referred to +as <>. A <> containing such a +<> is enqueued on a device queue in order to +be executed on that particular device. + +The return type of the <> is [code]#void#, and all memory +accesses between host and device are through <> or through +<>. + +There are two ways of defining kernels: as named function objects or as +lambda functions. A backend may also provide interoperability interfaces for +defining kernels. + + +[[sec:interfaces.kernels.as.function-objects]] +=== Defining kernels as named function objects + +A kernel can be defined as a named function object type. These function objects +provide the same functionality as any {cpp} function object, with the +restriction that they need to follow SYCL rules to be <>. +The kernel function can be templated via templating the kernel +function object type. For details on restrictions for kernel naming, +please refer to <>. + +The [code]#operator()# member function must be const-qualified, and it may take +different parameters depending on the data accesses defined for the specific +kernel. If the [code]#operator()# function writes to any of the member variables, +the behavior is undefined. + +The following example defines a <>, +_RandomFiller_, which initializes a buffer with a random number. The +random number is generated during the construction of the function object +while processing the command group. The [code]#operator()# member +function of the function object receives an [code]#item# object. This +member function will be called for each work item of the execution range. The value +of the random number will be assigned to each element of the buffer. In this +case, the accessor and the scalar random number are members of the function +object and therefore will be arguments to the device kernel. Usual +restrictions of passing arguments to kernels apply. + +[source,,linenums] +---- +include::{code_dir}/myfunctor.cpp[lines=4..-1] +---- + + +[[sec:interfaces.kernels.as.lambdas]] +=== Defining kernels as lambda functions + +In {cpp}, function objects can be defined using lambda functions. Kernels may be +defined as lambda functions in SYCL. The name of a lambda function +in SYCL may optionally be specified by passing it as a template parameter to the invoking +member function, and in that case, the lambda name is a [keyword]#{cpp} typename# which must +be forward declarable at namespace scope. If the lambda +function relies on template arguments, then if specified, +the name of the lambda function must contain those template arguments which must +also be forward declarable at namespace scope. The +class used for the name of a lambda function is only used for naming purposes +and is not required to be defined. For details on restrictions for kernel +naming, please refer to <>. + +The kernel function for the lambda function is the lambda function itself. +The kernel lambda must use copy for all of its captures (i.e. [code]#[=]#), and +the lambda must not use the [code]#mutable# specifier. + +[source,,linenums] +---- +include::{code_dir}/mykernel.cpp[lines=4..-1] +---- + +Explicit lambda naming is shown in the following code example, +including an illegal case that uses a class within the kernel +name which is not forward declarable ([code]#std::complex#). + +[source,,linenums] +---- +include::{code_dir}/lambdaNameExamples.cpp[lines=4..-1] +---- + +=== [code]#is_device_copyable# type trait + +.... +namespace sycl { + template + struct is_device_copyable; + + template + inline constexpr bool is_device_copyable_v = is_device_copyable::value; +}; +.... + +[code]#is_device_copyable# is a user specializable class template to indicate +that a type [code]#T# is <>. + + * [code]#is_device_copyable# must meet the Cpp17UnaryTrait requirements. + * If [code]#is_device_copyable# is specialized such that + [code]#is_device_copyable_v == true# on a [code]#T# that does not + satisfy all the requirements of a device copyable type, the results are + unspecified. + +If the application defines a type [code]#UDT# that satisfies the requirements of +a <> type (as defined in <>) but the type +is not implicitly device copyable as defined in that section, then the +application must provide a specialization of [code]#is_device_copyable# that +derives from [code]#std:true_type# in order to use that type in a context that +requires a device copyable type. Such a specialization can be declared like +this: + +.... +template<> +struct sycl::is_device_copyable : std::true_type {}; +.... + +It is legal to provide this specialization even if the implementation does not +define [code]#SYCL_DEVICE_COPYABLE# to [code]#1#, but the type cannot be used +as a device copyable type in that case and the specialization is ignored. + + +[[sec:kernel.parameter.passing]] +=== Rules for parameter passing to kernels + +In a case where a kernel is a named function object or a lambda function, any +member variables encapsulated within the function object or variables captured by +the lambda function must be treated according to the following rules: + + * Any accessor must be passed as an argument to the device kernel in a + form that allows the device kernel to access the data in the specified + way. + * The <> and compiler(s) must produce the necessary + conversions to enable accessor arguments from the host to be converted + to the correct type of parameter on the device. + * The device compiler(s) must validate that the layout of any data + shared between the host and the device(s) (e.g. value kernel arguments + or data accessed through an accessor or USM) is compatible with the + layout of that data on the host. If there is a layout mismatch that the + implementation cannot or will not correct for (to make the layouts + compatible), then the device compiler must issue an error and + compilation must fail. + * A local accessor provides access to work-group-local memory. The + accessor is not constructed with any buffer, but instead constructed + with a size and base data type. The runtime must ensure that the + work-group-local memory is allocated per work-group and available to be + used by the kernel via the local accessor. + * <> types must be passed by value to the + kernel. + * Types that are not <> must not be passed as arguments to a + kernel that is compiled for a device. + * It is illegal to pass a buffer or image (instead of an accessor + class) as an argument to a kernel. Generation of a compiler error in + this illegal case is optional. + * It is illegal to pass a reference argument to a kernel. + Generation of a compiler error in this illegal case is optional. + * If a pointer passed to a kernel is [code]#nullptr# or points to a <> + allocation, it must be passed through to the device unmodified. It is legal + to pass other pointers to a kernel, but dereferencing such pointers or + performing pointer arithmetic results in undefined behavior. + * Any aggregate types such as structs or classes should follow the rules + above recursively. It is not necessary to separate struct or class + members into separate kernel parameters if all members of the aggregate + type are unaffected by the rules above. + +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% end expressingParallelism %%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +[[error-handling]] +== Error handling + +=== Error handling rules + +Error handling in a SYCL application (host code) uses {cpp} exceptions. If an error +occurs, it will be thrown by the API function call and may be caught by the user +through standard {cpp} exception handling mechanisms. + +SYCL applications are asynchronous in the sense that host and device code executions +are decoupled from one another except at specific points. For example, device code +executions often begin when dependencies in the SYCL task graph are satisfied, which +occurs asynchronously from host code execution. As a result of this the errors +that occur on a device cannot be thrown directly from a host API call, because the call +enqueueing a device action has typically already returned by the time that the error +occurs. Such errors are not detected until the error-causing task executes or tries to +execute, and we refer to these as <>. + + +[[subsubsec:exception.async]] +==== Asynchronous error handler + +The queue and context classes can optionally take an asynchronous handler object +<> on construction, which is a callable such as a function class +or lambda, with an [code]#exception_list# as a parameter. +Invocation of an <> may be triggered by the queue member functions +[code]#queue::wait_and_throw()# or [code]#queue::throw_asynchronous()#, by +the event member function [code]#event::wait_and_throw()#, or +automatically on destruction of a queue or context that contains unconsumed +asynchronous errors. When invoked, an <> is called and receives an +[code]#exception_list# argument containing a list of exception objects representing +any unconsumed <> associated with the queue or context. + +When an <> instance has been passed to an <>, then +that instance of the error has been consumed for handling and is not reported on +any subsequent invocations of the <>. + +The <> may be a named function object type, a lambda +function or a [code]#std::function#. The [code]#exception_list# +object passed to the <> is constructed by the <>. + + +[[subsubsec:exception.nohandler]] +==== Behavior without an <> + +If an asynchronous error occurs in a queue or context that has no user-supplied +asynchronous error handler object <>, then an implementation-defined +default <> is called to handle the error in the same situations that +a user-supplied <> would be, as defined in +<>. The default <> must in some way +report all errors passed to it, when possible, and must then invoke +[code]#std::terminate# or equivalent. + +==== Priorities of <> + +If the SYCL runtime can associate an <> with a specific queue, +then: + + * If the queue was constructed with an <>, that handler + is invoked to handle the error. + * Otherwise if the context enclosed by the queue was constructed with an + <>, that handler is invoked to handle the error. + * Otherwise when no handler was passed to either queue or context on + construction, then a default handler is invoked to handle the error, as + described by <>. + * All handler invocations in this list occur at times as defined by + <>. + +If the SYCL runtime cannot associate an <> with a specific queue, +then: + + * If the context in which the error occurred was constructed with an + <>, then that handler is invoked to handle the error. + * Otherwise when no handler was passed to the associated context on + construction, then a default handler is invoked to handle the error, as + described by <>. + * All handler invocations in this list occur at times as defined by + <>. + + +==== Asynchronous errors with a secondary queue + +If an <> occurs when running or enqueuing a command group which has +a secondary queue specified, then the command group may be enqueued +to the secondary queue instead of the primary queue. The error handling in this +case is also configured using the <> provided for both +queues. If there is no <> given on any of the queues, +then no asynchronous error reporting is done and no exceptions are thrown. If +the primary queue fails and there is an <> given at +this queue's construction, which populates the [code]#exception_list# +parameter, then any errors will be added and can be thrown whenever the user +chooses to handle those exceptions. Since there were errors on the primary +queue and a secondary queue was given, then the execution of the kernel is +re-scheduled to the secondary queue and any error reporting for the kernel +execution on that queue is done through that queue, in the same way as +described above. The secondary queue may fail as well, and the errors will be +thrown if there is an <> and either +[code]#wait_and_throw()# or [code]#throw()# are called on that queue. +The <> event returned by that function will be +relevant to the queue where the kernel has been enqueued. + +Below is an example of catching a SYCL [code]#exception# and printing out +the error message. + +[source,,linenums] +---- +include::{code_dir}/handlingException.cpp[lines=4..-1] +---- + +Below is an example of catching a SYCL [code]#exception# with the +[code]#errc::invalid# error code and printing out the error message. + +[source,,linenums] +---- +include::{code_dir}/handlingErrorCode.cpp[lines=4..-1] +---- + +Below is an example of catching a SYCL [code]#exception#, checking for the +<> by inspecting the category and handling the OpenCL <> +error codes if the category is that of the OpenCL <> otherwise +checking the standard error code. + +[source,,linenums] +---- +include::{code_dir}/handlingBackendErrorCode.cpp[lines=4..-1] +---- + + +[[subsec:exception.class]] +=== Exception class interface + +[source,,linenums] +---- +include::{header_dir}/exception.h[lines=4..-1] +---- + +The SYCL [code]#exception_list# +class is also available in order to provide a list of synchronous and +asynchronous exceptions. + +Errors can occur both in the SYCL library and SYCL host side, or may come +directly from a <>. The member functions on these exceptions provide the +corresponding information. +<> can provide additional exception class objects as long as they derive +from [code]#sycl::exception# object, or any of its derived classes. + +A specialization of [code]#std::is_error_condition_enum# must be defined +for [code]#sycl::errc# inheriting from [code]#std::true_type#. + +A specialization of [code]#std::is_error_code_enum# must be defined +for [code]#sycl::errc# and [code]#backend_traits::errc# +inheriting from [code]#std::true_type# for each [code]#Backend#, where +[code]#backend# is each enumeration of the enum class [code]#backend#. + + +[[table.members.exception]] +.Member functions of the SYCL [code]#exception# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +exception(std::error_code ec, const std::string& what_arg) +---- + a@ Constructs an [code]#exception#. The string returned by [code]#what()# is guaranteed to contain [code]#what_arg# as a substring. + +a@ +[source] +---- +exception(std::error_code ec, const char* what_arg) +---- + a@ Constructs an [code]#exception#. The string returned by [code]#what()# is guaranteed to contain [code]#what_arg# as a substring. + +a@ +[source] +---- +exception(std::error_code ec) +---- + a@ Constructs an [code]#exception#. + +a@ +[source] +---- +exception(int ev, const std::error_category& ecat, const std::string& what_arg) +---- + a@ Constructs an [code]#exception# with the error code ev and the underlying error category [code]#ecat#. The string returned by [code]#what()# is guaranteed to contain [code]#what_arg# as a substring. + +a@ +[source] +---- +exception(int ev, const std::error_category& ecat, const char* what_arg) +---- + a@ Constructs an [code]#exception# with the error code ev and the underlying error category [code]#ecat#. The string returned by [code]#what()# is guaranteed to contain [code]#what_arg# as a substring. + +a@ +[source] +---- +exception(int ev, const std::error_category& ecat) +---- + a@ Constructs an [code]#exception# with the error code ev and the underlying error category [code]#ecat#. + +a@ +[source] +---- +exception(context ctx, std::error_code ec, const std::string& what_arg) +---- + a@ Constructs an [code]#exception# with an associated SYCL context [code]#ctx#. The string returned by [code]#what()# is guaranteed to contain [code]#what_arg# as a substring. + +a@ +[source] +---- +exception(context ctx, std::error_code ec, const char* what_arg) +---- + a@ Constructs an [code]#exception# with an associated SYCL context [code]#ctx#. The string returned by [code]#what()# is guaranteed to contain [code]#what_arg# as a substring. + +a@ +[source] +---- +exception(context ctx, std::error_code ec) +---- + a@ Constructs an [code]#exception# with an associated SYCL context [code]#ctx#. + +a@ +[source] +---- +exception(context ctx, int ev, const std::error_category& ecat, const std::string& what_arg) +---- + a@ Constructs an [code]#exception# with an associated SYCL context [code]#ctx#, the error code ev and the underlying error category [code]#ecat#. The string returned by [code]#what()# is guaranteed to contain [code]#what_arg# as a substring. + +a@ +[source] +---- +exception(context ctx, int ev, const std::error_category& ecat, const char* what_arg) +---- + a@ Constructs an [code]#exception# with an associated SYCL context [code]#ctx#, the error code ev and the underlying error category [code]#ecat#. The string returned by [code]#what()# is guaranteed to contain [code]#what_arg# as a substring. + +a@ +[source] +---- +exception(context ctx, int ev, const std::error_category& ecat) +---- + a@ Constructs an [code]#exception# with an associated SYCL context [code]#ctx#, the error code ev and the underlying error category [code]#ecat#. + +a@ +[source] +---- +const std::error_code& code() const noexcept +---- + a@ Returns the error code stored inside the exception. + +a@ +[source] +---- +const std::error_category& category() const noexcept +---- + a@ Returns the error category of the error code stored inside the exception. + +a@ +[source] +---- +const char *what() const +---- + a@ Returns an implementation-defined non-null constant C-style string that describes the error that triggered the exception. + +a@ +[source] +---- +bool has_context() const +---- + a@ Returns [code]#true# if this SYCL [code]#exception# has an associated SYCL [code]#context# and [code]#false# if it does not. + +a@ +[source] +---- +context get_context() const +---- + a@ Returns the SYCL [code]#context# that is associated with this SYCL [code]#exception# if one is available. Must throw an [code]#exception# with the [code]#errc::invalid# error code if this SYCL [code]#exception# does not have a SYCL [code]#context#. + +|==== + + + +[[table.members.exceptionlist]] +.Member functions of the [code]#exception_list# +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +size_t size() const +---- + a@ Returns the size of the list + +a@ +[source] +---- +iterator begin() const +---- + a@ Returns an iterator to the beginning of the list of asynchronous exceptions. + +a@ +[source] +---- +iterator end() const +---- + a@ Returns an iterator to the end of the list of asynchronous exceptions. + +|==== + + + +[[table.errc.values]] +.Values of the SYCL [code]#errc# enum +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Standard SYCL Error Codes @ Description +a@ +[source] +---- +runtime +---- + a@ Generic runtime error. + +a@ +[source] +---- +kernel +---- + a@ Error that occurred before or while enqueuing the SYCL kernel. + +a@ +[source] +---- +nd_range +---- + a@ Error regarding the SYCL [code]#nd_range# specified for the SYCL kernel + +a@ +[source] +---- +accessor +---- + a@ Error regarding the SYCL <> objects defined. + +a@ +[source] +---- +event +---- + a@ Error regarding associated SYCL [code]#event# objects. + +a@ +[source] +---- +kernel_argument +---- + a@ The application has passed an invalid argument to a + <>. This includes captured variables if the + <> is a lambda function. + +a@ +[source] +---- +build +---- + a@ Error from an online compile or link operation when compiling, linking, + or building a kernel bundle for a device. + +a@ +[source] +---- +invalid +---- + a@ A catchall error which is used when the application passes an invalid + value as a parameter to a SYCL API function or calls a SYCL API function + in some invalid way. + +a@ +[source] +---- +memory_allocation +---- + a@ Error on memory allocation on the SYCL device for a SYCL kernel. + +a@ +[source] +---- +platform +---- + a@ The SYCL platform will trigger this exception on error. + +a@ +[source] +---- +profiling +---- + a@ The <> will trigger this error if there is an error when profiling info + is enabled. + +a@ +[source] +---- +feature_not_supported +---- + a@ Exception thrown when host code uses an optional feature that is not + supported by a device. + +a@ +[source] +---- +kernel_not_supported +---- + a@ Exception thrown when a kernel uses an optional feature that is not + supported on the device to which it is enqueued. This exception is also + thrown if a <> is bound to a <>, and the + bundle does not contain the kernel invoked by the command group. + +a@ +[source] +---- +backend_mismatch +---- + a@ The application has called a backend interoperability function with + mismatched backend information. For example, requesting information + specific to backend A from a SYCL object that comes from backend B causes + this error. + +|==== + +[[table.error.helpers]] +.SYCL error code helper functions +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ SYCL Error Code Helpers @ Description +a@ +[source] +---- +std::error_condition make_error_condition(errc e) noexcept; +---- + a@ Constructs an error condition using [code]#e# and [code]#sycl_category()#. + +a@ +[source] +---- +std::error_code make_error_code(errc e) noexcept; +---- + a@ Constructs an error code using [code]#e# and [code]#sycl_category()#. + +|==== + + + +== Data types + +SYCL as a {cpp} programming model supports the {cpp} core language data types, +and it also provides the ability for all SYCL applications to be executed on SYCL +compatible devices. The scalar and vector data types that +are supported by the SYCL system are defined below. More details about the SYCL +device compiler support for fundamental and backend interoperability types are found +in <>. + + +=== Scalar data types + +The fundamental {cpp} data types which are supported in SYCL are described in +<>. Note these types are fundamental and therefore +do not exist within the [code]#sycl# namespace. + +Additional scalar data types which are supported by SYCL within the +[code]#sycl# namespace are described in +<>. + + +[[table.types.additional]] +.Additional scalar data types supported by SYCL +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Scalar data type @ Description +a@ +[source] +---- +byte +---- + a@ An unsigned 8-bit integer. This is deprecated in SYCL 2020 since {cpp17} + [code]#std::byte# can be used instead. + +a@ +[source] +---- +half +---- + a@ A 16-bit floating-point. The half data type must conform to the IEEE + 754-2008 half precision storage format. This type is only supported + on devices that have [code]#aspect::fp16#. + +|==== + + +// \input{vec_class} + +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% begin vec_class %%%%%%%%%%%%%%%%%%%%%%%%%%%% + +[[sec:vector.type]] +=== Vector types + +SYCL provides a cross-platform class template that works +efficiently on SYCL devices as well as in host {cpp} code. This type +allows sharing of vectors between the host and its SYCL devices. The +vector supports member functions that allow construction of a new vector from a +swizzled set of component elements. + +[code]#vec# +is a vector type +that compiles down to a <> built-in vector types on SYCL devices, +where possible, and provides compatible support on the host or when it is +not possible. The [code]#vec# class is templated on its number of +elements and its element type. The number of elements parameter, +_numElements_, can be one of: 1, 2, 3, 4, 8 or 16. Any other value shall +produce a compilation failure. The element type parameter, _dataT_, must +be one of the basic scalar types supported in device code. + +The SYCL [code]#vec# class template provides interoperability with the +underlying vector type defined by [code]#vector_t# which is +available only when compiled for the device. The SYCL [code]#vec# class can +be constructed from an instance of [code]#vector_t# and can implicitly +convert to an instance of [code]#vector_t# in order to support +interoperability with native <> functions from a SYCL kernel function. + +An instance of the SYCL [code]#vec# class template can also be +implicitly converted to an instance of the data type when the number of +elements is [code]#1# in order to allow single element vectors and +scalars to be convertible with each other. + +==== Vec interface + +The constructors, member functions and non-member functions of the SYCL +[code]#vec# class template are listed in +<>, <> and +<> respectively. + +// Interface for class: vec +[source,,linenums] +---- +include::{header_dir}/vec.h[lines=4..-1] +---- + + +[[table.constructors.vec]] +.Constructors of the SYCL [code]#vec# class template +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +vec() +---- + a@ Default construct a vector with element type [code]#dataT# and + with [code]#numElements# dimensions by default construction of + each of its elements. + +a@ +[source] +---- +explicit vec(const dataT &arg) +---- + a@ Construct a vector of element type [code]#dataT# and + [code]#numElements# dimensions by setting each value to [code]#arg# by + assignment. + +a@ +[source] +---- +template + vec(const argTN&... args) +---- + a@ Construct a SYCL [code]#vec# instance from any combination of scalar and SYCL [code]#vec# parameters of the same element type, providing the total number of elements for all parameters sum to [code]#numElements# of this [code]#vec# specialization. + +a@ +[source] +---- +vec(const vec &rhs) +---- + a@ Construct a vector of element type [code]#dataT# and number of elements [code]#numElements# by copy from another similar vector. + +a@ +[source] +---- +vec(vector_t nativeVector) +---- + a@ Available only when: compiled for the device. + +Constructs a SYCL [code]#vec# instance from an instance of the underlying backend-native vector type defined by [code]#vector_t#. + +|==== + + + +[[table.members.vec]] +.Member functions for the SYCL [code]#vec# class template +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +operator vector_t() const +---- + a@ Available only when: compiled for the device. + +Converts this SYCL [code]#vec# instance to the underlying backend-native vector type +defined by [code]#vector_t#. + +a@ +[source] +---- +operator dataT() const +---- + a@ Available only when: [code]#numElements == 1#. + +Converts this SYCL [code]#vec# instance to an instance of [code]#dataT# with +the value of the single element in this SYCL [code]#vec# instance. + +The SYCL [code]#vec# instance shall be implicitly convertible to the same data types, +to which [code]#dataT# is implicitly convertible. +Note that conversion operator shall not be templated +to allow standard conversion sequence for implicit conversion. + +a@ +[source] +---- +static constexpr size_t size() noexcept +---- + a@ Returns the number of elements of this SYCL [code]#vec#. +a@ +[source] +---- +size_t get_count() const +---- + a@ Returns the same value as [code]#size()#. Deprecated. +a@ +[source] +---- +static constexpr size_t byte_size() noexcept +---- + a@ Returns the size of this SYCL [code]#vec# in bytes. + +3-element vector size matches 4-element vector size to provide +interoperability with OpenCL vector types. The same rule applies to vector +alignment as described in <>. +a@ +[source] +---- +size_t get_size() const +---- + a@ Returns the same value as [code]#byte_size()#. Deprecated. +a@ +[source] +---- +template + vec convert() const +---- + a@ Converts this SYCL [code]#vec# to a SYCL [code]#vec# of a different element type specified by [code]#convertT# using the rounding mode specified by [code]#roundingMode#. The new SYCL [code]#vec# type must have the same number of elements as this SYCL [code]#vec#. The different rounding modes are described in <>. + +a@ +[source] +---- +template + asT as() const +---- + a@ Bitwise reinterprets this SYCL [code]#vec# as a SYCL [code]#vec# of a different element type and number of elements specified by [code]#asT#. The new SYCL [code]#vec# type must have the same storage size in bytes as this SYCL [code]#vec#. + +a@ +[source] +---- +template + __swizzled_vec__ swizzle() const +---- + a@ Return an instance of the implementation-defined intermediate class template [code]#+__swizzled_vec__+# representing an index sequence which can be used to apply the swizzle in a valid expression as described in <>. + +a@ +[source] +---- +__swizzled_vec__ XYZW_ACCESS() const +---- + a@ Available only when: [code]#+numElements <= 4+#. + +Returns an instance of the implementation-defined intermediate class template [code]#+__swizzled_vec__+# representing an index sequence which can be used to apply the swizzle in a valid expression as described in <>. + +Where [code]#XYZW_ACCESS# is: [code]#x# for [code]#numElements == 1#, +[code]#x, y# for +[code]#numElements == 2#, +[code]#x, y, z# for +[code]#numElements == 3# and +[code]#x, y, z, w# for +[code]#numElements == 4#. + +a@ +[source] +---- +__swizzled_vec__ RGBA_ACCESS() const +---- + a@ Available only when: [code]#numElements == 4#. + +Returns an instance of the implementation-defined intermediate class template [code]#+__swizzled_vec__+# representing an index sequence which can be used to apply the swizzle in a valid expression as described in <>. + +Where [code]#RGBA_ACCESS# is: [code]#r, g, b, a#. + +a@ +[source] +---- +__swizzled_vec__ INDEX_ACCESS() const +---- + a@ Returns an instance of the implementation-defined intermediate class template [code]#+__swizzled_vec__+# representing an index sequence which can be used to apply the swizzle in a valid expression as described in <>. + +Where [code]#INDEX_ACCESS# is: [code]#s0# for [code]#numElements == 1#, +[code]#s0, s1# for +[code]#numElements == 2#, +[code]#s0, s1, s2# for +[code]#numElements == 3#, +[code]#s0, s1, s2, s3# for +[code]#numElements == 4#, +[code]#s0, s1, s2, s3, s4, s5, s6, s7, s8# for +[code]#numElements == 8# and +[code]#s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF# for +[code]#numElements == 16#. + +a@ +[source] +---- +__swizzled_vec__ XYZW_SWIZZLE() const +---- + a@ Available only when: [code]#+numElements <= 4+#, and when the macro [code]#SYCL_SIMPLE_SWIZZLES# is defined before including [code]##. + +Returns an instance of the implementation-defined intermediate class template [code]#+__swizzled_vec__+# representing an index sequence which can be used to apply the swizzle in a valid expression as described in <>. + +Where XYZW_SWIZZLE is all permutations with repetition, of any subset with length greater than [code]#1#, of [code]#x, y# for +[code]#numElements == 2#, +[code]#x, y, z# for +[code]#numElements == 3# and +[code]#x, y, z, w# for +[code]#numElements == 4#. For example a four element [code]#vec# provides permutations including [code]#xzyw#, [code]#xyyy# and [code]#xz#. + +a@ +[source] +---- +__swizzled_vec__ RGBA_SWIZZLE() const +---- + a@ Available only when: [code]#numElements == 4#, and when the macro [code]#SYCL_SIMPLE_SWIZZLES# is defined before including [code]##. + +Returns an instance of the implementation-defined intermediate class template [code]#+__swizzled_vec__+# representing an index sequence which can be used to apply the swizzle in a valid expression as described in <>. + +Where RGBA_SWIZZLE is all permutations with repetition, of any subset with length greater than [code]#1#, of [code]#r, g, b, a#. +For example a four element [code]#vec# provides permutations including [code]#rbga#, [code]#rggg# and [code]#rb#. + +a@ +[source] +---- +__swizzled_vec__ lo() const +---- + a@ Available only when: [code]#numElements > 1#. + +Return an instance of the implementation-defined intermediate class template [code]#+__swizzled_vec__+# representing an index sequence made up of the lower half of this SYCL vec which can be used to apply the swizzle in a valid expression as described in <>. When [code]#numElements == 3#, this SYCL [code]#vec# is treated as though +[code]#numElements == 4# with the fourth element undefined. + +a@ +[source] +---- +__swizzled_vec__ hi() const +---- + a@ Available only when: [code]#numElements > 1#. + +Return an instance of the implementation-defined intermediate class template [code]#+__swizzled_vec__+# representing an index sequence made up of the upper half of this SYCL vec which can be used to apply the swizzle in a valid expression as described in <>. When [code]#numElements == 3#, this SYCL [code]#vec# is treated as though +[code]#numElements == 4# with the fourth element undefined. + +a@ +[source] +---- +__swizzled_vec__ odd() const +---- + a@ Available only when: [code]#numElements > 1#. + +Return an instance of the implementation-defined intermediate class template [code]#+__swizzled_vec__+# representing an index sequence made up of the odd indexes of this SYCL vec which can be used to apply the swizzle in a valid expression as described in <>. When [code]#numElements == 3#, this SYCL [code]#vec# is treated as though +[code]#numElements == 4# with the fourth element undefined. + + +a@ +[source] +---- +__swizzled_vec__ even() const +---- + a@ Available only when: [code]#numElements > 1#. + +Return an instance of the implementation-defined intermediate class template [code]#+__swizzled_vec__+# representing an index sequence made up of the even indexes of this SYCL vec which can be used to apply the swizzle in a valid expression as described in <>. When [code]#numElements == 3#, this SYCL [code]#vec# is treated as though +[code]#numElements == 4# with the fourth element undefined. + +a@ +[source] +---- +template + void load(size_t offset, multi_ptr ptr) +---- + a@ Loads the values at the address of [code]#ptr# offset in elements of type [code]#dataT# by [code]#numElements * offset#, into the components of this SYCL [code]#vec#. + +a@ +[source] +---- +template + void store(size_t offset, multi_ptr ptr) const +---- + a@ Stores the components of this SYCL [code]#vec# into the values at the address of [code]#ptr# offset in elements of type [code]#dataT# by [code]#numElements * offset#. + +a@ +[source] +---- +dataT &operator[](int index) +---- + a@ Returns a reference to the element stored within this SYCL [code]#vec# at the index specified by [code]#index#. + +a@ +[source] +---- +const dataT &operator[](int index) const +---- + a@ Returns a const reference to the element stored within this SYCL [code]#vec# at the index specified by [code]#index#. + +a@ +[source] +---- +vec &operator=(const vec &rhs) +---- + a@ Assign each element of the [code]#rhs# SYCL [code]#vec# to each element of this SYCL [code]#vec# and return a reference to this SYCL [code]#vec#. + +a@ +[source] +---- +vec &operator=(const dataT &rhs) +---- + a@ Assign each element of the [code]#rhs# scalar to each element of this SYCL [code]#vec# and return a reference to this SYCL [code]#vec#. + +|==== + + + +[[table.functions.vec]] +.Hidden friend functions of the [code]#vec# class template +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Hidden friend function @ Description +a@ +[source] +---- +vec operatorOP(const vec &lhs, const vec &rhs) +---- + a@ If [code]#OP# is [code]#%#, available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Construct a new instance of the SYCL [code]#vec# class template with the same template parameters as [code]#lhs# [code]#vec# with each element of the new SYCL [code]#vec# instance the result of an element-wise [code]#OP# arithmetic operation between each element of [code]#lhs# [code]#vec# and each element of the [code]#rhs# SYCL [code]#vec#. + +Where [code]#OP# is: [code]#pass:[+]#, [code]#-#, [code]#*#, [code]#/#, [code]#%#. + +a@ +[source] +---- +vec operatorOP(const vec &lhs, const dataT &rhs) +---- + a@ If [code]#OP# is [code]#%#, available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Construct a new instance of the SYCL [code]#vec# class template with the same template parameters as [code]#lhs# [code]#vec# with each element of the new SYCL [code]#vec# instance the result of an element-wise [code]#OP# arithmetic operation between each element of [code]#lhs# [code]#vec# and the [code]#rhs# scalar. + +Where [code]#OP# is: [code]#pass:[+]#, [code]#-#, [code]#*#, [code]#/#, [code]#%#. + +a@ +[source] +---- +vec &operatorOP(vec &lhs, const vec &rhs) +---- + a@ If [code]#OP# is [code]#%=#, available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Perform an in-place element-wise [code]#OP# arithmetic operation between each element of [code]#lhs# [code]#vec# and each element of the [code]#rhs# SYCL [code]#vec# and return [code]#lhs# [code]#vec#. + +Where [code]#OP# is: [code]#pass:[+=]#, [code]#-=#, [code]#*=#, [code]#/=#, [code]#%=#. + +a@ +[source] +---- +vec &operatorOP(vec &lhs, const dataT &rhs) +---- + a@ If [code]#OP# is [code]#%=#, available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Perform an in-place element-wise [code]#OP# arithmetic operation between each element of [code]#lhs# [code]#vec# and [code]#rhs# scalar and return [code]#lhs# [code]#vec#. + +Where [code]#OP# is: [code]#pass:[+=]#, [code]#-=#, [code]#*=#, [code]#/=#, [code]#%=#. + +a@ +[source] +---- +vec &operatorOP(vec &v) +---- + a@ Perform an in-place element-wise [code]#OP# prefix arithmetic operation on each element of [code]#lhs# [code]#vec#, assigning the result of each element to the corresponding element of [code]#lhs# [code]#vec# and return [code]#lhs# [code]#vec#. + +Where [code]#OP# is: [code]#pass:[++]#, [code]#--#. + +a@ +[source] +---- +vec operatorOP(vec &v, int) +---- + a@ Perform an in-place element-wise [code]#OP# postfix arithmetic operation on each element of [code]#lhs# [code]#vec#, assigning the result of each element to the corresponding element of [code]#lhs# [code]#vec# and returns a copy of [code]#lhs# [code]#vec# before the operation is performed. + +Where [code]#OP# is: [code]#pass:[++]#, [code]#--#. + +a@ +[source] +---- +vec operatorOP(vec &v) +---- + a@ Construct a new instance of the SYCL [code]#vec# class template with the same template parameters as this SYCL [code]#vec# with each element of the new SYCL [code]#vec# instance the result of an element-wise [code]#OP# unary arithmetic operation on each element of this SYCL [code]#vec#. + +Where [code]#OP# is: [code]#pass:[+]#, [code]#-#. + +a@ +[source] +---- +vec operatorOP(const vec &lhs, const vec &rhs) +---- + a@ Available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Construct a new instance of the SYCL [code]#vec# class template with the same template parameters as [code]#lhs# [code]#vec# with each element of the new SYCL [code]#vec# instance the result of an element-wise [code]#OP# bitwise operation between each element of [code]#lhs# [code]#vec# and each element of the [code]#rhs# SYCL [code]#vec#. + +Where [code]#OP# is: [code]#&#, [code]#|#, [code]#^#. + +a@ +[source] +---- +vec operatorOP(const vec &lhs, const dataT &rhs) +---- + a@ Available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Construct a new instance of the SYCL [code]#vec# class template with the same template parameters as [code]#lhs# [code]#vec# with each element of the new SYCL [code]#vec# instance the result of an element-wise [code]#OP# bitwise operation between each element of [code]#lhs# [code]#vec# and the [code]#rhs# scalar. + +Where [code]#OP# is: [code]#&#, [code]#|#, [code]#^#. + +a@ +[source] +---- +vec &operatorOP(vec &lhs, const vec &rhs) +---- + a@ Available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Perform an in-place element-wise [code]#OP# bitwise operation between each element of [code]#lhs# [code]#vec# and the [code]#rhs# SYCL [code]#vec# and return [code]#lhs# [code]#vec#. + +Where [code]#OP# is: [code]#&=#, [code]#|=#, [code]#^=#. + +a@ +[source] +---- +vec &operatorOP(vec &lhs, const dataT &rhs) +---- + a@ Available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Perform an in-place element-wise [code]#OP# bitwise operation between each element of [code]#lhs# [code]#vec# and the [code]#rhs# scalar and return a [code]#lhs# [code]#vec#. + +Where [code]#OP# is: [code]#&=#, [code]#|=#, [code]#^=#. + +a@ +[source] +---- +vec operatorOP(const vec &lhs, const vec &rhs) +---- + a@ Construct a new instance of the SYCL [code]#vec# class template with the same template parameters as [code]#lhs# [code]#vec# with each element of the new SYCL [code]#vec# instance the result of an element-wise [code]#OP# logical operation between each element of [code]#lhs# [code]#vec# and each element of the [code]#rhs# SYCL [code]#vec#. + +The [code]#dataT# template parameter of the constructed SYCL [code]#vec#, [code]#RET#, varies depending on the [code]#dataT# template parameter of this SYCL [code]#vec#. For a SYCL [code]#vec# with [code]#dataT# of type [code]#int8_t# or [code]#uint8_t# [code]#RET# must be [code]#int8_t#. For a SYCL [code]#vec# with [code]#dataT# of type [code]#int16_t#, [code]#uint16_t# or [code]#half# [code]#RET# must be [code]#int16_t#. For a SYCL [code]#vec# with [code]#dataT# of type [code]#int32_t#, [code]#uint32_t# or [code]#float# [code]#RET# must be [code]#int32_t#. For a SYCL [code]#vec# with [code]#dataT# of type [code]#int64_t#, [code]#uint64_t# or [code]#double# [code]#RET# must be [code]#int64_t#. + +Where [code]#OP# is: [code]#&&#, [code]#||#. + +a@ +[source] +---- +vec operatorOP(const vec &lhs, const dataT &rhs) +---- + a@ Construct a new instance of the SYCL [code]#vec# class template with the same template parameters as this SYCL [code]#vec# with each element of the new SYCL [code]#vec# instance the result of an element-wise [code]#OP# logical operation between each element of [code]#lhs# [code]#vec# and the [code]#rhs# scalar. + +The [code]#dataT# template parameter of the constructed SYCL [code]#vec#, [code]#RET#, varies depending on the [code]#dataT# template parameter of this SYCL [code]#vec#. For a SYCL [code]#vec# with [code]#dataT# of type [code]#int8_t# or [code]#uint8_t# [code]#RET# must be [code]#int8_t#. For a SYCL [code]#vec# with [code]#dataT# of type [code]#int16_t#, [code]#uint16_t# or [code]#half# [code]#RET# must be [code]#int16_t#. For a SYCL [code]#vec# with [code]#dataT# of type [code]#int32_t#, [code]#uint32_t# or [code]#float# [code]#RET# must be [code]#int32_t#. For a SYCL [code]#vec# with [code]#dataT# of type [code]#int64_t#, [code]#uint64_t# or [code]#double# [code]#RET# must be [code]#uint64_t#. + +Where [code]#OP# is: [code]#&&#, [code]#||#. + +a@ +[source] +---- +vec operatorOP(const vec &lhs, const vec &rhs) +---- + a@ Available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Construct a new instance of the SYCL [code]#vec# class template with the same template parameters as [code]#lhs# [code]#vec# with each element of the new SYCL [code]#vec# instance the result of an element-wise [code]#OP# bitshift operation between each element of [code]#lhs# [code]#vec# and each element of the [code]#rhs# SYCL [code]#vec#. If [code]#OP# is [code]#>>#, [code]#dataT# is a signed type and [code]#lhs# [code]#vec# has a negative value any vacated bits viewed as an unsigned integer must be assigned the value [code]#1#, otherwise any vacated bits viewed as an unsigned integer must be assigned the value [code]#0#. + +Where [code]#OP# is: [code]#<<#, [code]#>>#. + +a@ +[source] +---- +vec operatorOP(const vec &lhs, const dataT &rhs) +---- + a@ Available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Construct a new instance of the SYCL [code]#vec# class template with the same template parameters as [code]#lhs# [code]#vec# with each element of the new SYCL [code]#vec# instance the result of an element-wise [code]#OP# bitshift operation between each element of [code]#lhs# [code]#vec# and the [code]#rhs# scalar. If [code]#OP# is [code]#>>#, [code]#dataT# is a signed type and [code]#lhs# [code]#vec# has a negative value any vacated bits viewed as an unsigned integer must be assigned the value [code]#1#, otherwise any vacated bits viewed as an unsigned integer must be assigned the value [code]#0#. + +Where [code]#OP# is: [code]#<<#, [code]#>>#. + +a@ +[source] +---- +vec &operatorOP(vec &lhs, const vec &rhs) +---- + a@ Available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Perform an in-place element-wise [code]#OP# bitshift operation between each element of [code]#lhs# [code]#vec# and the [code]#rhs# SYCL [code]#vec# and returns [code]#lhs# [code]#vec#. If [code]#OP# is [code]#>>=#, [code]#dataT# is a signed type and [code]#lhs# [code]#vec# has a negative value any vacated bits viewed as an unsigned integer must be assigned the value [code]#1#, otherwise any vacated bits viewed as an unsigned integer must be assigned the value [code]#0#. + +Where [code]#OP# is: [code]#+<<=+#, [code]#>>=#. + +a@ +[source] +---- +vec &operatorOP(vec &lhs, const dataT &rhs) +---- + a@ Available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Perform an in-place element-wise [code]#OP# bitshift operation between each element of [code]#lhs# [code]#vec# and the [code]#rhs# scalar and returns a reference to this SYCL [code]#vec#. If [code]#OP# is [code]#>>=#, [code]#dataT# is a signed type and [code]#lhs# [code]#vec# has a negative value any vacated bits viewed as an unsigned integer must be assigned the value [code]#1#, otherwise any vacated bits viewed as an unsigned integer must be assigned the value [code]#0#. + +Where [code]#OP# is: [code]#+<<=+#, [code]#>>=#. + +a@ +[source] +---- +vec operatorOP(const vec& lhs, const vec &rhs) +---- + a@ Construct a new instance of the SYCL [code]#vec# class template with the element type [code]#RET# with each element of the new SYCL [code]#vec# instance the result of an element-wise [code]#OP# relational operation between each element of [code]#lhs# [code]#vec# and each element of the [code]#rhs# SYCL [code]#vec#. Each element of the SYCL [code]#vec# that is returned must be [code]#-1# if the operation results in [code]#true# and [code]#0# if the operation results in [code]#false# or either this SYCL [code]#vec# or the [code]#rhs# SYCL [code]#vec# is a NaN. + +The [code]#dataT# template parameter of the constructed SYCL [code]#vec#, [code]#RET#, varies depending on the [code]#dataT# template parameter of this SYCL [code]#vec#. For a SYCL [code]#vec# with [code]#dataT# of type [code]#int8_t# or [code]#uint8_t# [code]#RET# must be [code]#int8_t#. For a SYCL [code]#vec# with [code]#dataT# of type [code]#int16_t#, [code]#uint16_t# or [code]#half# [code]#RET# must be [code]#int16_t#. For a SYCL [code]#vec# with [code]#dataT# of type [code]#int32_t#, [code]#uint32_t# or [code]#float# [code]#RET# must be [code]#int32_t#. For a SYCL [code]#vec# with [code]#dataT# of type [code]#int64_t#, [code]#uint64_t# or [code]#double# [code]#RET# must be [code]#uint64_t#. + +Where [code]#OP# is: [code]#==#, [code]#!=#, [code]#<#, [code]#>#, [code]#+<=+#, [code]#>=#. + +a@ +[source] +---- +vec operatorOP(const vec &lhs, const dataT &rhs) +---- + a@ Construct a new instance of the SYCL [code]#vec# class template with the [code]#dataT# parameter of [code]#RET# with each element of the new SYCL [code]#vec# instance the result of an element-wise [code]#OP# relational operation between each element of [code]#lhs# [code]#vec# and the [code]#rhs# scalar. Each element of the SYCL [code]#vec# that is returned must be [code]#-1# if the operation results in [code]#true# and [code]#0# if the operation results in [code]#false# or either [code]#lhs# [code]#vec# or the [code]#rhs# SYCL [code]#vec# is a NaN. + +The [code]#dataT# template parameter of the constructed SYCL [code]#vec#, [code]#RET#, varies depending on the [code]#dataT# template parameter of this SYCL [code]#vec#. For a SYCL [code]#vec# with [code]#dataT# of type [code]#int8_t# or [code]#uint8_t# [code]#RET# must be [code]#int8_t#. For a SYCL [code]#vec# with [code]#dataT# of type [code]#int16_t#, [code]#uint16_t# or [code]#half# [code]#RET# must be [code]#int16_t#. For a SYCL [code]#vec# with [code]#dataT# of type [code]#int32_t#, [code]#uint32_t# or [code]#float# [code]#RET# must be [code]#int32_t#. For a SYCL [code]#vec# with [code]#dataT# of type [code]#int64_t#, [code]#uint64_t# or [code]#double# [code]#RET# must be [code]#uint64_t#. + +Where [code]#OP# is: [code]#==#, [code]#!=#, [code]#<#, [code]#>#, [code]#+<=+#, [code]#>=#. + +a@ +[source] +---- +vec operatorOP(const dataT &lhs, const vec &rhs) +---- + a@ If [code]#OP# is [code]#%#, available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Construct a new instance of the SYCL [code]#vec# class template with +the same template parameters as the [code]#rhs# SYCL [code]#vec# +with each element of the new SYCL [code]#vec# instance the result of +an element-wise [code]#OP# arithmetic operation between the +[code]#lhs# scalar and each element of the [code]#rhs# SYCL +[code]#vec#. + +Where [code]#OP# is: [code]#pass:[+]#, [code]#-#, [code]#*#, +[code]#/#, [code]#%#. + +a@ +[source] +---- +vec operatorOP(const dataT &lhs, const vec &rhs) +---- + a@ Available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Construct a new instance of the SYCL [code]#vec# class template with +the same template parameters as the [code]#rhs# SYCL [code]#vec# +with each element of the new SYCL [code]#vec# instance the result of +an element-wise [code]#OP# bitwise operation between the [code]#lhs# scalar and each element of the [code]#rhs# SYCL [code]#vec#. + +Where [code]#OP# is: [code]#&#, [code]#|#, [code]#^#. + +a@ +[source] +---- +vec operatorOP(const dataT &lhs, const vec &rhs) +---- + a@ Available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Construct a new instance of the SYCL [code]#vec# class template with +the same template parameters as the [code]#rhs# SYCL [code]#vec# +with each element of the new SYCL [code]#vec# instance the result of +an element-wise [code]#OP# logical operation between the [code]#lhs# scalar and each element of the [code]#rhs# SYCL [code]#vec#. + +The [code]#dataT# template parameter of the constructed SYCL [code]#vec#, [code]#RET#, varies depending on the [code]#dataT# template parameter of this SYCL [code]#vec#. For a SYCL [code]#vec# with [code]#dataT# of type [code]#int8_t# or [code]#uint8_t# [code]#RET# must be [code]#int8_t#. For a SYCL [code]#vec# with [code]#dataT# of type [code]#int16_t#, [code]#uint16_t# or [code]#half# [code]#RET# must be [code]#int16_t#. For a SYCL [code]#vec# with [code]#dataT# of type [code]#int32_t#, [code]#uint32_t# or [code]#float# [code]#RET# must be [code]#int32_t#. For a SYCL [code]#vec# with [code]#dataT# of type [code]#int64_t#, [code]#uint64_t# or [code]#double# [code]#RET# must be [code]#int64_t#. + +Where [code]#OP# is: [code]#&&#, [code]#||#. + +a@ +[source] +---- +vec operatorOP(const dataT &lhs, const vec &rhs) +---- + a@ Construct a new instance of the SYCL [code]#vec# class template with + the same template parameters as the [code]#rhs# SYCL [code]#vec# + with each element of the new SYCL [code]#vec# instance the result of + an element-wise [code]#OP# bitshift operation between the [code]#lhs# scalar and each element of the [code]#rhs# SYCL [code]#vec#. + If [code]#OP# is [code]#>>#, [code]#dataT# is a signed type + and this SYCL [code]#vec# has a negative value any vacated bits viewed + as an unsigned integer must be assigned the value [code]#1#, otherwise + any vacated bits viewed as an unsigned integer must be assigned the value + [code]#0#. + +Where [code]#OP# is: [code]#<<#, [code]#>>#. + +a@ +[source] +---- +vec operatorOP(const dataT &lhs, const vec &rhs) +---- + a@ Available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Construct a new instance of the SYCL [code]#vec# class template with +the element type [code]#RET# with each element of the new SYCL +[code]#vec# instance the result of an element-wise [code]#OP# +relational operation between the [code]#lhs# scalar and each element +of the [code]#rhs# SYCL [code]#vec#. Each element of the SYCL +[code]#vec# that is returned must be [code]#-1# if the operation +results in [code]#true# and [code]#0# if the operation results +in [code]#false# or either this SYCL [code]#vec# or the +[code]#rhs# SYCL [code]#vec# is a NaN. + +The [code]#dataT# template parameter of the constructed SYCL +[code]#vec#, [code]#RET#, varies depending on the [code]#dataT# template parameter of this SYCL [code]#vec#. For a SYCL +[code]#vec# with [code]#dataT# of type [code]#int8_t# or +[code]#uint8_t# [code]#RET# must be [code]#int8_t#. For a +SYCL [code]#vec# with [code]#dataT# of type [code]#int16_t#, [code]#uint16_t# or [code]#half# [code]#RET# +must be [code]#int16_t#. For a SYCL [code]#vec# with +[code]#dataT# of type [code]#int32_t#, [code]#uint32_t# or +[code]#float# [code]#RET# must be [code]#int32_t#. For a +SYCL [code]#vec# with [code]#dataT# of type [code]#int64_t#, [code]#uint64_t# or [code]#double# [code]#RET# +must be [code]#int64_t#. + +Where [code]#OP# is: [code]#==#, [code]#!=#, [code]#<#, [code]#>#, [code]#+<=+#, [code]#>=#. + +a@ +[source] +---- +vec &operator~(const vec &v) +---- + a@ Available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Construct a new instance of the SYCL [code]#vec# class template with the same template parameters as [code]#v# [code]#vec# with each element of the new SYCL [code]#vec# instance the result of an element-wise [code]#OP# bitwise operation on each element of [code]#v# [code]#vec#. + +a@ +[source] +---- +vec operator!(const vec &v) +---- + a@ Construct a new instance of the SYCL [code]#vec# class template with the same template parameters as [code]#v# [code]#vec# with each element of the new SYCL [code]#vec# instance the result of an element-wise [code]#OP# logical operation on each element of [code]#v# [code]#vec#. Each element of the SYCL [code]#vec# that is returned must be [code]#-1# if the operation results in [code]#true# and [code]#0# if the operation results in [code]#false# or this SYCL [code]#vec# is a NaN. + +The [code]#dataT# template parameter of the constructed SYCL [code]#vec#, [code]#RET#, varies depending on the [code]#dataT# template parameter of this SYCL [code]#vec#. For a SYCL [code]#vec# with [code]#dataT# of type [code]#int8_t# or [code]#uint8_t# [code]#RET# must be [code]#int8_t#. For a SYCL [code]#vec# with [code]#dataT# of type [code]#int16_t#, [code]#uint16_t# or [code]#half# [code]#RET# must be [code]#int16_t#. For a SYCL [code]#vec# with [code]#dataT# of type [code]#int32_t#, [code]#uint32_t# or [code]#float# [code]#RET# must be [code]#int32_t#. For a SYCL [code]#vec# with [code]#dataT# of type [code]#int64_t#, [code]#uint64_t# or [code]#double# [code]#RET# must be [code]#int64_t#. + +|==== + + +==== Aliases + +The SYCL programming API provides all permutations of the type alias: + +[code]#+using = vec<, >+# + +where [code]## is [code]#2#, [code]#3#, [code]#4#, +[code]#8# and [code]#16#, and pairings of [code]## and +[code]## for integral types are [code]#char# and +[code]#int8_t#, [code]#uchar# and [code]#uint8_t#, +[code]#short# and [code]#int16_t#, [code]#ushort# and +[code]#uint16_t#, [code]#int# and [code]#int32_t#, +[code]#uint# and [code]#uint32_t#, [code]#long# and +[code]#int64_t#, [code]#ulong# and [code]#uint64_t#, and for +floating point types are both [code]#half#, [code]#float# and +[code]#double#. + +For example [code]#uint4# is the alias to [code]#vec# +and [code]#float16# is the alias to [code]#vec#. + +==== Swizzles + +Swizzle operations can be performed in two ways. Firstly by calling the +[code]#swizzle# member function template, which takes a variadic number +of integer template arguments between [code]#0# and +[code]#numElements-1#, specifying swizzle indexes. Secondly by calling +one of the simple swizzle member functions defined in +<> as [code]#XYZW_SWIZZLE# and +[code]#RGBA_SWIZZLE#. Note that the simple swizzle functions are only +available for up to 4 element vectors and are only available when the macro +[code]#SYCL_SIMPLE_SWIZZLES# is defined before including +[code]##. + +In both cases the return type is always an instance of +[code]#+__swizzled_vec__+#, an implementation-defined temporary class +representing a swizzle of the original SYCL [code]#vec# instance. Both +kinds of swizzle member functions must not perform the swizzle operation +themselves, instead the swizzle operation must be performed by the returned +instance of [code]#+__swizzled_vec__+# when used within an expression, +meaning if the returned [code]#+__swizzled_vec__+# is never used in an +expression no swizzle operation is performed. + +Both the [code]#swizzle# member function template and the simple +swizzle member functions allow swizzle indexes to be repeated. + +A series of static constexpr values are provided within the +[code]#elem# struct to allow specifying named swizzle indexes when +calling the [code]#swizzle# member function template. + + +[[swizzled-vec-class]] +==== Swizzled [code]#vec# class + +The [code]#+__swizzled_vec__+# class must define an unspecified +temporary which provides the entire interface of the SYCL [code]#vec# +class template, including swizzled member functions, with the additions and +alterations described below: + + * The [code]#+__swizzled_vec__+# class template must be readable as an + r-value reference on the RHS of an expression. In this case the swizzle + operation is performed on the RHS of the expression and then the result + is applied to the LHS of the expression. + * The [code]#+__swizzled_vec__+# class template must be assignable as + an l-value reference on the LHS of an expression. In this case the RHS + of the expression is applied to the original SYCL [code]#vec# which + the [code]#+__swizzled_vec__+# represents via the swizzle operation. + Note that a [code]#+__swizzled_vec__+# that is used in an l-value + expression may not contain any repeated element indexes. ++ +For example: [code]#f4.xxxx() = fx.wzyx()# would not be valid. + * The [code]#+__swizzled_vec__+# class template must be convertible to + an instance of SYCL [code]#vec# with the type [code]#dataT# + and number of elements specified by the swizzle member function, if + [code]#numElements > 1#, and must be convertible to an instance of + type [code]#dataT#, if [code]#numElements == 1#. + * The [code]#+__swizzled_vec__+# class template must be non-copyable, + non-moveable, non-user constructible and may not be bound to a l-value + or escape the expression it was constructed in. For example + [code]#auto x = f4.x()# would not be valid. + * The [code]#+__swizzled_vec__+# class template should return + [code]#+__swizzled_vec__ &+# for each operator inherited from the + [code]#vec# class template interface which would return + [code]#vec &#. + + +==== Rounding modes + +The various rounding modes that can be used in the [code]#as# member +function template are described in <>. + + +[[table.vec.roundingmodes]] +.Rounding modes for the SYCL [code]#vec# class template +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Rounding mode @ Description +a@ +[source] +---- +automatic +---- + a@ Default rounding mode for the SYCL [code]#vec# class element type. [code]#rtz# (round toward zero) for integer types and [code]#rte# (round to nearest even) for floating-point types. + +a@ +[source] +---- +rte +---- + a@ Round to nearest even. + +a@ +[source] +---- +rtz +---- + a@ Round toward zero. + +a@ +[source] +---- +rtp +---- + a@ Round toward positive infinity. + +a@ +[source] +---- +rtn +---- + a@ Round toward negative infinity. + +|==== + + + +[[memory-layout-and-alignment]] +==== Memory layout and alignment + +The elements of an instance of the SYCL [code]#vec# class template are +stored in memory sequentially and contiguously and are aligned to the size +of the element type in bytes multiplied by the number of elements: + +[[vec-memory-alignment]] +[latexmath] +++++ +\texttt{sizeof}(\texttt{dataT}) \cdot \texttt{numElements} +++++ + +The exception to this is when the number of element is three in which case +the SYCL [code]#vec# is aligned to the size of the element type in +bytes multiplied by four: + +[[vec3-memory-alignment]] +[latexmath] +++++ +\texttt{sizeof}(\texttt{dataT}) \cdot 4 +++++ + +This is true for both host and device code in order to allow for instances +of the [code]#vec# class template to be passed to SYCL kernel +functions. + + +==== Performance note + +The usage of the subscript [code]#operator[]# may not be efficient on some devices. + +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% end vec_class %%%%%%%%%%%%%%%%%%%%%%%%%%%% + +// \input{marray_class} + +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% begin marray_class %%%%%%%%%%%%%%%%%%%%%%%%%%%% + +[[sec:marray.type]] +=== Math array types + +SYCL provides an [code]#marray# class +template to represent a contiguous fixed-size container. This type allows +sharing of containers between the host and its SYCL devices. + +The [code]#marray# class is templated on its element type and number of +elements. The number of elements parameter, [code]#numElements#, is a positive +value of the [code]#std::size_t# type. The element type parameter, [code]#dataT#, +must be a _numeric type_ as it is defined by {cpp} standard. + +An instance of the [code]#marray# class template can also be +implicitly converted to an instance of the data type when the number of +elements is [code]#1# in order to allow single element arrays and +scalars to be convertible with each other. + +Logical and comparison operators for [code]#marray# class template +return [code]#marray#. + + +==== Math array interface + +The constructors, member functions and non-member functions of the SYCL +[code]#marray# class template are listed in +<>, <> and +<> respectively. + +// Interface for class: vec +[source,,linenums] +---- +include::{header_dir}/marray.h[lines=4..-1] +---- + + +[[table.constructors.marray]] +.Constructors of the SYCL [code]#marray# class template +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +marray() +---- + a@ Default construct an array with element type [code]#dataT# and + with [code]#numElements# dimensions by default construction of + each of its elements. + +a@ +[source] +---- +explicit marray(const dataT &arg) +---- + a@ Construct an array of element type [code]#dataT# and + [code]#numElements# dimensions by setting each value to [code]#arg# by + assignment. + +a@ +[source] +---- +template + marray(const argTN&... args) +---- + a@ Construct a SYCL [code]#marray# instance from any combination of scalar and SYCL [code]#marray# parameters of the same element type, providing the total number of elements for all parameters sum to [code]#numElements# of this [code]#marray# specialization. + +a@ +[source] +---- +marray(const marray &rhs) +---- + a@ Construct an array of element type [code]#dataT# and number of elements [code]#numElements# by copy from another similar vector. + +|==== + + + +[[table.members.marray]] +.Member functions for the SYCL [code]#marray# class template +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +operator dataT() const +---- + a@ Available only when: [code]#numElements == 1#. + +Converts this SYCL [code]#marray# instance to an instance of [code]#dataT# with +the value of the single element in this SYCL [code]#marray# instance. + +The SYCL [code]#marray# instance shall be implicitly convertible to the same data types, +to which [code]#dataT# is implicitly convertible. +Note that conversion operator shall not be templated +to allow standard conversion sequence for implicit conversion. + +a@ +[source] +---- +static constexpr std::size_t size() noexcept +---- + a@ Returns the size of this SYCL [code]#marray# in bytes. + +a@ +[source] +---- +dataT &operator[](std::size_t index) +---- + a@ Returns a reference to the element stored within this SYCL [code]#marray# at the index specified by [code]#index#. + +a@ +[source] +---- +const dataT &operator[](std::size_t index) const +---- + a@ Returns a const reference to the element stored within this SYCL [code]#marray# at the index specified by [code]#index#. + +a@ +[source] +---- +marray &operator=(const marray &rhs) +---- + a@ Assign each element of the [code]#rhs# SYCL [code]#marray# to each element of this SYCL [code]#marray# and return a reference to this SYCL [code]#marray#. + +a@ +[source] +---- +marray &operator=(const dataT &rhs) +---- + a@ Assign each element of the [code]#rhs# scalar to each element of this SYCL [code]#marray# and return a reference to this SYCL [code]#marray#. + +a@ +[source] +---- +iterator begin() +---- + a@ Returns an iterator referring to the first element stored within the [code]#v# [code]#marray#. + +a@ +[source] +---- +const_iterator begin() const +---- + a@ Returns a const iterator referring to the first element stored within the [code]#v# [code]#marray#. + +a@ +[source] +---- +iterator end() +---- + a@ Returns an iterator referring to the one past the last element stored within the [code]#v# [code]#marray#. + +a@ +[source] +---- +const_iterator end() const +---- + a@ Returns a const iterator referring to the one past the last + element stored within the [code]#v# [code]#marray#. + +|==== + + + +[[table.functions.marray]] +.Hidden friend functions of the [code]#marray# class template +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Hidden friend function @ Description +a@ +[source] +---- +marray operatorOP(const marray &lhs, const marray &rhs) +---- + a@ If [code]#OP# is [code]#%#, available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Construct a new instance of the SYCL [code]#marray# class template with the same template parameters as [code]#lhs# [code]#marray# with each element of the new SYCL [code]#marray# instance the result of an element-wise [code]#OP# arithmetic operation between each element of [code]#lhs# [code]#marray# and each element of the [code]#rhs# SYCL [code]#marray#. + +Where [code]#OP# is: [code]#pass:[+]#, [code]#-#, [code]#*#, [code]#/#, [code]#%#. + +a@ +[source] +---- +marray operatorOP(const marray &lhs, const dataT &rhs) +---- + a@ If [code]#OP# is [code]#%#, available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Construct a new instance of the SYCL [code]#marray# class template with the same template parameters as [code]#lhs# [code]#marray# with each element of the new SYCL [code]#marray# instance the result of an element-wise [code]#OP# arithmetic operation between each element of [code]#lhs# [code]#marray# and the [code]#rhs# scalar. + +Where [code]#OP# is: [code]#pass:[+]#, [code]#-#, [code]#*#, [code]#/#, [code]#%#. + +a@ +[source] +---- +marray &operatorOP(marray &lhs, const marray &rhs) +---- + a@ If [code]#OP# is [code]#%=#, available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Perform an in-place element-wise [code]#OP# arithmetic operation between each element of [code]#lhs# [code]#marray# and each element of the [code]#rhs# SYCL [code]#marray# and return [code]#lhs# [code]#marray#. + +Where [code]#OP# is: [code]#pass:[+=]#, [code]#-=#, [code]#*=#, [code]#/=#, [code]#%=#. + +a@ +[source] +---- +marray &operatorOP(marray &lhs, const dataT &rhs) +---- + a@ If [code]#OP# is [code]#%=#, available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Perform an in-place element-wise [code]#OP# arithmetic operation between each element of [code]#lhs# [code]#marray# and [code]#rhs# scalar and return [code]#lhs# [code]#marray#. + +Where [code]#OP# is: [code]#pass:[+=]#, [code]#-=#, [code]#*=#, [code]#/=#, [code]#%=#. + +a@ +[source] +---- +marray &operatorOP(marray &v) +---- + a@ Perform an in-place element-wise [code]#OP# prefix arithmetic operation on each element of [code]#lhs# [code]#marray#, assigning the result of each element to the corresponding element of [code]#lhs# [code]#marray# and return [code]#lhs# [code]#marray#. + +Where [code]#OP# is: [code]#pass:[++]#, [code]#--#. + +a@ +[source] +---- +marray operatorOP(marray &v, int) +---- + a@ Perform an in-place element-wise [code]#OP# postfix arithmetic operation on each element of [code]#lhs# [code]#marray#, assigning the result of each element to the corresponding element of [code]#lhs# [code]#marray# and returns a copy of [code]#lhs# [code]#marray# before the operation is performed. + +Where [code]#OP# is: [code]#pass:[++]#, [code]#--#. + +a@ +[source] +---- +marray operatorOP(marray &v) +---- + a@ Construct a new instance of the SYCL [code]#marray# class template with the same template parameters as this SYCL [code]#marray# with each element of the new SYCL [code]#marray# instance the result of an element-wise [code]#OP# unary arithmetic operation on each element of this SYCL [code]#marray#. + +Where [code]#OP# is: [code]#pass:[+]#, [code]#-#. + +a@ +[source] +---- +marray operatorOP(const marray &lhs, const marray &rhs) +---- + a@ Available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Construct a new instance of the SYCL [code]#marray# class template with the same template parameters as [code]#lhs# [code]#marray# with each element of the new SYCL [code]#marray# instance the result of an element-wise [code]#OP# bitwise operation between each element of [code]#lhs# [code]#marray# and each element of the [code]#rhs# SYCL [code]#marray#. + +Where [code]#OP# is: [code]#&#, [code]#|#, [code]#^#. + +a@ +[source] +---- +marray operatorOP(const marray &lhs, const dataT &rhs) +---- + a@ Available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Construct a new instance of the SYCL [code]#marray# class template with the same template parameters as [code]#lhs# [code]#marray# with each element of the new SYCL [code]#marray# instance the result of an element-wise [code]#OP# bitwise operation between each element of [code]#lhs# [code]#marray# and the [code]#rhs# scalar. + +Where [code]#OP# is: [code]#&#, [code]#|#, [code]#^#. + +a@ +[source] +---- +marray &operatorOP(marray &lhs, const marray &rhs) +---- + a@ Available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Perform an in-place element-wise [code]#OP# bitwise operation between each element of [code]#lhs# [code]#marray# and the [code]#rhs# SYCL [code]#marray# and return [code]#lhs# [code]#marray#. + +Where [code]#OP# is: [code]#&=#, [code]#|=#, [code]#^=#. + +a@ +[source] +---- +marray &operatorOP(marray &lhs, const dataT &rhs) +---- + a@ Available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Perform an in-place element-wise [code]#OP# bitwise operation between each element of [code]#lhs# [code]#marray# and the [code]#rhs# scalar and return a [code]#lhs# [code]#marray#. + +Where [code]#OP# is: [code]#&=#, [code]#|=#, [code]#^=#. + +a@ +[source] +---- +marray operatorOP(const marray &lhs, const marray &rhs) +---- + a@ Construct a new instance of the [code]#marray# class template with [code]#dataT = bool# and same numElements as [code]#lhs# [code]#marray# with each element of the new [code]#marray# instance the result of an element-wise [code]#OP# logical operation between each element of [code]#lhs# [code]#marray# and each element of the [code]#rhs# [code]#marray#. + +Where [code]#OP# is: [code]#&&#, [code]#||#. + +a@ +[source] +---- +marray operatorOP(const marray &lhs, const dataT &rhs) +---- + a@ Construct a new instance of the [code]#marray# class template with [code]#dataT = bool# and same numElements as [code]#lhs# [code]#marray# with each element of the new [code]#marray# instance the result of an element-wise [code]#OP# logical operation between each element of [code]#lhs# [code]#marray# and the [code]#rhs# scalar. + +Where [code]#OP# is: [code]#&&#, [code]#||#. + +a@ +[source] +---- +marray operatorOP(const marray &lhs, const marray &rhs) +---- + a@ Available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Construct a new instance of the SYCL [code]#marray# class template with the same template parameters as [code]#lhs# [code]#marray# with each element of the new SYCL [code]#marray# instance the result of an element-wise [code]#OP# bitshift operation between each element of [code]#lhs# [code]#marray# and each element of the [code]#rhs# SYCL [code]#marray#. If [code]#OP# is [code]#>>#, [code]#dataT# is a signed type and [code]#lhs# [code]#marray# has a negative value any vacated bits viewed as an unsigned integer must be assigned the value [code]#1#, otherwise any vacated bits viewed as an unsigned integer must be assigned the value [code]#0#. + +Where [code]#OP# is: [code]#<<#, [code]#>>#. + +a@ +[source] +---- +marray operatorOP(const marray &lhs, const dataT &rhs) +---- + a@ Available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Construct a new instance of the SYCL [code]#marray# class template with the same template parameters as [code]#lhs# [code]#marray# with each element of the new SYCL [code]#marray# instance the result of an element-wise [code]#OP# bitshift operation between each element of [code]#lhs# [code]#marray# and the [code]#rhs# scalar. If [code]#OP# is [code]#>>#, [code]#dataT# is a signed type and [code]#lhs# [code]#marray# has a negative value any vacated bits viewed as an unsigned integer must be assigned the value [code]#1#, otherwise any vacated bits viewed as an unsigned integer must be assigned the value [code]#0#. + +Where [code]#OP# is: [code]#<<#, [code]#>>#. + +a@ +[source] +---- +marray &operatorOP(marray &lhs, const marray &rhs) +---- + a@ Available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Perform an in-place element-wise [code]#OP# bitshift operation between each element of [code]#lhs# [code]#marray# and the [code]#rhs# SYCL [code]#marray# and returns [code]#lhs# [code]#marray#. If [code]#OP# is [code]#>>=#, [code]#dataT# is a signed type and [code]#lhs# [code]#marray# has a negative value any vacated bits viewed as an unsigned integer must be assigned the value [code]#1#, otherwise any vacated bits viewed as an unsigned integer must be assigned the value [code]#0#. + +Where [code]#OP# is: [code]#+<<=+#, [code]#>>=#. + +a@ +[source] +---- +marray &operatorOP(marray &lhs, const dataT &rhs) +---- + a@ Available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Perform an in-place element-wise [code]#OP# bitshift operation between each element of [code]#lhs# [code]#marray# and the [code]#rhs# scalar and returns a reference to this SYCL [code]#marray#. If [code]#OP# is [code]#>>=#, [code]#dataT# is a signed type and [code]#lhs# [code]#marray# has a negative value any vacated bits viewed as an unsigned integer must be assigned the value [code]#1#, otherwise any vacated bits viewed as an unsigned integer must be assigned the value [code]#0#. + +Where [code]#OP# is: [code]#+<<=+#, [code]#>>=#. + +a@ +[source] +---- +marray operatorOP(const marray& lhs, const marray &rhs) +---- + a@ Construct a new instance of the [code]#marray# class template with [code]#dataT = bool# and same numElements as [code]#lhs# [code]#marray# + with each element of the new [code]#marray# instance the result of an element-wise [code]#OP# relational operation between each element of [code]#lhs# [code]#marray# + and each element of the [code]#rhs# [code]#marray#. + Corresponding element of the [code]#marray# that is returned must be [code]#false# if the operation results is a NaN. + +Where [code]#OP# is: [code]#==#, [code]#!=#, [code]#<#, [code]#>#, [code]#+<=+#, [code]#>=#. + +a@ +[source] +---- +marray operatorOP(const marray &lhs, const dataT &rhs) +---- + a@ Construct a new instance of the [code]#marray# class template with [code]#dataT = bool# and same numElements as [code]#lhs# [code]#marray# + with each element of the new [code]#marray# instance the result of an element-wise [code]#OP# relational operation between each element of [code]#lhs# [code]#marray# + and the [code]#rhs# scalar. + Corresponding element of the [code]#marray# that is returned must be [code]#false# if the operation results is a NaN. + +Where [code]#OP# is: [code]#==#, [code]#!=#, [code]#<#, [code]#>#, [code]#+<=+#, [code]#>=#. + +a@ +[source] +---- +marray operatorOP(const dataT &lhs, const marray &rhs) +---- + a@ If [code]#OP# is [code]#%#, available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Construct a new instance of the SYCL [code]#marray# class template with +the same template parameters as the [code]#rhs# SYCL [code]#marray# +with each element of the new SYCL [code]#marray# instance the result of +an element-wise [code]#OP# arithmetic operation between the +[code]#lhs# scalar and each element of the [code]#rhs# SYCL +[code]#marray#. + +Where [code]#OP# is: [code]#pass:[+]#, [code]#-#, [code]#*#, +[code]#/#, [code]#%#. + +a@ +[source] +---- +marray operatorOP(const dataT &lhs, const marray &rhs) +---- + a@ Available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Construct a new instance of the SYCL [code]#marray# class template with +the same template parameters as the [code]#rhs# SYCL [code]#marray# +with each element of the new SYCL [code]#marray# instance the result of +an element-wise [code]#OP# bitwise operation between the [code]#lhs# scalar and each element of the [code]#rhs# SYCL [code]#marray#. + +Where [code]#OP# is: [code]#&#, [code]#|#, [code]#^#. + +a@ +[source] +---- +marray operatorOP(const dataT &lhs, const marray &rhs) +---- + a@ Available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Construct a new instance of the [code]#marray# class template with [code]#dataT = bool# and +same numElements as [code]#lhs# [code]#marray# with each element of the new [code]#marray# instance +the result of an element-wise [code]#OP# logical operation between the [code]#lhs# +scalar and each element of the [code]#rhs# [code]#marray#. + +Where [code]#OP# is: [code]#&&#, [code]#||#. + +a@ +[source] +---- +marray operatorOP(const dataT &lhs, const marray &rhs) +---- + a@ Construct a new instance of the SYCL [code]#marray# class template with + the same template parameters as the [code]#rhs# SYCL [code]#marray# + with each element of the new SYCL [code]#marray# instance the result of + an element-wise [code]#OP# bitshift operation between the [code]#lhs# scalar and each element of the [code]#rhs# SYCL [code]#marray#. + If [code]#OP# is [code]#>>#, [code]#dataT# is a signed type + and this SYCL [code]#marray# has a negative value any vacated bits viewed + as an unsigned integer must be assigned the value [code]#1#, otherwise + any vacated bits viewed as an unsigned integer must be assigned the value + [code]#0#. + +Where [code]#OP# is: [code]#<<#, [code]#>>#. + +a@ +[source] +---- +marray operatorOP(const dataT &lhs, const marray &rhs) +---- + a@ Available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Construct a new instance of the [code]#marray# class template with [code]#dataT = bool# and same numElements as [code]#lhs# [code]#marray# +with each element of the new SYCL [code]#marray# instance the result of an element-wise [code]#OP# +relational operation between the [code]#lhs# scalar and each element of the [code]#rhs# [code]#marray#. +Corresponding element of the [code]#marray# that is returned must be [code]#false# if the operation results is a NaN. + +Where [code]#OP# is: [code]#==#, [code]#!=#, [code]#<#, [code]#>#, [code]#+<=+#, [code]#>=#. + +a@ +[source] +---- +marray &operator~(const marray &v) +---- + a@ Available only when: [code]#dataT != float && dataT != double && dataT != half#. + +Construct a new instance of the SYCL [code]#marray# class template with the same template parameters as [code]#v# [code]#marray# with each element of the new SYCL [code]#marray# instance the result of an element-wise [code]#OP# bitwise operation on each element of [code]#v# [code]#marray#. + +a@ +[source] +---- +marray operator!(const marray &v) +---- + a@ Construct a new instance of the [code]#marray# class template with [code]#dataT = bool# and same numElements as [code]#v# [code]#marray# + with each element of the new [code]#marray# instance the result of an element-wise logical [code]#!# operation on each element of [code]#v# [code]#marray#. + +The [code]#dataT# template parameter of the constructed SYCL [code]#marray#, [code]#RET#, varies depending on the [code]#dataT# template parameter of this SYCL [code]#marray#. For a SYCL [code]#marray# with [code]#dataT# of type [code]#int8_t# or [code]#uint8_t# [code]#RET# must be [code]#int8_t#. For a SYCL [code]#marray# with [code]#dataT# of type [code]#int16_t#, [code]#uint16_t# or [code]#half# [code]#RET# must be [code]#int16_t#. For a SYCL [code]#marray# with [code]#dataT# of type [code]#int32_t#, [code]#uint32_t# or [code]#float# [code]#RET# must be [code]#int32_t#. For a SYCL [code]#marray# with [code]#dataT# of type [code]#int64_t#, [code]#uint64_t# or [code]#double# [code]#RET# must be [code]#int64_t#. + +|==== + + + +==== Aliases + +The SYCL programming API provides all permutations of the type alias: + +[code]#+using m = marray<, >+# + +where [code]## is [code]#2#, [code]#3#, [code]#4#, +[code]#8# and [code]#16#, and pairings of [code]## and +[code]## for integral types are [code]#char# and +[code]#int8_t#, [code]#uchar# and [code]#uint8_t#, +[code]#short# and [code]#int16_t#, [code]#ushort# and +[code]#uint16_t#, [code]#int# and [code]#int32_t#, +[code]#uint# and [code]#uint32_t#, [code]#long# and +[code]#int64_t#, [code]#ulong# and [code]#uint64_t#, for +floating point types are both [code]#half#, [code]#float# and +[code]#double#, and for boolean type [code]#bool#. + +For example [code]#muint4# is the alias to [code]#marray# +and [code]#mfloat16# is the alias to [code]#marray#. + + +[[memory-layout-and-alignment.marray]] +==== Memory layout and alignment + +The elements of an instance of the [code]#marray# class template as if +stored in [code]#std::array#. + +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% end marray_class %%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +== Synchronization and atomics + +The available features are: + + * Accessor classes: Accessor classes specify acquisition and release of + buffer and image data structures to provide points at which underlying + queue synchronization primitives must be generated. + * Atomic operations: SYCL devices support a restricted subset of {cpp} + atomics and SYCL uses the library syntax from the next {cpp} specification + to make this available. + * Fences: Fence primitives are made available to order loads and stores. + They are exposed through the [code]#atomic_fence# function. Fences + can have acquire semantics, release semantics or both. + * Barriers: Barrier primitives are made available to synchronize sets of + work-items within individual <>. They are exposed through the + [code]#group_barrier# function. + * Hierarchical parallel dispatch: In the hierarchical parallelism model of + describing computations, synchronization within the work-group is made + explicit through multiple instances of the + [code]#parallel_for_work_item# function call, rather than through + the use of explicit <> operations. + * Device event: they are used inside SYCL kernel functions to wait for + asynchronous operations within a SYCL kernel function to complete. + + +[[sec:barriers-fences]] +=== Barriers and fences + +A <> or <> provides memory ordering semantics +over both the local address space and global address space. A +<> provides control over the re-ordering of memory load and +store operations, subject to the associated memory [code]#order# and memory +[code]#scope#, when paired with synchronization through an atomic object. + +[source,,linenums] +---- +include::{header_dir}/synchronization.h[lines=4..-1] +---- + +The effects of a call to [code]#atomic_fence# depend on the value of +the [code]#order# parameter: + + * [code]#memory_order::relaxed:# No effect + * [code]#memory_order::acquire:# Acquire fence + * [code]#memory_order::release:# Release fence + * [code]#memory_order::acq_rel:# Both an acquire fence and a release + fence + * [code]#memory_order::seq_cst:# A sequentially consistent acquire + and release fence + +A <> acts as both an acquire fence and a release fence: all +work-items in the group execute a release fence prior to synchronizing at +the barrier, and all work-items in the group execute an acquire fence +afterwards. A <> provides implicit atomic synchronization +as if through an internal atomic object, such that the acquire and release fences +associated with the barrier synchronize with each other, without an explicit +atomic operation being required on an atomic object to synchronize the fences. + + +[[device-event-class]] +=== [code]#device_event# class + +The SYCL [code]#device_event# class encapsulates a single SYCL device event +which is available only within SYCL kernel functions and can be used to wait for +asynchronous operations within a SYCL kernel function to complete. + +All member functions of the [code]#device_event# class must not throw a +SYCL exception. + +A synopsis of the SYCL [code]#device_event# class is provided below. The +constructors and member functions of the SYCL [code]#device_event# class +are listed in <> and +<> respectively. + +// Interface of device event class +[source,,linenums] +---- +include::{header_dir}/deviceEvent.h[lines=4..-1] +---- + +[[table.members.device-event]] +.Member functions of the SYCL [code]#device_event# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +void wait() noexcept +---- + a@ Waits for the asynchronous operation associated with this SYCL + [code]#device_event# to complete. + +|==== + +[[table.constructors.device-event]] +.Constructors of the [code]#device_event# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +device_event(___unspecified___) +---- + a@ Unspecified implementation-defined constructor. + +|==== + + +[[sec:atomic-references]] +=== Atomic references + +The SYCL specification provides atomic operations based on the library +syntax from the next {cpp} specification. The set of supported orderings is +specific to a device, but every device is guaranteed to support at least +[code]#memory_order::relaxed#. Since different devices have different +capabilities, there is no default ordering in SYCL and the default order +used by each instance of [code]#sycl::atomic_ref# is set by a template +argument. If the default order is set to [code]#memory_order::relaxed#, +all memory order arguments default to [code]#memory_order::relaxed#. If +the default order is set to [code]#memory_order::acq_rel#, memory order +arguments default to [code]#memory_order::acquire# for load operations, +[code]#memory_order::release# for store operations and +[code]#memory_order::acq_rel# for read-modify-write operations. If the +default order is set to [code]#memory_order::seq_cst#, all memory order +arguments default to [code]#memory_order::seq_cst#. + +The SYCL atomic library may map directly to the underlying {cpp} library in +<> code, and must interact safely with the host {cpp} +atomic library when used in host code. The SYCL library must be used in +device code to ensure that only the limited subset of functionality is +available. SYCL device compilers should give a compilation error on use of +the [code]#std::atomic# and [code]#std::atomic_ref# classes and +functions in device code. + +The template parameter [code]#Space# is permitted to be +[code]#access::address_space::generic_space#, +[code]#access::address_space::global_space# or [code]#access::address_space::local_space#. + +The data type [code]#T# is permitted to be [code]#int#, [code]#unsigned int#, [code]#long#, +[code]#unsigned long#, +[code]#long long#, +[code]#unsigned long long#, [code]#float# or +[code]#double#. For floating-point types, the member functions of the +[code]#atomic_ref# class may be emulated, and may use a different +floating-point environment to those defined by +[code]#info::device::single_fp_config# and +[code]#info::device::double_fp_config# (i.e. floating-point atomics may +use different rounding modes and may have different exception behavior). + +The atomic types are defined as follows. + +[source,,linenums] +---- +include::{header_dir}/atomicref.h[lines=4..-1] +---- + +The constructors and member functions for instances of the SYCL +[code]#atomic_ref# class using any compatible type are listed in +<> +and <> respectively. Additional member +functions for integral, floating-point and pointer types are listed in +<>, +<> +and <> respectively. + +The static member [code]#required_alignment# describes the minimum +required alignment in bytes of an object that can be referenced by an +[code]#atomic_ref#, which must be at least [code]#alignof(T)#. + +The static member [code]#is_always_lock_free# is true if all atomic +operations for type [code]#T# are always lock-free. A SYCL +implementation is not guaranteed to support atomic operations that are not +lock-free. + +The static members [code]#default_read_order#, [code]#default_write_order# and +[code]#default_read_modify_write_order# reflect the default memory order values for +each type of atomic operation, consistent with the [code]#DefaultOrder# template. + +The atomic operations and member functions behave as described in the {cpp} +specification, barring the restrictions discussed above. Note that care +must be taken when using atomics to implement synchronization routines due +to the lack of forward progress guarantees between work-items in SYCL. No +work-item may be dependent on another work-item to make progress if the code +is to be portable. + + +[[table.atomic-refs.constructors]] +.Constructors of the SYCL [code]#atomic_ref# class template +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +atomic_ref(T& ref) +---- + a@ Constructs an instance of SYCL [code]#atomic_ref# which is associated + with the reference [code]#ref#. + +|==== + + + +[[table.atomic-refs.members.common]] +.Member functions available on any object of type [code]#atomic_ref# +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +bool is_lock_free() const +---- + a@ Return [code]#true# if the atomic operations provided by this + [code]#atomic_ref# are lock-free. + +a@ +[source] +---- +void store(T operand, + memory_order order = default_write_order, + memory_scope scope = default_scope) const +---- + a@ Atomically stores [code]#operand# to the object referenced by + this [code]#atomic_ref#. The memory order of this atomic operation + must be [code]#memory_order::relaxed#, + [code]#memory_order::release# or [code]#memory_order::seq_cst#. + This function is only supported for 64-bit data types on devices that have + [code]#aspect::atomic64#. + +a@ +[source] +---- +T operator=(T desired) const +---- + a@ Equivalent to [code]#store(desired)#. Returns [code]#desired#. + +a@ +[source] +---- +T load( + memory_order order = default_read_order + memory_scope scope = default_scope) const +---- + a@ Atomically loads the value of the object referenced by this + [code]#atomic_ref#. The memory order of this atomic operation must be + [code]#memory_order::relaxed#, [code]#memory_order::acquire#, + or [code]#memory_order::seq_cst#. This function is only supported for + 64-bit data types on devices that have [code]#aspect::atomic64#. + +a@ +[source] +---- +operator T() const +---- + a@ Equivalent to [code]#load()#. + +a@ +[source] +---- +T exchange(T operand, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const +---- + a@ Atomically replaces the value of the object referenced by this + [code]#atomic_ref# with value [code]#operand# and + returns the original value of the referenced object. + This function is only supported for 64-bit data types on devices that have + [code]#aspect::atomic64#. + +a@ +[source] +---- +bool compare_exchange_weak(T &expected, T desired, + memory_order success, + memory_order failure, + memory_scope scope = default_scope) const +---- + a@ Atomically compares the value of the object referenced by this [code]#atomic_ref# + against the value of [code]#expected#. If the values are + equal, attempts to + replace the value of the referenced object with the value of + [code]#desired#; + otherwise assigns the original value of the referenced object to [code]#expected#. + +Returns [code]#true# if the comparison operation and replacement operation were +successful. The [code]#failure# memory order of this atomic operation must be +[code]#memory_order::relaxed#, [code]#memory_order::acquire# or +[code]#memory_order::seq_cst#. + +This function is only supported for 64-bit data types on devices that have +[code]#aspect::atomic64#. + +a@ +[source] +---- +bool compare_exchange_weak(T &expected, T desired, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const +---- + a@ Equivalent to [code]#compare_exchange_weak(expected, desired, order, order, scope)#. + +a@ +[source] +---- +bool compare_exchange_strong(T &expected, T desired, + memory_order success, + memory_order failure, + memory_scope scope = default_scope) const +---- + a@ Atomically compares the value of the object referenced by this [code]#atomic_ref# + against the value of [code]#expected#. If the values are equal, + replaces the value of the referenced object with the value of + [code]#desired#; + otherwise assigns the original value of the referenced object to [code]#expected#. + +Returns [code]#true# if the comparison operation was +successful. The [code]#failure# memory order of this atomic operation must be +[code]#memory_order::relaxed#, [code]#memory_order::acquire# or +[code]#memory_order::seq_cst#. + +This function is only supported for 64-bit data types on devices that have +[code]#aspect::atomic64#. + +a@ +[source] +---- +bool compare_exchange_strong(T &expected, T desired, + memory_order order = + default_read_modify_write_order) const +---- + a@ Equivalent to [code]#compare_exchange_strong(expected, desired, order, order, scope)#. + +|==== + + + +[[table.atomic-refs.members.integral]] +.Additional member functions available on an object of type [code]#atomic_ref# for integral [code]#T# +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +T fetch_add(T operand, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const +---- + a@ Atomically adds [code]#operand# to the value + of the object referenced by this [code]#atomic_ref# and assigns + the result to the value of the referenced object. Returns the original + value of the referenced object. This function is only supported for 64-bit + data types on devices that have [code]#aspect::atomic64#. + +a@ +[source] +---- +T operator+=(T operand) const +---- + a@ Equivalent to [code]#fetch_add(operand)#. + +a@ +[source] +---- +T operator++(int) const +---- + a@ Equivalent to [code]#fetch_add(1)#. + +a@ +[source] +---- +T operator++() const +---- + a@ Equivalent to [code]#fetch_add(1) pass:[+] 1#. + +a@ +[source] +---- +T fetch_sub(T operand, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const +---- + a@ Atomically subtracts [code]#operand# from the value + of the object referenced by this [code]#atomic_ref# and assigns + the result to the value of the referenced object. Returns the original + value of the referenced object. This function is only supported for 64-bit + data types on devices that have [code]#aspect::atomic64#. + +a@ +[source] +---- +T operator-=(T operand) const +---- + a@ Equivalent to [code]#fetch_sub(operand)#. + +a@ +[source] +---- +T operator--(int) const +---- + a@ Equivalent to [code]#fetch_sub(1)#. + +a@ +[source] +---- +T operator--() const +---- + a@ Equivalent to [code]#fetch_sub(1) - 1#. + +a@ +[source] +---- +T fetch_and(T operand, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const +---- + a@ Atomically performs a bitwise AND between [code]#operand# + and the value of the object referenced by this [code]#atomic_ref#, + and assigns the result to the value of the referenced object. Returns the + original value of the referenced object. This function is only supported + for 64-bit data types on devices that have + [code]#aspect::atomic64#. + +a@ +[source] +---- +T operator&=(T operand) const +---- + a@ Equivalent to [code]#fetch_and(operand)#. + +a@ +[source] +---- +T fetch_or(T operand, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const +---- + a@ Atomically performs a bitwise OR between [code]#operand# + and the value of the object referenced by this [code]#atomic_ref#, + and assigns the result to the value of the referenced object. Returns the + original value of the referenced object. This function is only supported + for 64-bit data types on devices that have + [code]#aspect::atomic64#. + +a@ +[source] +---- +T operator|=(T operand) const +---- + a@ Equivalent to [code]#fetch_or(operand)#. + +a@ +[source] +---- +T fetch_xor(T operand, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const +---- + a@ Atomically performs a bitwise XOR between [code]#operand# + and the value of the object referenced by this [code]#atomic_ref#, + and assigns the result to the value of the referenced object. Returns the + original value of the referenced object. This function is only supported + for 64-bit data types on devices that have + [code]#aspect::atomic64#. + +a@ +[source] +---- +T operator^=(T operand) const +---- + a@ Equivalent to [code]#fetch_xor(operand)#. + +a@ +[source] +---- +T fetch_min(T operand, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const +---- + a@ Atomically computes the minimum of [code]#operand# + and the value of the object referenced by this [code]#atomic_ref#, + and assigns the result to the value of the referenced object. Returns the + original value of the referenced object. This function is only supported + for 64-bit data types on devices that have + [code]#aspect::atomic64#. + +a@ +[source] +---- +T fetch_max(T operand, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const +---- + a@ Atomically computes the maximum of [code]#operand# + and the value of the object referenced by this [code]#atomic_ref#, + and assigns the result to the value of the referenced object. Returns the + original value of the referenced object. This function is only supported + for 64-bit data types on devices that have + [code]#aspect::atomic64#. + +|==== + + + +[[table.atomic-refs.members.floating]] +.Additional member functions available on an object of type [code]#atomic_ref# for floating-point [code]#T# +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +T fetch_add(T operand, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const +---- + a@ Atomically adds [code]#operand# to the value + of the object referenced by this [code]#atomic_ref# and assigns + the result to the value of the referenced object. Returns the original + value of the referenced object. This function is only supported for 64-bit + data types on devices that have [code]#aspect::atomic64#. + +a@ +[source] +---- +T operator+=(T operand) const +---- + a@ Equivalent to [code]#fetch_add(operand)#. + +a@ +[source] +---- +T fetch_sub(T operand, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const +---- + a@ Atomically subtracts [code]#operand# from the value + of the object referenced by this [code]#atomic_ref# and assigns + the result to the value of the referenced object. Returns the original + value of the referenced object. This function is only supported for 64-bit + data types on devices that have [code]#aspect::atomic64#. + +a@ +[source] +---- +T operator-=(T operand) const +---- + a@ Equivalent to [code]#fetch_sub(operand)#. + +a@ +[source] +---- +T fetch_min(T operand, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const +---- + a@ Atomically computes the minimum of [code]#operand# + and the value of the object referenced by this [code]#atomic_ref#, + and assigns the result to the value of the referenced object. Returns the + original value of the referenced object. This function is only supported for + 64-bit data types on devices that have [code]#aspect::atomic64#. + +a@ +[source] +---- +T fetch_max(T operand, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const +---- + a@ Atomically computes the maximum of [code]#operand# + and the value of the object referenced by this [code]#atomic_ref#, + and assigns the result to the value of the referenced object. Returns the + original value of the referenced object. This function is only supported for + 64-bit data types on devices that have [code]#aspect::atomic64#. + +|==== + + + +[[table.atomic-refs.members.pointer]] +.Additional member functions available on an object of type [code]#atomic_ref# +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +T* fetch_add(ptrdiff_t operand, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const +---- + a@ Atomically adds [code]#operand# to the value + of the object referenced by this [code]#atomic_ref# and assigns + the result to the value of the referenced object. Returns the original + value of the referenced object. This function is only supported for 64-bit + pointers on devices that have [code]#aspect::atomic64#. + +a@ +[source] +---- +T* operator+=(ptrdiff_t operand) const +---- + a@ Equivalent to [code]#fetch_add(operand)#. + +a@ +[source] +---- +T* operator++(int) const +---- + a@ Equivalent to [code]#fetch_add(1)#. + +a@ +[source] +---- +T* operator++() const +---- + a@ Equivalent to [code]#fetch_add(1) pass:[+] 1#. + +a@ +[source] +---- +T* fetch_sub(ptrdiff_t operand, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const +---- + a@ Atomically subtracts [code]#operand# from the value + of the object referenced by this [code]#atomic_ref# and assigns + the result to the value of the referenced object. Returns the original + value of the referenced object. This function is only supported for 64-bit + pointers on devices that have [code]#aspect::atomic64#. + +a@ +[source] +---- +T* operator-=(ptrdiff_t operand) const +---- + a@ Equivalent to [code]#fetch_sub(operand)#. + +a@ +[source] +---- +T* operator--(int) const +---- + a@ Equivalent to [code]#fetch_sub(1)#. + +a@ +[source] +---- +T* operator--() const +---- + a@ Equivalent to [code]#fetch_sub(1) - 1#. + +|==== + + + +[[sec:atom-types-depr]] +=== Atomic types (deprecated) + +// Deprecated atomics from SYCL 1.2.1 + +The atomic types and operations on atomic types provided by SYCL 1.2.1 are +deprecated in SYCL 2020, and will be removed in a future version of SYCL. The +types and operations are made available in the [code]#cl::sycl::# +namespace for backwards compatibility. + +The constructors and member functions for the [code]#cl::sycl::atomic# +class are listed in <> +and <> respectively. + +[source,,linenums] +---- +include::{header_dir}/atomic.h[lines=4..-1] +---- + +The global functions are as follows and described in +<>. + +[source,,linenums] +---- +include::{header_dir}/atomicoperations.h[lines=4..-1] +---- + + +[[table.atomics.constructors]] +.Constructors of the [code]#cl::sycl::atomic# class template +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +template +atomic(multi_ptr ptr) +---- + a@ Deprecated in SYCL 2020. + +Permitted data types for [code]#pointerT# are any valid scalar data +type which is the same size in bytes as [code]#T#. Constructs an +instance of SYCL [code]#atomic# which is associated with the pointer +[code]#ptr#, converted to a pointer of data type [code]#T#. + +|==== + + + +[[table.atomics.members]] +.Member functions available on an object of type [code]#cl::sycl::atomic# +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +void store(T operand, memory_order memoryOrder = + memory_order::relaxed) +---- + a@ Deprecated in SYCL 2020. + +Atomically stores the value [code]#operand# at the address of the +[code]#multi_ptr# associated with this SYCL [code]#atomic#. The +memory order of this atomic operation must be [code]#memory_order::relaxed#. This function is only supported for 64-bit data +types on devices that have [code]#aspect::atomic64#. + +a@ +[source] +---- +T load(memory_order memoryOrder = + memory_order::relaxed) const +---- + a@ Deprecated in SYCL 2020. + +Atomically loads the value at the address of the [code]#multi_ptr# +associated with this SYCL [code]#atomic#. Returns the value at the +address of the [code]#multi_ptr# associated with this SYCL +[code]#atomic# before the call. The memory order of this atomic +operation must be [code]#memory_order::relaxed#. This function is +only supported for 64-bit data types on devices that have +[code]#aspect::atomic64#. + +a@ +[source] +---- +T exchange(T operand, memory_order memoryOrder = + memory_order::relaxed) +---- + a@ Deprecated in SYCL 2020. + +Atomically replaces the value at the address of the [code]#multi_ptr# +associated with this SYCL [code]#atomic# with value [code]#operand# and returns the value at the address of the [code]#multi_ptr# associated with this SYCL [code]#atomic# before the call. +The memory order of this atomic operation must be [code]#memory_order::relaxed#. This function is only supported for 64-bit data +types on devices that have [code]#aspect::atomic64#. + +a@ +[source] +---- +bool compare_exchange_strong(T &expected, T desired, + memory_order successMemoryOrder = + memory_order::relaxed, + memory_order failMemoryOrder = + memory_order::relaxed) +---- + a@ Deprecated in SYCL 2020. + +Available only when: [code]#T != float#. + +Atomically compares the value at the address of the [code]#multi_ptr# +associated with this SYCL [code]#atomic# against the value of +[code]#expected#. If the values are equal, replaces value at address +of the [code]#multi_ptr# associated with this SYCL +[code]#atomic# with the value of [code]#desired#; otherwise assigns the +original value at the address of the [code]#multi_ptr# associated +with this SYCL [code]#atomic# to [code]#expected#. Returns +[code]#true# if the comparison operation was successful. The memory +order of this atomic operation must be [code]#memory_order::relaxed# for both success and fail. This function is only +supported for 64-bit data types on devices that have +[code]#aspect::atomic64#. + +a@ +[source] +---- +T fetch_add(T operand, memory_order memoryOrder = + memory_order::relaxed) +---- + a@ Deprecated in SYCL 2020. + +Available only when: [code]#T != float#. + +Atomically adds the value [code]#operand# to the value at the address +of the [code]#multi_ptr# associated with this SYCL [code]#atomic# and assigns the result to the value at the address of the +[code]#multi_ptr# associated with this SYCL [code]#atomic#. +Returns the value at the address of the [code]#multi_ptr# associated +with this SYCL [code]#atomic# before the call. The memory order of +this atomic operation must be [code]#memory_order::relaxed#. This +function is only supported for 64-bit data types on devices that have +[code]#aspect::atomic64#. + +a@ +[source] +---- +T fetch_sub(T operand, memory_order memoryOrder = + memory_order::relaxed) +---- + a@ Deprecated in SYCL 2020. + +Available only when: [code]#T != float#. + +Atomically subtracts the value [code]#operand# to the value at the +address of the [code]#multi_ptr# associated with this SYCL +[code]#atomic# and assigns the result to the value at the address of +the [code]#multi_ptr# associated with this SYCL [code]#atomic#. +Returns the value at the address of the [code]#multi_ptr# associated +with this SYCL [code]#atomic# before the call. The memory order of +this atomic operation must be [code]#memory_order::relaxed#. This +function is only supported for 64-bit data types on devices that have +[code]#aspect::atomic64#. + +a@ +[source] +---- +T fetch_and(T operand, memory_order memoryOrder = + memory_order::relaxed) +---- + a@ Deprecated in SYCL 2020. + +Available only when: [code]#T != float#. + +Atomically performs a bitwise AND between the value [code]#operand# +and the value at the address of the [code]#multi_ptr# associated with +this SYCL [code]#atomic# and assigns the result to the value at the +address of the [code]#multi_ptr# associated with this SYCL +[code]#atomic#. Returns the value at the address of the [code]#multi_ptr# associated with this SYCL [code]#atomic# before the call. +The memory order of this atomic operation must be [code]#memory_order::relaxed#. This function is only supported for 64-bit data +types on devices that have [code]#aspect::atomic64#. + +a@ +[source] +---- +T fetch_or(T operand, memory_order memoryOrder = + memory_order::relaxed) +---- + a@ Deprecated in SYCL 2020. + +Available only when: [code]#T != float#. + +Atomically performs a bitwise OR between the value [code]#operand# +and the value at the address of the [code]#multi_ptr# associated with +this SYCL [code]#atomic# and assigns the result to the value at the +address of the [code]#multi_ptr# associated with this SYCL +[code]#atomic#. Returns the value at the address of the [code]#multi_ptr# associated with this SYCL [code]#atomic# before the call. +The memory order of this atomic operation must be [code]#memory_order::relaxed#. This function is only supported for 64-bit data +types on devices that have [code]#aspect::atomic64#. + +a@ +[source] +---- +T fetch_xor(T operand, memory_order memoryOrder = + memory_order::relaxed) +---- + a@ Deprecated in SYCL 2020. + +Available only when: [code]#T != float#. + +Atomically performs a bitwise XOR between the value [code]#operand# +and the value at the address of the [code]#multi_ptr# associated with +this SYCL [code]#atomic# and assigns the result to the value at the +address of the [code]#multi_ptr# associated with this SYCL +[code]#atomic#. Returns the value at the address of the [code]#multi_ptr# associated with this SYCL [code]#atomic# before the call. +The memory order of this atomic operation must be [code]#memory_order::relaxed#. This function is only supported for 64-bit data +types on devices that have [code]#aspect::atomic64#. + +a@ +[source] +---- +T fetch_min(T operand, memory_order memoryOrder = + memory_order::relaxed) +---- + a@ Deprecated in SYCL 2020. + +Atomically computes the minimum of the value [code]#operand# and the +value at the address of the [code]#multi_ptr# associated with this +SYCL [code]#atomic# and assigns the result to the value at the address +of the [code]#multi_ptr# associated with this SYCL [code]#atomic#. Returns the value at the address of the [code]#multi_ptr# +associated with this SYCL [code]#atomic# before the call. The memory +order of this atomic operation must be [code]#memory_order::relaxed#. +This function is only supported for 64-bit data types on devices that have +[code]#aspect::atomic64#. + +a@ +[source] +---- +T fetch_max(T operand, memory_order memoryOrder = + memory_order::relaxed) +---- + a@ Deprecated in SYCL 2020. + +Available only when: [code]#T != float#. + +Atomically computes the maximum of the value [code]#operand# and the +value at the address of the [code]#multi_ptr# associated with this +SYCL [code]#atomic# and assigns the result to the value at the address +of the [code]#multi_ptr# associated with this SYCL [code]#atomic#. Returns the value at the address of the [code]#multi_ptr# +associated with this SYCL [code]#atomic# before the call. The memory +order of this atomic operation must be [code]#memory_order::relaxed#. +This function is only supported for 64-bit data types on devices that have +[code]#aspect::atomic64#. + +|==== + + + +[[table.atomics.functions]] +.Global functions available on atomic types +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Functions @ Description +a@ +[source] +---- +template +T atomic_load(atomic object, + memory_order memoryOrder = memory_order::relaxed) +---- + a@ Deprecated in SYCL 2020. + +Equivalent to calling [code]#object.load(memoryOrder)#. + +a@ +[source] +---- +template +void atomic_store(atomic object, T operand, + memory_order memoryOrder = memory_order::relaxed) +---- + a@ Deprecated in SYCL 2020. + +Equivalent to calling [code]#object.store(operand, memoryOrder)#. + +a@ +[source] +---- +template +T atomic_exchange(atomic object, T operand, + memory_order memoryOrder = memory_order::relaxed) +---- + a@ Deprecated in SYCL 2020. + +Equivalent to calling [code]#object.exchange(operand, memoryOrder)#. + +a@ +[source] +---- +template +bool atomic_compare_exchange_strong( + atomic object, T &expected, T desired, + memory_order successMemoryOrder = + memory_order::relaxed + memory_order failMemoryOrder = + memory_order::relaxed) +---- + a@ Deprecated in SYCL 2020. + +Equivalent to calling [code]#object.compare_exchange_strong(expected, desired, successMemoryOrder, failMemoryOrders)#. + +a@ +[source] +---- +template +T atomic_fetch_add(atomic object, T operand, + memory_order memoryOrder = memory_order::relaxed) +---- + a@ Deprecated in SYCL 2020. + +Equivalent to calling [code]#object.fetch_add(operand, memoryOrder)#. + +a@ +[source] +---- +template +T atomic_fetch_sub(atomic object, T operand, + memory_order memoryOrder = memory_order::relaxed) +---- + a@ Deprecated in SYCL 2020. + +Equivalent to calling [code]#object.fetch_sub(operand, memoryOrder)#. + +a@ +[source] +---- +template +T atomic_fetch_and(atomic operand, T object, + memory_order memoryOrder = memory_order::relaxed) +---- + a@ Deprecated in SYCL 2020. + +Equivalent to calling [code]#object.fetch_add(operand, memoryOrder)#. + +a@ +[source] +---- +template +T atomic_fetch_or(atomic object, T operand, + memory_order memoryOrder = memory_order::relaxed) +---- + a@ Deprecated in SYCL 2020. + +Equivalent to calling [code]#object.fetch_or(operand, memoryOrder)#. + +a@ +[source] +---- +template +T atomic_fetch_xor(atomic object, T operand, + memory_order memoryOrder = memory_order::relaxed) +---- + a@ Deprecated in SYCL 2020. + +Equivalent to calling [code]#object.fetch_xor(operand, memoryOrder)#. + +a@ +[source] +---- +template +T atomic_fetch_min(atomic object, T operand, + memory_order memoryOrder = memory_order::relaxed) +---- + a@ Deprecated in SYCL 2020. + +Equivalent to calling [code]#object.fetch_min(operand, memoryOrder)#. + +a@ +[source] +---- +template +T atomic_fetch_max(atomic object, T operand, + memory_order memoryOrder = memory_order::relaxed) +---- + a@ Deprecated in SYCL 2020. + +Equivalent to calling [code]#object.fetch_max(operand, memoryOrder)#. + +|==== + + + +[[subsec:stream]] +== Stream class + +The SYCL [code]#stream# class is a buffered output stream that allows +outputting the values of built-in, vector and SYCL types to the console. The +implementation of how values are streamed to the console is left as an +implementation detail. + +The way in which values are output by an instance of the SYCL +[code]#stream# class can also be altered using a range of manipulators. + +There are two limits that are relevant for the [code]#stream# class. The +[code]#totalBufferSize# limit specifies the maximum size of the overall +character stream that can be output during a kernel invocation, and the +[code]#workItemBufferSize# limit specifies the maximum size of the +character stream that can be output within a work item before a flush must be +performed. Both of these limits are specified in bytes. The +[code]#totalBufferSize# limit must be sufficient to contain the characters +output by all stream statements during execution of a kernel invocation (the +aggregate of outputs from all work items), and the +[code]#workItemBufferSize# limit must be sufficient to contain the +characters output within a work item between stream flush operations. + +If the [code]#totalBufferSize# or [code]#workItemBufferSize# +limits are exceeded, it is implementation-defined whether the streamed +characters exceeding the limit are output, or silently ignored/discarded, +and if output it is implementation-defined whether those extra characters +exceeding the [code]#workItemBufferSize# limit count toward the +[code]#totalBufferSize# limit. Regardless of this implementation +defined behavior of output exceeding the limits, no undefined or erroneous +behavior is permitted of an implementation when the limits are exceeded. +Unused characters within [code]#workItemBufferSize# (any portion of the +[code]#workItemBufferSize# capacity that has not been used at the time +of a stream flush) do not count toward the [code]#totalBufferSize# +limit, in that only characters flushed count toward the +[code]#totalBufferSize# limit. + +The SYCL [code]#stream# class provides the common reference semantics +(see <>). + + +=== Stream class interface + +The constructors and member functions of the SYCL [code]#stream# class +are listed in <>, +<>, and <> respectively. The +additional common special member functions and common member functions are +listed in <> and +<>, respectively. + +The operand types that are supported by the SYCL [code]#stream# class +[code]#operator<<()# operator are listed in +<>. + +The manipulators that are supported by the SYCL [code]#stream# class +[code]#operator<<()# operator are listed in +<>. + +// Interface of the device class +[source,,linenums] +---- +include::{header_dir}/stream.h[lines=4..-1] +---- + + +[[table.operands.stream]] +.Operand types supported by the [code]#stream# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Stream operand type @ Description +a@ +[source] +---- +char, signed char, unsigned char, int, unsigned int, short, unsigned short, long int, unsigned long int, long long int, unsigned long long int +---- + a@ Outputs the value as a stream of characters. + +a@ +[source] +---- +float, double, half +---- + a@ Outputs the value according to the precision of the current statement as a stream of characters. + +a@ +[source] +---- +char *, const char * +---- + a@ Outputs the string. + +a@ +[source] +---- +T *, const T *, multi_ptr +---- + a@ Outputs the address of the pointer as a stream of characters. + +a@ +[source] +---- +vec +---- + a@ Outputs the value of each component of the vector as a stream of characters. + +a@ +[source] +---- +id, range, item, nd_item, group, nd_range, h_item +---- + a@ Outputs the value of each component of each id or range as a stream of characters. + +|==== + + + +[[table.manipulators.stream]] +.Manipulators supported by the [code]#stream# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Stream manipulator @ Description +a@ +[source] +---- +flush +---- + a@ Triggers a flush operation, which synchronizes the work item stream buffer + with the global stream buffer, and then empties the work item stream + buffer. After a flush, the full [code]#workItemBufferSize# is + available again for subsequent streaming within the work item. + +a@ +[source] +---- +endl +---- + a@ Outputs a new-line character and then triggers a flush operation. + +a@ +[source] +---- +dec +---- + a@ Outputs any subsequent values in the current statement in decimal base. + +a@ +[source] +---- +hex +---- + a@ Outputs any subsequent values in the current statement in hexadecimal base. + +a@ +[source] +---- +oct +---- + a@ Outputs any subsequent values in the current statement in octal base. + +a@ +[source] +---- +noshowbase +---- + a@ Outputs any subsequent values without the base prefix. + +a@ +[source] +---- +showbase +---- + a@ Outputs any subsequent values with the base prefix. + +a@ +[source] +---- +noshowpos +---- + a@ Outputs any subsequent values without a plus sign if the value is positive. + +a@ +[source] +---- +showpos +---- + a@ Outputs any subsequent values with a plus sign if the value is positive. + +a@ +[source] +---- +setw(int) +---- + a@ Sets the field width of any subsequent values in the current statement. + +a@ +[source] +---- +setprecision(int) +---- + a@ Sets the precision of any subsequent values in the current statement. + +a@ +[source] +---- +fixed +---- + a@ Outputs any subsequent floating-point values in the current statement in fixed notation. + +a@ +[source] +---- +scientific +---- + a@ Outputs any subsequent floating-point values in the current statement in scientific notation. + +a@ +[source] +---- +hexfloat +---- + a@ Outputs any subsequent floating-point values in the current statement in hexadecimal notation. + +a@ +[source] +---- +defaultfloat +---- + a@ Outputs any subsequent floating-point values in the current statement in the default notation. + +|==== + + + +[[table.constructors.stream]] +.Constructors of the [code]#stream# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Constructor @ Description +a@ +[source] +---- +stream(size_t totalBufferSize, + size_t workItemBufferSize, + handler& cgh, + const property_list &propList = {}) +---- + a@ Constructs a SYCL [code]#stream# instance associated with the command group + specified by [code]#cgh#, with a maximum buffer size in bytes per kernel + invocation specified by the parameter [code]#totalBufferSize#, and a maximum + stream size that can be buffered by a work item between stream flushes + specified by the parameter [code]#workItemBufferSize#. + Zero or more properties can be provided to the constructed SYCL + [code]#stream# via an instance of [code]#property_list#. + +|==== + + + +[[table.members.stream]] +.Member functions of the [code]#stream# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +size_t size() const noexcept +---- + a@ Returns the total buffer size, in bytes. +a@ +[source] +---- +size_t get_size() const +---- + a@ Returns the same value as [code]#size()#. Deprecated. +a@ +[source] +---- +size_t get_work_item_buffer_size() const +---- + a@ Returns the buffer size per work item, in bytes. + +a@ +[source] +---- +size_t get_max_statement_size() const +---- + a@ Deprecated query with same functionality as [code]#get_work_item_buffer_size()#. + +|==== + + + +[[table.globals.stream]] +.Global functions of the [code]#stream# class +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Global function @ Description +a@ +[source] +---- +template const stream& operator<<(const stream& os, const T &rhs) +---- + a@ Outputs any valid values (see <>) as a stream of characters and applies any valid manipulator (see <>) to the current stream. + +|==== + + + +=== Synchronization + +An instance of the SYCL [code]#stream# class is required to synchronize with the host, and must output +everything that is streamed to it via the [code]#operator<<()# operator before a flush operation (that +doesn't exceed the [code]#workItemBufferSize# or [code]#totalBufferSize# limits) within a SYCL +kernel function by the time that the event associated with a command group submission enters the completed +state. The point at which this synchronization occurs and the member function by which this synchronization is +performed are implementation-defined. For example it is valid for an implementation to use +[code]#printf()#. + +The SYCL [code]#stream# class is required to output the content of each stream, between flushes (up to +[code]#workItemBufferSize)#, without mixing with content from the same stream in other work items. +There are no other output order guarantees between work items or between streams. The stream flush +operation therefore delimits the unit of output that is guaranteed to be displayed without mixing with +other work items, with respect to a single stream. + + +=== Implicit flush + +There is guaranteed to be an implicit flush of each stream used by a +kernel, at the end of kernel execution, from the perspective of each +work item. There is also an implicit flush when the endl stream +manipulator is executed. No other implicit flushes are permitted in +an implementation. + + +=== Performance note + +The usage of the [code]#stream# class is designed for debugging purposes and is therefore not recommended for performance critical applications. + +// \input{builtin_functions} + +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% begin builtin_functions %%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +[[sycl:builtins]] +== SYCL built-in functions for SYCL host and device + +// Intentional OpenCL reference +SYCL kernels may execute on any SYCL device, which requires the functions +used in the kernels to be compiled and linked for both device and host. In +the SYCL programming model, the built-ins are available for the entire SYCL +application within the [code]#sycl# namespace, although their semantics +may be different. This section follows the OpenCL 1.2 specification document +<> - except that for SYCL, all functions are located +within the [code]#sycl# namespace - and describes the behavior of these +functions for SYCL host and device. The expected precision and any other +semantic requirements are defined in the backend specification. + +The SYCL built-in functions are available throughout the SYCL application, +and depending on where they execute, they are either implemented using their +host implementation or the device implementation. The SYCL system guarantees +that all of the built-in functions fulfill the same requirements for both +host and device. + + +=== Description of the built-in types available for SYCL host and device + +All of the OpenCL built-in types are available in the namespace +[code]#sycl#. For the purposes of this document we use +generic type names for describing sets of valid SYCL types. The +generic type names themselves are not valid SYCL types, but they +represent a set of valid types, as defined in +<>. Each generic type within a section is +comprised of a combination of scalar, SYCL [code]#vec# and/or [code]#marray# class +specializations. The letters [code]#{n}# and [code]#{N}# define valid sizes for +class specializations, where [code]#{n}# means 2,3,4,8,16 and [code]#{N}# means +any positive value of size_t type. Note that any reference to the base type +refers to the type of a scalar or the element type of a SYCL [code]#vec# or +[code]#marray# specialization. + + + +[[table.gentypes]] +.Generic type name description, which serves as a description for all valid types of <>. +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Generic type name @ Description +a@ +[source] +---- +floatn +---- + a@ [code]#float{n}#, [code]#mfloat{n}#, [code]#marray<{N},float># + +a@ +[source] +---- +genfloatf +---- + a@ [code]#float#, [code]#floatn# + +a@ +[source] +---- +doublen +---- + a@ [code]#double{n}#, [code]#mdouble{n}#, [code]#marray<{N},double># + +a@ +[source] +---- +genfloatd +---- + a@ [code]#double#, [code]#doublen# + +a@ +[source] +---- +halfn +---- + a@ [code]#half{n}#, [code]#mhalf{n}#, [code]#marray<{N},half># + +a@ +[source] +---- +genfloath +---- + a@ [code]#half#, [code]#halfn# + +a@ +[source] +---- +genfloat +---- + a@ [code]#genfloatf#, [code]#genfloatd#, [code]#genfloath# + +a@ +[source] +---- +sgenfloat +---- + a@ [code]#float#, [code]#double#, [code]#half# + +a@ +[source] +---- +gengeofloat +---- + a@ [code]#float#, [code]#float2#, [code]#float3#, [code]#float4#, [code]#mfloat2#, + [code]#mfloat3#, [code]#mfloat4# + +a@ +[source] +---- +gengeodouble +---- + a@ [code]#double#, [code]#double2#, [code]#double3#, [code]#double4#, [code]#mdouble2#, + [code]#mdouble3#, [code]#mdouble4# + +a@ +[source] +---- +charn +---- + a@ [code]#char{n}#, [code]#mchar{n}#, [code]#marray<{N},char># + +a@ +[source] +---- +scharn +---- + a@ [code]#schar{n}#, [code]#mschar{n}#, [code]#marray<{N},signed char># + +a@ +[source] +---- +ucharn +---- + a@ [code]#uchar{n}#, [code]#muchar{n}#, [code]#marray<{N},unsigned char># + +a@ +[source] +---- +igenchar +---- + a@ [code]#signed# char, [code]#scharn# + +a@ +[source] +---- +ugenchar +---- + a@ [code]#unsigned# char, [code]#ucharn# + +a@ +[source] +---- +genchar +---- + a@ [code]#char#, [code]#charn#, [code]#igenchar#, [code]#ugenchar# + +a@ +[source] +---- +shortn +---- + a@ [code]#short{n}#, [code]#mshort{n}#, [code]#marray<{N},short># + +a@ +[source] +---- +genshort +---- + a@ [code]#short#, [code]#shortn# + +a@ +[source] +---- +ushortn +---- + a@ [code]#ushort{n}#, [code]#mushort{n}#, [code]#marray<{N},unsigned short># + +a@ +[source] +---- +ugenshort +---- + a@ [code]#unsigned# short, [code]#ushortn# + +a@ +[source] +---- +uintn +---- + a@ [code]#uint{n}#, [code]#muint{n}#, [code]#marray<{N},unsigned int># + +a@ +[source] +---- +ugenint +---- + a@ [code]#unsigned# int, [code]#uintn# + +a@ +[source] +---- +intn +---- + a@ [code]#int{n}#, [code]#mint{n}#, [code]#marray<{N},int># + +a@ +[source] +---- +genint +---- + a@ [code]#int#, [code]#intn# + +a@ +[source] +---- +ulongn +---- + a@ [code]#ulong{n}#, [code]#mulong{n}#, [code]#marray<{N},unsigned long int># + +a@ +[source] +---- +ugenlong +---- + a@ [code]#unsigned# long int, [code]#ulongn# + +a@ +[source] +---- +longn +---- + a@ [code]#long{n}#, [code]#mlong{n}#, [code]#marray<{N},long int># + +a@ +[source] +---- +genlong +---- + a@ [code]#long# int, [code]#longn# + +a@ +[source] +---- +ulonglongn +---- + a@ [code]#ulonglong{n}#, [code]#mulonglong{n}#, [code]#marray<{N},unsigned long long + int># + +a@ +[source] +---- +ugenlonglong +---- + a@ [code]#unsigned# long long int, [code]#ulonglongn# + +a@ +[source] +---- +longlongn +---- + a@ [code]#longlong{n}#, [code]#mlonglong{n}#, [code]#marray<{N},long long int># + +a@ +[source] +---- +genlonglong +---- + a@ [code]#long# long int, [code]#longlongn# + +a@ +[source] +---- +igenlonginteger +---- + a@ [code]#genlong#, [code]#genlonglong# + +a@ +[source] +---- +ugenlonginteger +---- + a@ [code]#ugenlong#, [code]#ugenlonglong# + +a@ +[source] +---- +geninteger +---- + a@ [code]#genchar#, [code]#genshort#, [code]#ugenshort#, [code]#genint#, [code]#ugenint#, + [code]#igenlonginteger#, [code]#ugenlonginteger# + +a@ +[source] +---- +genintegerNbit +---- + a@ [code]#All# types within geninteger whose base type are _N_ bits in size, + where _N_ = 8, 16, 32, 64. + +a@ +[source] +---- +igeninteger +---- + a@ [code]#igenchar#, [code]#genshort#, [code]#genint#, [code]#igenlonginteger# + +a@ +[source] +---- +igenintegerNbit +---- + a@ [code]#All# types within igeninteger whose base type are _N_ bits in size, + where _N_ = 8, 16, 32, 64. + +a@ +[source] +---- +ugeninteger +---- + a@ [code]#ugenchar#, [code]#ugenshort#, [code]#ugenint#, [code]#ugenlonginteger# + +a@ +[source] +---- +ugenintegerNbit +---- + a@ [code]#All# types within ugeninteger whose base type are _N_ bits in size, + where _N_ = 8, 16, 32, 64. + +a@ +[source] +---- +sgeninteger +---- + a@ [code]#char#, [code]#signed# char, [code]#unsigned# char, [code]#short#, [code]#unsigned# + short, [code]#int#, [code]#unsigned# int, [code]#long# int, [code]#unsigned# long int, + [code]#long# long int, [code]#unsigned# long long int + +a@ +[source] +---- +gentype +---- + a@ [code]#genfloat#, [code]#geninteger# + +a@ +[source] +---- +genfloatptr +---- + a@ All permutations of [code]#multi_ptr# where [code]#dataT# is all types within [code]#genfloat#, + [code]#addressSpace# is [code]#access::address_space::global_space#, + [code]#access::address_space::local_space# and + [code]#access::address_space::private_space# and [code]#IsDecorated# is + [code]#access::decorated::yes# and [code]#access::decorated::no#. + +a@ +[source] +---- +genintptr +---- + a@ All permutations of [code]#multi_ptr# where [code]#dataT# is all types within [code]#genint#, + [code]#addressSpace# is [code]#access::address_space::global_space#, + [code]#access::address_space::local_space# and + [code]#access::address_space::private_space# and [code]#IsDecorated# is + [code]#access::decorated::yes# and [code]#access::decorated::no#. + +a@ +[source] +---- +booln +---- + a@ [code]#marray<{N},bool># + +a@ +[source] +---- +genbool +---- + a@ [code]#bool#, [code]#booln# + +|==== + + + +[[sec:function-objects]] +=== Function objects + +SYCL provides a number of function objects in the [code]#sycl# namespace +on host and device. All function objects obey {cpp} conversion and promotion +rules. Each function object is additionally specialized for [code]#void# +as a _transparent_ function object that deduces its parameter types +and return type. + +[source,,linenums] +---- +include::{header_dir}/functional.h[lines=4..-1] +---- + +[[table.function.objects.plus]] +.Member functions for the [code]#plus# function object +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +T operator()(const T& x, const T& y) const +---- + a@ Returns the sum of its arguments, equivalent to [code]#pass:[x + y]#. + +|==== + +[[table.function.objects.multiplies]] +.Member functions for the [code]#multiplies# function object +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +T operator()(const T& x, const T& y) const +---- + a@ Returns the product of its arguments, equivalent to [code]#x * y#. + +|==== + +[[table.function.objects.bit-and]] +.Member functions for the [code]#bit_and# function object +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +T operator()(const T& x, const T& y) const +---- + a@ Returns the bitwise AND of its arguments, equivalent to [code]#x & y#. + +|==== + +[[table.function.objects.bit-or]] +.Member functions for the [code]#bit_or# function object +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +T operator()(const T& x, const T& y) const +---- + a@ Returns the bitwise OR of its arguments, equivalent to [code]#x | y#. + +|==== + +[[table.function.objects.bit-xor]] +.Member functions for the [code]#bit_xor# function object +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +T operator()(const T& x, const T& y) const +---- + a@ Returns the bitwise XOR of its arguments, equivalent to [code]#x ^ y#. + +|==== + +[[table.function.objects.logical-and]] +.Member functions for the [code]#logical_and# function object +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +T operator()(const T& x, const T& y) const +---- + a@ Returns the logical AND of its arguments, equivalent to [code]#x && y#. + +|==== + +[[table.function.objects.logical-or]] +.Member functions for the [code]#logical_or# function object +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +T operator()(const T& x, const T& y) const +---- + a@ Returns the logical OR of its arguments, equivalent to [code]#x || y#. + +|==== + +[[table.function.objects.minimum]] +.Member functions for the [code]#minimum# function object +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +T operator()(const T& x, const T& y) const +---- + a@ Applies [code]#std::less# to its arguments, in the same order, then + returns the lesser argument unchanged. + +|==== + +[[table.function.objects.maximum]] +.Member functions for the [code]#maximum# function object +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Member function @ Description +a@ +[source] +---- +T operator()(const T& x, const T& y) const +---- + a@ Applies [code]#std::greater# to its arguments, in the same order, then + returns the greater argument unchanged. + +|==== + +[[sec:group-functions]] +=== Group functions + +SYCL provides a number of functions that expose functionality tied to groups of +work-items (such as <> and collective operations). +These group functions act as synchronization points and must be encountered in +converged <> by all work-items in the group. If one work-item in +a group calls a group function, then all work-items in that group must call +exactly the same function under the same set of conditions --- calling the same +function under different conditions (e.g. in different iterations of a loop, or +different branches of a conditional statement) results in undefined behavior. +Additionally, restrictions may be placed on the arguments passed to each +function in order to ensure that all work-items in the group agree on the +operation that is being performed. Any such restrictions on the arguments +passed to a function are defined within the descriptions of those functions. +Violating these restrictions results in undefined behavior. + +All group functions are supported for the fundamental scalar types supported by +SYCL (see <>) and instances of the SYCL +[code]#vec# and [code]#marray# classes. + +Using a group function inside of a kernel may introduce additional +limits on the resources available to user code inside the same kernel. The +behavior of these limits is implementation-defined, but must be reflected by +calls to kernel querying functions (such as +[code]#kernel_bundle::get_kernel_info)# as described in <>. + +It is undefined behavior for any group function to be invoked within a +[code]#parallel_for_work_group# or [code]#parallel_for_work_item# +context. + +==== Group type trait + +[source,,linenums] +---- +include::{header_dir}/algorithms/is_group.h[lines=4..-1] +---- + +The [code]#is_group# type trait is used to determine which types of groups are +supported by group functions, and to control when group functions participate +in overload resolution. + +[code]#is_group# is [code]#std::true_type# if [code]#T# is the type of a +standard SYCL group ([code]#group# or [code]#sub_group#) and +[code]#std::false_type# otherwise. A SYCL implementation may introduce +additional specializations of [code]#is_group# for implementation-defined +group types, if the interface of those types supports all member functions and +static members common to the [code]#group# and [code]#sub_group# classes. + +==== [code]#group_broadcast# + +The [code]#group_broadcast# function communicates a value held by one +work-item to all other work-items in the group. + +[source,,linenums] +---- +include::{header_dir}/groups/broadcast.h[lines=4..-1] +---- + + . _Constraints:_ Available only if + [code]#sycl::is_group_v># is true. ++ +-- +_Returns:_ The value of [code]#x# from the work-item with the smallest linear +id within the group. +-- + + . _Constraints:_ Available only if + [code]#sycl::is_group_v># is true. ++ +-- +_Preconditions:_ [code]#local_linear_id# must be the same for all work-items in +the group. + +_Returns:_ The value of [code]#x# from the work-item with the specified linear +id within the group. +-- + + . _Constraints:_ Available only if + [code]#sycl::is_group_v># is true. ++ +-- +_Preconditions:_ [code]#local_id# must be the same for all work-items in the +group, and its dimensionality must match the dimensionality of the group. + +_Returns:_ The value of [code]#x# from the work-item with the specified id +within the group. +-- + +==== [code]#group_barrier# + +The [code]#group_barrier# function synchronizes all work-items in a group, +using a <>. + +[source,,linenums] +---- +include::{header_dir}/groups/barrier.h[lines=4..-1] +---- + + . _Constraints:_ Available only if + [code]#sycl::is_group_v># is true. ++ +-- +_Effects:_ Synchronizes all work-items in the group. The current work-item will +wait at the barrier until all work-items in the group have reached the barrier. +In addition, the barrier performs <> operations ensuring that +memory accesses issued before the barrier are not re-ordered with those issued +after the barrier: all work-items in the group execute a release fence prior to +synchronizing at the barrier, all work-items in the group execute an +acquire fence afterwards, and there is an implicit synchronization of these +fences as if provided by an explicit atomic operation on an atomic object. + +By default, the scope of these fences is set to the narrowest +scope including all work-items in the group (as reported by +[code]#Group::fence_scope#). This scope may be optionally overridden +with a broader scope, specified by the [code]#fence_scope# argument. +-- + +[[sec:algorithms]] +=== Group algorithms library + +SYCL provides an algorithms library based on the functions described +in Section 28 of the {cpp17} specification. The first argument to each function +is a <>, and data ranges can be described using pointers, iterators or +instances of the [code]#multi_ptr# class. The functions defined in this +section are free functions available in the [code]#sycl# namespace. + +Any restrictions from the standard algorithms library apply. Some of the +functions in the SYCL algorithms library introduce additional restrictions +in order to maximize portability across different devices and to minimize +the chances of encountering unexpected behavior. + +All algorithms are supported for the fundamental scalar types supported by SYCL +(see <>) and instances of the SYCL +[code]#vec# and [code]#marray# classes. + +The <> argument to a SYCL algorithm denotes that it should be performed +collaboratively by the work-items in the specified group. All algorithms +act as group functions (as defined in <>), inheriting all +restrictions of group functions. Unless the description of a function says +otherwise, how the elements of a range are processed by the work-items in a +group is undefined. + +SYCL provides separate functions for algorithms which use the work-items in a +group to execute an operation over a range of iterators and algorithms which +are applied to data held directly by the work-items in a group. An example +of the usage of these functions is given below: + +[[listing.group.algorithms]] +.Using the group algorithms library to perform a work-group reduce +[source,,linenums] +---- +include::{code_dir}/algorithms.cpp[lines=4..-1] +---- + +==== [code]#any_of#, [code]#all_of# and [code]#none_of# + +The [code]#any_of#, [code]#all_of# and [code]#none_of# functions from standard +{cpp} test whether Boolean conditions hold for any of, all of or none of the +values in a range, respectively. + +SYCL provides two sets of similar algorithms: + +. [code]#joint_any_of#, [code]#joint_all_of# and [code]#joint_none_of# use the +work-items in a group to execute the corresponding algorithm in parallel. + +. [code]#any_of_group#, [code]#all_of_group# and [code]#none_of_group# test +Boolean conditions applied to data held directly by the work-items in a group. + +[source,,linenums] +---- +include::{header_dir}/algorithms/any_of.h[lines=4..-1] +---- + + . _Constraints:_ Available only if + [code]#sycl::is_group_v># is true. ++ +-- +_Preconditions:_ [code]#first# and [code]#last# must be the same for all +work-items in the group, and [code]#pred# must be an immutable callable with +the same type and state for all work-items in the group. + +_Returns:_ true if [code]#pred# returns true when applied to the result of +dereferencing any iterator in the range [code]#[first, last)#. +-- + + . _Constraints:_ Available only if + [code]#sycl::is_group_v># is true. ++ +-- +_Preconditions:_ [code]#pred# must be an immutable callable with the same type +and state for all work-items in the group. + +_Returns:_ true if [code]#pred(x)# returns true for any work-item in the group. +-- + + . _Constraints:_ Available only if + [code]#sycl::is_group_v># is true. ++ +-- +_Returns:_ true if [code]#pred# is true for any work-item in the group. +-- + +[source,,linenums] +---- +include::{header_dir}/algorithms/all_of.h[lines=4..-1] +---- + + . _Constraints:_ Available only if + [code]#sycl::is_group_v># is true. ++ +-- +_Preconditions:_ [code]#first# and [code]#last# must be the same for all +work-items in the group, and [code]#pred# must be an immutable callable with +the same type and state for all work-items in the group. + +_Returns:_ true if [code]#pred# returns true when applied to the result of +dereferencing all iterators in the range [code]#[first, last)#. +-- + + . _Constraints:_ Available only if + [code]#sycl::is_group_v># is true. ++ +-- +_Preconditions:_ [code]#pred# must be an immutable callable with the same type +and state for all work-items in the group. + +_Returns:_ true if [code]#pred(x)# returns true for all work-items in the group. +-- + + . _Constraints:_ Available only if + [code]#sycl::is_group_v># is true. ++ +-- +_Returns:_ true if [code]#pred# is true for all work-items in the group. +-- + +[source,,linenums] +---- +include::{header_dir}/algorithms/none_of.h[lines=4..-1] +---- + + . _Constraints:_ Available only if + [code]#sycl::is_group_v># is true. ++ +-- +_Preconditions:_ [code]#first# and [code]#last# must be the same for all +work-items in the group, and [code]#pred# must be an immutable callable with +the same type and state for all work-items in the group. + +_Returns:_ true if [code]#pred# returns false when applied to the result of +dereferencing all iterators in the range [code]#[first, last)#. +-- + + . _Constraints:_ Available only if + [code]#sycl::is_group_v># is true. ++ +-- +_Preconditions:_ [code]#pred# must be an immutable callable with the same type +and state for all work-items in the group. + +_Returns:_ true if [code]#pred(x)# returns false for all work-items in the group. +-- + + . _Constraints:_ Available only if + [code]#sycl::is_group_v># is true. ++ +-- +_Returns:_ true if [code]#pred# is false for all work-items in the group. +-- + +==== [code]#shift_left# and [code]#shift_right# + +The [code]#shift_left# and [code]#shift_right# functions from standard {cpp} +move values in a range down (to the left) or up (to the right) respectively. + +SYCL provides similar algorithms compatible with the [code]#sub_group# class: + +. [code]#shift_group_left# and [code]#shift_group_right# move values held by +the work-items in a group directly to another work-item in the group, by +shifting values a fixed number of work-items to the left or right. + +[source,,linenums] +---- +include::{header_dir}/algorithms/shift.h[lines=4..-1] +---- + + . _Constraints:_ Available only if + [code]#std::is_same_v, sub_group># is true. ++ +-- +_Preconditions:_ [code]#delta# must be the same for all work-items in the +group. [code]#T# must be a trivially copyable type. + +_Returns:_ the value of [code]#x# from the work-item whose group local id +([code]#id#) is [code]#delta# larger than that of the calling work-item. +[code]#pass:[id + delta]# may be greater than or equal to the group's linear +size, but the value returned in this case is unspecified. +-- + + . _Constraints:_ Available only if + [code]#std::is_same_v, sub_group># is true. ++ +-- +_Preconditions:_ [code]#delta# must be the same for all work-items in the +group. [code]#T# must be a trivially copyable type. + +_Returns:_ the value of [code]#x# from the work-item whose group local id +([code]#id#) is [code]#delta# smaller than that of the calling work-item. +[code]#id - delta# may be greater than or equal to the group's linear size, but +the value returned in this case is unspecified. +-- + +==== [code]#permute# + +SYCL provides an algorithm to permute the values held by work-items in a +sub-group: + +. [code]#permute_group_by_xor# permutes values by exchanging values held by pairs +of work-items identified by computing the bitwise exclusive OR of the work-item +id and some fixed mask. + +[source,,linenums] +---- +include::{header_dir}/algorithms/permute.h[lines=4..-1] +---- + + . _Constraints:_ Available only if + [code]#std::is_same_v, sub_group># is true. ++ +-- +_Preconditions:_ [code]#mask# must be the same for all work-items in the +group. [code]#T# must be a trivially copyable type. + +_Returns:_ the value of [code]#x# from the work-item whose group local id +is equal to the bitwise exclusive OR of the calling work-item's group local id +and [code]#mask#. The result of the exclusive OR may be greater than or equal to +the group's linear size, but the value returned in this case is unspecified. +-- + +==== [code]#select# + +SYCL provides an algorithm to directly exchange the values held by work-items in +a sub-group: + +. [code]#select_from_group# allows work-items to obtain a copy of a value held +by any other work-item in the group. + +[source,,linenums] +---- +include::{header_dir}/algorithms/select.h[lines=4..-1] +---- + + . _Constraints:_ Available only if + [code]#std::is_same_v, sub_group># is true. ++ +-- +_Preconditions:_ [code]#T# must be a trivially copyable type. + +_Returns:_ the value of [code]#x# from the work-item with the group local id +specified by [code]#remote_local_id#. The value of [code]#remote_local_id# may +be outside of the group, but the value returned in this case is unspecified. +-- + +==== [code]#reduce# + +The [code]#reduce# function from standard {cpp} combines the values in a range in +an unspecified order using a binary operator. + +SYCL provides two similar algorithms that compute the same generalized sum as +defined by standard {cpp}: + +. [code]#joint_reduce# uses the work-items in a group to execute a +[code]#reduce# operation in parallel. + +. [code]#reduce_over_group# combines values held directly by the work-items in +a group. + +The result of a call to these functions is non-deterministic if the binary +operator is not commutative and associative. Only the binary operators defined +in <> are supported by the [code]#reduce# functions in +SYCL 2020, but the standard {cpp} syntax is used for forward compatibility with +future SYCL versions. + +[source,,linenums] +---- +include::{header_dir}/algorithms/reduce.h[lines=4..-1] +---- + + . _Constraints:_ Available only if + [code]#sycl::is_group_v># is true, [code]#Ptr# is a + pointer to a fundamental type, and [code]#BinaryOperation# is a SYCL + function object type. ++ +-- +_Mandates:_ [code]#binary_op(*first, *first)# must return a value of type +[code]#std::iterator_traits::value_type#. + +_Preconditions:_ [code]#first#, [code]#last# and the type of [code]#binary_op# +must be the same for all work-items in the group. [code]#binary_op# must be an +instance of a SYCL function object. + +_Returns:_ The result of combining the values resulting from dereferencing all +iterators in the range [code]#[first, last)# using the operator +[code]#binary_op#, where the values are combined according to the generalized +sum defined in standard {cpp}. +-- + + . _Constraints:_ Available only if + [code]#sycl::is_group_v># is true, [code]#Ptr# is a + pointer to a fundamental type, [code]#T# is a fundamental type, and + [code]#BinaryOperation# is a SYCL function object type. ++ +-- +_Mandates:_ [code]#binary_op(init, *first)# must return a value of type +[code]#T#. + +_Preconditions:_ [code]#first#, [code]#last#, [code]#init# and the type of +[code]#binary_op# must be the same for all work-items in the group. +[code]#binary_op# must be an instance of a SYCL function object. + +_Returns:_ The result of combining the values resulting from dereferencing all +iterators in the range [code]#[first, last)# and the initial value +[code]#init# using the operator [code]#binary_op#, where the values are combined +according to the generalized sum defined in standard {cpp}. +-- + + . _Constraints:_ Available only if + [code]#sycl::is_group_v># is true, [code]#T# is a + fundamental type and [code]#BinaryOperation# is a SYCL function object + type. ++ +-- +_Mandates:_ [code]#binary_op(x, x)# must return a value of type [code]#T#. + +_Preconditions:_ [code]#binary_op# must be an instance of a SYCL function +object. + +_Returns:_ The result of combining all the values of [code]#x# specified by +each work-item in the group using the operator [code]#binary_op#, where the +values are combined according to the generalized sum defined in standard {cpp}. +-- + + . _Constraints:_ Available only if + [code]#sycl::is_group_v># is true, [code]#V# and + [code]#X# are fundamental types, and [code]#BinaryOperation# is a SYCL + function object type. ++ +-- +_Mandates:_ [code]#binary_op(init, x)# must return a value of type [code]#T#. + +_Preconditions:_ [code]#binary_op# must be an instance of a SYCL function +object. + +_Returns:_ The result of combining all the values of [code]#x# specified by +each work-item in the group and the initial value [code]#init# using the +operator [code]#binary_op#, where the values are combined according to the +generalized sum defined in standard {cpp}. +-- + +==== [code]#exclusive_scan# and [code]#inclusive_scan# + +The [code]#exclusive_scan# and [code]#inclusive_scan# functions in standard +{cpp} compute a prefix sum using a binary operator. For a scan of elements +_[x~0~, {ldots}, x~n~]_, the _i_ th result in an exclusive scan is the +generalized noncommutative sum of all elements preceding _x~i~_ (excluding +_x~i~_ itself), whereas the _i_ th result in an inclusive scan is the +generalized noncommutative sum of all elements preceding _x~i~_ (including +_x~i~_ itself). + +SYCL provides two similar sets of algorithms that compute the same prefix sums +using the generalized noncommutative sum as defined by standard {cpp}: + +. [code]#joint_exclusive_scan# and [code]#joint_inclusive_scan# use the +work-items in a group to execute the corresponding algorithm in parallel, and +intermediate partial prefix sums are written to memory as in standard {cpp}. + +. [code]#exclusive_scan_over_group# and [code]#inclusive_scan_over_group# +perform a scan over values held directly by the work-items in a group, and the +result returned to each work-item represents a partial prefix sum. + +The result of a call to a scan is non-deterministic if the binary operator is not +associative. Only the binary operators defined in <> are +supported by the scan functions in SYCL 2020, but the standard {cpp} syntax is +used for forward compatibility with future SYCL versions. + +[source,,linenums] +---- +include::{header_dir}/algorithms/exclusive_scan.h[lines=4..-1] +---- + + . _Constraints:_ Available only if + [code]#sycl::is_group_v># is true, [code]#InPtr# and + [code]#OutPtr# are pointers to fundamental types, and + [code]#BinaryOperation# is a SYCL function object type. ++ +-- +_Mandates:_ [code]#binary_op(*first, *first)# must return a value of type +[code]#std::iterator_traits::value_type#. + +_Preconditions:_ [code]#first#, [code]#last#, [code]#result# and the type of +[code]#binary_op# must be the same for all work-items in the group. +[code]#binary_op# must be an instance of a SYCL function object. + +_Effects:_ The value written to [code]#result# + _i_ is the exclusive scan of +the values resulting from dereferencing the first _i_ values in the range +[code]#[first, last)# and the identity value of [code]#binary_op#, using +the operator [code]#binary_op#. The scan is computed using a generalized +noncommutative sum as defined in standard {cpp}. + +_Returns:_ A pointer to the end of the output range. +-- + + . _Constraints:_ Available only if + [code]#sycl::is_group_v># is true, [code]#InPtr# and + [code]#OutPtr# are pointers to fundamental types, [code]#T# is a + fundamental type, and [code]#BinaryOperation# is a SYCL function object + type. ++ +-- +_Mandates:_ [code]#binary_op(init, *first)# must return a value of type +[code]#T#. + +_Preconditions:_ [code]#first#, [code]#last#, [code]#result#, [code]#init# and the +type of [code]#binary_op# must be the same for all work-items in the group. +[code]#binary_op# must be an instance of a SYCL function object. + +_Effects:_ The value written to [code]#result# + _i_ is the exclusive scan of +the values resulting from dereferencing the first _i_ values in the range +[code]#[first, last)# and an initial value specified by [code]#init#, using +the operator [code]#binary_op#. The scan is computed using a generalized +noncommutative sum as defined in standard {cpp}. + +_Returns:_ A pointer to the end of the output range. +-- + + . _Constraints:_ Available only if + [code]#sycl::is_group_v># is true, [code]#T# is a + fundamental type, and [code]#BinaryOperation# is a SYCL function object + type. ++ +-- +_Mandates:_ [code]#binary_op(x, x)# must return a value of type [code]#T#. + +_Preconditions:_ [code]#binary_op# must be an instance of a SYCL function +object. + +_Returns:_ The value returned on work-item _i_ is the exclusive scan of +the first _i_ values in the group and the identity value of [code]#binary_op#, +using the operator [code]#binary_op#. The scan is computed using a generalized +noncommutative sum as defined in standard {cpp}. For multi-dimensional groups, +the order of work-items in the group is determined by their linear id. +-- + + . _Constraints:_ Available only if + [code]#sycl::is_group_v># is true, [code]#V# and + [code]#T# are fundamental types, and [code]#BinaryOperation# is a SYCL + function object type. ++ +-- +_Mandates:_ [code]#binary_op(init, x)# must return a value of type [code]#T#. + +_Preconditions:_ [code]#binary_op# must be an instance of a SYCL function +object. + +_Returns:_ The value returned on work-item _i_ is the exclusive scan of +the first _i_ values in the group and an initial value specified by +[code]#init#, using the operator [code]#binary_op#. The scan is computed using +a generalized noncommutative sum as defined in standard {cpp}. For +multi-dimensional groups, the order of work-items in the group is determined by +their linear id. +-- + +[source,,linenums] +---- +include::{header_dir}/algorithms/inclusive_scan.h[lines=4..-1] +---- + + . _Constraints:_ Available only if + [code]#sycl::is_group_v># is true, [code]#InPtr# and + [code]#OutPtr# are pointers to fundamental types, and + [code]#BinaryOperation# is a SYCL function object type. ++ +-- +_Mandates:_ [code]#binary_op(*first, *first)# must return a value of type +[code]#std::iterator_traits::value_type#. + +_Preconditions:_ [code]#first#, [code]#last#, [code]#result# and the type of +[code]#binary_op# must be the same for all work-items in the group. +[code]#binary_op# must be an instance of a SYCL function object. + +_Effects:_ The value written to [code]#result# + _i_ is the inclusive scan of +the values resulting from dereferencing the first _i_ values in the range +[code]#[first, last)# and the identity value of [code]#binary_op#, +using the operator [code]#binary_op#. The scan is computed using a generalized +noncommutative sum as defined in standard {cpp}. + +_Returns:_ A pointer to the end of the output range. +-- + + . _Constraints:_ Available only if + [code]#sycl::is_group_v># is true, [code]#InPtr# and + [code]#OutPtr# are pointers to fundamental types, [code]#BinaryOperation# + is a SYCL function object type, and [code]#T# is a fundamental type. ++ +-- +_Mandates:_ [code]#binary_op(init, *first)# must return a value of type +[code]#T#. + +_Preconditions:_ [code]#first#, [code]#last#, [code]#result#, [code]#init# and the +type of [code]#binary_op# must be the same for all work-items in the group. +[code]#binary_op# must be an instance of a SYCL function object. + +_Effects:_ The value written to [code]#result# + _i_ is the inclusive scan of +the values resulting from dereferencing the first _i_ values in the range +[code]#[first, last)# and an initial value specified by +[code]#init#, using the operator [code]#binary_op#. The scan is computed using +a generalized noncommutative sum as defined in standard {cpp}. + +_Returns:_ A pointer to the end of the output range. +-- + + . _Constraints:_ Available only if + [code]#sycl::is_group_v># is true, [code]#T# is a + fundamental type, and [code]#BinaryOperation# is a SYCL function object + type. ++ +-- +_Mandates:_ [code]#binary_op(x, x)# must return a value of type [code]#T#. + +_Preconditions:_ [code]#binary_op# must be an instance of a SYCL function +object. + +_Returns:_ The value returned on work-item _i_ is the inclusive scan of +the first _i_ values in the group and the identity value of [code]#binary_op#, +using the operator [code]#binary_op#. The scan is computed using a generalized +noncommutative sum as defined in standard {cpp}. For multi-dimensional groups, +the order of work-items in the group is determined by their linear id. +-- + + . _Constraints:_ Available only if + [code]#sycl::is_group_v># is true, [code]#V# is a + fundamental type, [code]#BinaryOperation# is a SYCL function object type, + and [code]#T# is a fundamental type. ++ +-- +_Mandates:_ [code]#binary_op(init, x)# must return a value of type [code]#T#. + +_Preconditions:_ [code]#binary_op# must be an instance of a SYCL function +object. + +_Returns:_ The value returned on work-item _i_ is the inclusive scan of +the first _i_ values in the group and an initial value specified by +[code]#init#, using the operator [code]#binary_op#. The scan is computed using +a generalized noncommutative sum as defined in standard {cpp}. For +multi-dimensional groups, the order of work-items in the group is determined by +their linear id. +-- + +=== Math functions + +In SYCL the OpenCL math functions are available in the namespace +[code]#sycl# on host and device with the same precision +guarantees as defined in the OpenCL 1.2 specification document +<> for host and device. For a SYCL platform the +numerical requirements for host need to match the numerical +requirements of the OpenCL math built-in functions. The built-in +functions can take as input float or optionally double and +their [code]#vec# and [code]#marray# counterparts, +for all supported dimensions including dimension 1. + +The built-in functions available for SYCL host and device, with the same +precision requirements for both host and device, are described in +<>. + + +[[table.math.functions]] +.Math functions which work on SYCL host and device. They correspond to <>. +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Math Function @ Description +a@ +[source] +---- +genfloat acos (genfloat x) +---- + a@ Inverse cosine function. + +a@ +[source] +---- +genfloat acosh (genfloat x) +---- + a@ Inverse hyperbolic cosine. + +a@ +[source] +---- +genfloat acospi (genfloat x) +---- + a@ Compute latexmath:[{\arccos(x)} \over \pi] + +a@ +[source] +---- +genfloat asin (genfloat x) +---- + a@ Inverse sine function. + +a@ +[source] +---- +genfloat asinh (genfloat x) +---- + a@ Inverse hyperbolic sine. + +a@ +[source] +---- +genfloat asinpi (genfloat x) +---- + a@ Compute latexmath:[{\arcsin(x)} \over \pi] + +a@ +[source] +---- +genfloat atan (genfloat y_over_x) +---- + a@ Inverse tangent function. + +a@ +[source] +---- +genfloat atan2 (genfloat y, genfloat x) +---- + a@ Compute latexmath:[\arctan({y \over x})]. + +a@ +[source] +---- +genfloat atanh (genfloat x) +---- + a@ Hyperbolic inverse tangent. + +a@ +[source] +---- +genfloat atanpi (genfloat x) +---- + a@ Compute latexmath:[{\arctan(x)} \over \pi]. + +a@ +[source] +---- +genfloat atan2pi (genfloat y, genfloat x) +---- + a@ Compute latexmath:[{\operatorname{atan2}(y,x)} \over \pi]. + +a@ +[source] +---- +genfloat cbrt (genfloat x) +---- + a@ Compute cube-root. + +a@ +[source] +---- +genfloat ceil (genfloat x) +---- + a@ Round to integral value using the round to positive infinity + rounding mode. + +a@ +[source] +---- +genfloat copysign (genfloat x, genfloat y) +---- + a@ Returns x with its sign changed to match + the sign of y. + +a@ +[source] +---- +genfloat cos (genfloat x) +---- + a@ Compute cosine. + +a@ +[source] +---- +genfloat cosh (genfloat x) +---- + a@ Compute hyperbolic cosine. + +a@ +[source] +---- +genfloat cospi (genfloat x) +---- + a@ Compute latexmath:[\cos (\pi x)]. + +a@ +[source] +---- +genfloat erfc (genfloat x) +---- + a@ Complementary error function. + +a@ +[source] +---- +genfloat erf (genfloat x) +---- + a@ Error function encountered in integrating the normal + distribution. + +a@ +[source] +---- +genfloat exp (genfloat x ) +---- + a@ Compute the base-_e_ exponential of x. + +a@ +[source] +---- +genfloat exp2 (genfloat x) +---- + a@ Exponential base 2 function. + +a@ +[source] +---- +genfloat exp10 (genfloat x) +---- + a@ Exponential base 10 function. + +a@ +[source] +---- +genfloat expm1 (genfloat x) +---- + a@ Compute latexmath:[e^x-1.0]. + +a@ +[source] +---- +genfloat fabs (genfloat x) +---- + a@ Compute absolute value of a floating-point number. + +a@ +[source] +---- +genfloat fdim (genfloat x, genfloat y) +---- + a@ latexmath:[x - y] if latexmath:[x > y], +0 if x is less than or + equal to y. + +a@ +[source] +---- +genfloat floor (genfloat x) +---- + a@ Round to integral value using the round to negative infinity + rounding mode. + +a@ +[source] +---- +genfloat fma (genfloat a, genfloat b, genfloat c) +---- + a@ Returns the correctly rounded floating-point + representation of the sum of c with the infinitely + precise product of a and b. Rounding of + intermediate products shall not occur. Edge case + behavior is per the IEEE 754-2008 standard. + +a@ +[source] +---- +genfloat fmax (genfloat x, genfloat y) +genfloat fmax (genfloat x, sgenfloat y) +---- + a@ Returns y if latexmath:[x < y], otherwise it returns x. If one + argument is a NaN, fmax() returns the other + argument. If both arguments are NaNs, fmax() + returns a NaN. + +a@ +[source] +---- +genfloat fmin (genfloat x, genfloat y) +genfloat fmin (genfloat x, sgenfloat y) +---- + a@ Returns y if latexmath:[y < x], otherwise it returns x. If one + argument is a NaN, fmin() returns the other + argument. If both arguments are NaNs, fmin() + returns a NaN. + +a@ +[source] +---- +genfloat fmod (genfloat x, genfloat y) +---- + a@ Modulus. Returns latexmath:[x \bmod y \cdot \mathrm{trunc}(x/y)]. + +a@ +[source] +---- +genfloat fract (genfloat x, genfloatptr iptr) +---- + a@ Returns fmin(x - floor(x), nextafter(genfloat(1.0), genfloat(0.0)) ). + floor(x) is returned in iptr. + +a@ +[source] +---- +genfloat frexp (genfloat x, genintptr exp) +---- + a@ Extract mantissa and exponent from x. For each + component the mantissa returned is a float with + magnitude in the interval [1/2, 1) or 0. Each + component of x equals mantissa returned latexmath:[\times 2^{exp}]. + +a@ +[source] +---- +genfloat hypot (genfloat x, genfloat y) +---- + a@ Compute the value of the square root of x^2^ + y^2^ without undue overflow + or underflow. + +a@ +[source] +---- +genint ilogb (genfloat x) +---- + a@ Return the exponent as an integer value. + +a@ +[source] +---- +genfloat ldexp (genfloat x, genint k) +genfloat ldexp (genfloat x, int k) +---- + a@ Multiply x by 2^k^. + +a@ +[source] +---- +genfloat lgamma (genfloat x) +---- + a@ Log gamma function. Returns the natural + logarithm of the absolute value of the gamma + function. + +a@ +[source] +---- +genfloat lgamma_r (genfloat x, genintptr signp) +---- + a@ Log gamma function. Returns the natural + logarithm of the absolute value of the gamma + function. The sign of the gamma function is + returned in the signp argument of [code]#lgamma_r#. + +a@ +[source] +---- +genfloat log (genfloat x) +---- + a@ Compute natural logarithm. + +a@ +[source] +---- +genfloat log2 (genfloat x) +---- + a@ Compute a base 2 logarithm. + +a@ +[source] +---- +genfloat log10 (genfloat x) +---- + a@ Compute a base 10 logarithm. + +a@ +[source] +---- +genfloat log1p (genfloat x) +---- + a@ Compute latexmath:[\log_e(1.0 + x)]. + +a@ +[source] +---- +genfloat logb (genfloat x) +---- + a@ Compute the exponent of x, which is the integral + part of logr (latexmath:[|x|]). + +a@ +[source] +---- +genfloat mad (genfloat a,genfloat b, genfloat c) +---- + a@ mad approximates a * b + c. Whether or how the + product of a * b is rounded and how supernormal or + subnormal intermediate products are handled is not + defined. mad is intended to be used where speed is + preferred over accuracy. + +a@ +[source] +---- +genfloat maxmag (genfloat x, genfloat y) +---- + a@ Returns x if latexmath:[|x| > |y|], y if latexmath:[|y| > |x|], otherwise + fmax(x, y). + +a@ +[source] +---- +genfloat minmag (genfloat x, genfloat y) +---- + a@ Returns x if latexmath:[|x| < |y|], y if latexmath:[|y| < |x|], otherwise + fmin(x, y). + +a@ +[source] +---- +genfloat modf (genfloat x, genfloatptr iptr) +---- + a@ Decompose a floating-point number. The modf + function breaks the argument x into integral and + fractional parts, each of which has the same sign as + the argument. It stores the integral part in the object + pointed to by iptr. + +a@ +[source] +---- +genfloatf nan (ugenint nancode) +genfloatd nan (ugenlonginteger nancode) +---- + a@ Returns a quiet NaN. The nancode may be placed + in the significand of the resulting NaN. + +a@ +[source] +---- +genfloat nextafter (genfloat x, +genfloat y) +---- + a@ Computes the next representable single-precision + floating-point value following x in the direction of + y. Thus, if y is less than x, nextafter() returns the + largest representable floating-point number less + than x. + +a@ +[source] +---- +genfloat pow (genfloat x, genfloat y) +---- + a@ Compute x to the power y. + +a@ +[source] +---- +genfloat pown (genfloat x, genint y) +---- + a@ Compute x to the power y, where y is an integer. + +a@ +[source] +---- +genfloat powr (genfloat x, genfloat y) +---- + a@ Compute x to the power y, where latexmath:[x \geq 0]. + +a@ +[source] +---- +genfloat remainder (genfloat x, genfloat y) +---- + a@ Compute the value r such that r = x - n*y, where n + is the integer nearest the exact value of x/y. If there + are two integers closest to x/y, n shall be the even + one. If r is zero, it is given the same sign as x. + +a@ +[source] +---- +genfloat remquo (genfloat x, genfloat y, genintptr quo) +---- + a@ The remquo function computes the value r such + that r = x - k*y, where k is the integer nearest the + exact value of x/y. If there are two integers closest + to x/y, k shall be the even one. If r is zero, it is + given the same sign as x. This is the same value + that is returned by the remainder function. + remquo also calculates the lower seven bits of the + integral quotient x/y, and gives that value the same + sign as x/y. It stores this signed value in the object + pointed to by quo. + +a@ +[source] +---- +genfloat rint (genfloat x) +---- + a@ Round to integral value (using round to nearest + even rounding mode) in floating-point format. + Refer to <> for description of rounding + modes. + +a@ +[source] +---- +genfloat rootn (genfloat x, genint y) +---- + a@ Compute x to the power 1/y. + +a@ +[source] +---- +genfloat round (genfloat x) +---- + a@ Return the integral value nearest to x rounding + halfway cases away from zero, regardless of the + current rounding direction. + +a@ +[source] +---- +genfloat rsqrt (genfloat x) +---- + a@ Compute inverse square root. + +a@ +[source] +---- +genfloat sin (genfloat x) +---- + a@ Compute sine. + +a@ +[source] +---- +genfloat sincos (genfloat x, genfloatptr cosval) +---- + a@ Compute sine and cosine of x. The computed sine + is the return value and computed cosine is returned + in [code]#cosval#. + +a@ +[source] +---- +genfloat sinh (genfloat x) +---- + a@ Compute hyperbolic sine. + +a@ +[source] +---- +genfloat sinpi (genfloat x) +---- + a@ Compute _sin({pi} x)_. + +a@ +[source] +---- +genfloat sqrt (genfloat x) +---- + a@ Compute square root. + +a@ +[source] +---- +genfloat tan (genfloat x) +---- + a@ Compute tangent. + +a@ +[source] +---- +genfloat tanh (genfloat x) +---- + a@ Compute hyperbolic tangent. + +a@ +[source] +---- +genfloat tanpi (genfloat x) +---- + a@ Compute _tan({pi} x)_. + +a@ +[source] +---- +genfloat tgamma (genfloat x) +---- + a@ Compute the gamma function. + +a@ +[source] +---- +genfloat trunc (genfloat x) +---- + a@ Round to integral value using the round to zero + rounding mode. + +|==== + + +In SYCL the implementation-defined precision math functions are +defined in the namespace [code]#sycl::native#. The functions +that are available within this namespace are specified in +<>. + + +[[table.native.math.functions]] +.Native math functions +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Native Math Function @ Description +a@ +[source] +---- +genfloatf cos (genfloatf x) +---- + a@ Compute cosine over an implementation-defined range. + The maximum error is implementation-defined. + +a@ +[source] +---- +genfloatf divide (genfloatf x, genfloatf y) +---- + a@ Compute x / y over an implementation-defined range. + The maximum error is implementation-defined. + +a@ +[source] +---- +genfloatf exp (genfloatf x) +---- + a@ Compute the base- e exponential of x over an + implementation-defined range. The maximum error is + implementation-defined. + +a@ +[source] +---- +genfloatf exp2 (genfloatf x) +---- + a@ Compute the base- 2 exponential of x over an + implementation-defined range. The maximum error is + implementation-defined. + +a@ +[source] +---- +genfloatf exp10 (genfloatf x) +---- + a@ Compute the base- 10 exponential of x over an + implementation-defined range. The maximum error is + implementation-defined. + +a@ +[source] +---- +genfloatf log (genfloatf x) +---- + a@ Compute natural logarithm over an implementation-defined range. + The maximum error is implementation-defined. + +a@ +[source] +---- +genfloatf log2 (genfloatf x) +---- + a@ Compute a base 2 logarithm over an implementation-defined + range. The maximum error is implementation-defined. + +a@ +[source] +---- +genfloatf log10 (genfloatf x) +---- + a@ Compute a base 10 logarithm over an implementation-defined + range. The maximum error is implementation-defined. + +a@ +[source] +---- +genfloatf powr (genfloatf x, genfloatf y) +---- + a@ Compute x to the power y, where latexmath:[x \geq 0]. The range of + x and y are implementation-defined. The maximum error + is implementation-defined. + +a@ +[source] +---- +genfloatf recip (genfloatf x) +---- + a@ Compute reciprocal over an implementation-defined + range. The maximum error is implementation-defined. + +a@ +[source] +---- +genfloatf rsqrt (genfloatf x) +---- + a@ Compute inverse square root over an implementation-defined + range. The maximum error is implementation-defined. + +a@ +[source] +---- +genfloatf sin (genfloatf x) +---- + a@ Compute sine over an implementation-defined range. + The maximum error is implementation-defined. + +a@ +[source] +---- +genfloatf sqrt (genfloatf x) +---- + a@ Compute square root over an implementation-defined + range. The maximum error is implementation-defined. + +a@ +[source] +---- +genfloatf tan (genfloatf x) +---- + a@ Compute tangent over an implementation-defined range. + The maximum error is implementation-defined. + +|==== + + +In SYCL the half precision math functions are defined in +[code]#sycl::half_precision#. The functions that are +available within this namespace are specified in +<>. These functions are +implemented with a minimum of 10-bits of accuracy i.e. an ULP value is +less than or equal to 8192 ulp. + + +[[table.half.math.functions]] +.Half precision math functions +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Half Math function @ Description +a@ +[source] +---- +genfloatf cos (genfloatf x) +---- + a@ Compute cosine. x must be in the range -216 to +216. + +a@ +[source] +---- +genfloatf divide (genfloatf x, genfloatf y) +---- + a@ Compute x / y. + +a@ +[source] +---- +genfloatf exp (genfloatf x) +---- + a@ Compute the base- e exponential of x. + +a@ +[source] +---- +genfloatf exp2 (genfloatf x) +---- + a@ Compute the base- 2 exponential of x. + +a@ +[source] +---- +genfloatf exp10 (genfloatf x) +---- + a@ Compute the base- 10 exponential of x. + +a@ +[source] +---- +genfloatf log (genfloatf x) +---- + a@ Compute natural logarithm. + +a@ +[source] +---- +genfloatf log2 (genfloatf x) +---- + a@ Compute a base 2 logarithm. + +a@ +[source] +---- +genfloatf log10 (genfloatf x) +---- + a@ Compute a base 10 logarithm. + +a@ +[source] +---- +genfloatf powr (genfloatf x, genfloatf y) +---- + a@ Compute x to the power y, where latexmath:[x \geq 0]. + +a@ +[source] +---- +genfloatf recip (genfloatf x) +---- + a@ Compute reciprocal. + +a@ +[source] +---- +genfloatf rsqrt (genfloatf x) +---- + a@ Compute inverse square root. + +a@ +[source] +---- +genfloatf sin (genfloatf x) +---- + a@ Compute sine. x must be in the range -216 + to +216. + +a@ +[source] +---- +genfloatf sqrt (genfloatf x) +---- + a@ Compute square root. + +a@ +[source] +---- +genfloatf tan (genfloatf x) +---- + a@ Compute tangent. x must be in the range + -216 to +216. + +|==== + + + +=== Integer functions + +Integer math functions are available in SYCL in the +namespace [code]#sycl# on host and device. The +built-in functions can take as input [code]#char#, +[code]#unsigned char#, [code]#short#, +[code]#unsigned short#, [code]#int#, +[code]#unsigned int#, +[code]#long long int#, +[code]#unsigned long long int# and +their [code]#vec# and [code]#marray# counterparts. The +supported integer math functions are described in +<>. + + +[[table.integer.functions]] +.Integer functions which work on SYCL host and device, are available in the [code]#sycl# namespace +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Integer Function @ Description +a@ +[source] +---- +geninteger abs (geninteger x) +---- + a@ Returns latexmath:[|x|]. + +a@ +[source] +---- +ugeninteger abs_diff (geninteger x, geninteger y) +---- + a@ Returns latexmath:[|x - y|] without modulo overflow. + +a@ +[source] +---- +geninteger add_sat (geninteger x, geninteger y) +---- + a@ Returns latexmath:[x + y] and saturates the result. + +a@ +[source] +---- +geninteger hadd (geninteger x, geninteger y) +---- + a@ Returns latexmath:[(x + y) >> 1]. The intermediate sum does + not modulo overflow. + +a@ +[source] +---- +geninteger rhadd (geninteger x, geninteger y) +---- + a@ Returns latexmath:[(x + y + 1) >> 1]. The intermediate sum + does not modulo overflow. + +a@ +[source] +---- +geninteger clamp (geninteger x, geninteger minval, geninteger maxval) +geninteger clamp (geninteger x, sgeninteger minval, sgeninteger maxval) +---- + a@ Returns min(max(x, minval), maxval). + Results are undefined if latexmath:[\mathrm{minval} > \mathrm{maxval}]. + +a@ +[source] +---- +geninteger clz (geninteger x) +---- + a@ Returns the number of leading 0-bits in x, starting + at the most significant bit position. If x is 0, + returns the size in bits of the type of x or component type of x, + if x is a vector type. + +a@ +[source] +---- +geninteger ctz (geninteger x) +---- + a@ Returns the count of trailing 0-bits in x. If x is 0, + returns the size in bits of the type of x or component type of x, + if x is a vector type. + +a@ +[source] +---- +geninteger mad_hi ( + geninteger a, geninteger b, geninteger c) +---- + a@ Returns [code]#pass:[mul_hi(a, b)+c]#. + +a@ +[source] +---- +geninteger mad_sat (geninteger a, + geninteger b, geninteger c) +---- + a@ Returns [code]#pass:[a * b + c]# and saturates the result. + +a@ +[source] +---- +geninteger max (geninteger x, geninteger y) +geninteger max (geninteger x, sgeninteger y) +---- + a@ Returns y if latexmath:[x < y], otherwise it returns x. + +a@ +[source] +---- +geninteger min (geninteger x, geninteger y) +geninteger min (geninteger x, sgeninteger y) +---- + a@ Returns y if latexmath:[y < x], otherwise it returns x. + +a@ +[source] +---- +geninteger mul_hi (geninteger x, geninteger y) +---- + a@ Computes [code]#x * y# and returns the high half of the + product of x and y. + +a@ +[source] +---- +geninteger rotate (geninteger v, geninteger i) +---- + a@ For each element in v, the bits are shifted left by + the number of bits given by the corresponding + element in i (subject to usual shift modulo rules + described in the OpenCL 1.2 specification + <>). Bits shifted off the left + side of the element are shifted back in from the + right. + +a@ +[source] +---- +geninteger sub_sat (geninteger x, geninteger y) +---- + a@ Returns latexmath:[x - y] and saturates the result. + +a@ +[source] +---- +ugeninteger16bit upsample (ugeninteger8bit hi, ugeninteger8bit lo) +---- + a@ [code]#result[i] = ((ushort)hi[i] << 8) | lo[i]# + +a@ +[source] +---- +igeninteger16bit upsample (igeninteger8bit hi, ugeninteger8bit lo) +---- + a@ [code]#result[i] = ((short)hi[i] << 8) | lo[i]# + +a@ +[source] +---- +ugeninteger32bit upsample (ugeninteger16bit hi, ugeninteger16bit lo) +---- + a@ [code]#result[i] = ((uint)hi[i] << 16) | lo[i]# + +a@ +[source] +---- +igeninteger32bit upsample (igeninteger16bit hi, ugeninteger16bit lo) +---- + a@ [code]#result[i] = ((int)hi[i] << 16) | lo[i]# + +a@ +[source] +---- +ugeninteger64bit upsample (ugeninteger32bit hi, ugeninteger32bit lo) +---- + a@ [code]#result[i] = ((ulonglong)hi[i] << 32) | lo[i]# + +a@ +[source] +---- +igeninteger64bit upsample (igeninteger32bit hi, ugeninteger32bit lo) +---- + a@ [code]#result[i] = ((longlong)hi[i] << 32) | lo[i]# + +a@ +[source] +---- +geninteger popcount (geninteger x) +---- + a@ Returns the number of non-zero bits in x. + +a@ +[source] +---- +geninteger32bit mad24 (geninteger32bit x, geninteger32bit y, geninteger32bit z) +---- + a@ Multiply two 24-bit integer values x and y and add + the 32-bit integer result to the 32-bit integer z. + Refer to definition of mul24 to see how the 24-bit + integer multiplication is performed. + +a@ +[source] +---- +geninteger32bit mul24 (geninteger32bit x, geninteger32bit y) +---- + a@ Multiply two 24-bit integer values x and y. x and y + are 32-bit integers but only the low 24-bits are used + to perform the multiplication. mul24 should only + be used when values in x and y are in the range + latexmath:[[-2^{23}, 2^{23}-1\]] if x and y are signed integers and in the + range latexmath:[[0, 2^{24}-1\]] if x and y are unsigned integers. If + x and y are not in this range, the multiplication + result is implementation-defined. + +|==== + + + +=== Common functions + +In SYCL the OpenCL [keyword]#common functions# are available in the +namespace [code]#sycl# on host and device as defined in the +OpenCL 1.2 specification document <>. They +are described here in <>. The built-in +functions can take as input [code]#float# or optionally +[code]#double# and their [code]#vec# and [code]#marray# counterparts. + + +[[table.common.functions]] +.Common functions which work on SYCL host and device, are available in the [code]#sycl# namespace. They correspond to <>. +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Common Function @ Description +a@ +[source] +---- +genfloat clamp (genfloat x, genfloat minval, genfloat maxval) +genfloatf clamp (genfloatf x, float minval, float maxval) +genfloatd clamp (genfloatd x, double minval, double maxval) +---- + a@ Returns fmin(fmax(x, minval), maxval). + Results are undefined if latexmath:[\mathrm{minval} > \mathrm{maxval}]. + +a@ +[source] +---- +genfloat degrees (genfloat radians) +---- + a@ Converts radians to degrees, + i.e. latexmath:[{180 \over \pi} \times radians]. + +a@ +[source] +---- +genfloat max (genfloat x, genfloat y) +genfloatf max (genfloatf x, float y) +genfloatd max (genfloatd x, double y) +---- + a@ Returns y if latexmath:[x < y], otherwise it returns x. If x or y + are infinite or NaN, the return values are undefined. + +a@ +[source] +---- +genfloat min (genfloat x, genfloat y) +genfloatf min (genfloatf x, float y) +genfloatd min (genfloatd x, double y) +---- + a@ Returns y if latexmath:[y < x], otherwise it returns x. If x or y + are infinite or NaN, the return values are undefined. + +a@ +[source] +---- +genfloat mix (genfloat x, genfloat y, genfloat a) +genfloatf mix (genfloatf x, genfloatf y, float a) +genfloatd mix (genfloatd x, genfloatd y, double a) +---- + a@ Returns the linear blend of x and y implemented as: + latexmath:[x + (y - x) \times a]. + _a_ must be a value in the range 0.0 ... 1.0. If _a_ is not + in the range 0.0 ... 1.0, the return values are + undefined. + +a@ +[source] +---- +genfloat radians (genfloat degrees) +---- + a@ Converts degrees to radians, i.e. latexmath:[(\pi / 180) \times degrees]. + +a@ +[source] +---- +genfloat step (genfloat edge, genfloat x) +genfloatf step (float edge, genfloatf x) +genfloatd step (double edge, genfloatd x) +---- + a@ Returns 0.0 if latexmath:[x < edge], otherwise it returns 1.0. + +a@ +[source] +---- +genfloat smoothstep (genfloat edge0, +genfloat edge1, genfloat x) +genfloatf smoothstep (float edge0, + float edge1, genfloatf x) +genfloatd smoothstep (double edge0, + double edge1, genfloatd x) +---- + a@ Returns 0.0 if latexmath:[x \leq edge0] and 1.0 if latexmath:[x \geq edge1] + and performs smooth Hermite interpolation between 0 + and 1 when latexmath:[edge0 < x < edge1]. This is useful in + cases where you would want a threshold function + with a smooth transition. + +This is equivalent to: + +[source] +---- +gentype t; +t = clamp ((x <= edge0) / (edge1 >= edge0), 0, 1); +return t * t * (3 - 2 * t); +---- + +Results are undefined if latexmath:[edge0 >= edge1] or if x, +edge0 or edge1 is a NaN. + +a@ +[source] +---- +genfloat sign (genfloat x) +---- + a@ Returns 1.0 if latexmath:[x > 0], -0.0 if latexmath:[x = -0.0], +0.0 if latexmath:[x =+0.0], or -1.0 + if latexmath:[x < 0]. Returns 0.0 if x is a NaN. + +|==== + + + +=== Geometric functions + +In SYCL the OpenCL [keyword]#geometric functions# are available in the +namespace [code]#sycl# on host and device as defined in the OpenCL 1.2 +specification document <>. The built-in functions +can take as input float or optionally double and their [code]#vec# and +[code]#marray# counterparts, for dimensions 2, 3 and 4. On the host the +vector types use the [code]#vec# class and on an SYCL device use the +corresponding native <> vector types. All of the geometric functions +use round-to-nearest-even rounding mode. +<> contains the definitions of supported +geometric functions. + + +[[table.geometric.functions]] +.Geometric functions which work on SYCL host and device, are available in the [code]#sycl# namespace. They correspond to <>. +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Geometric Function @ Description +a@ +[source] +---- +float4 cross (float4 p0, float4 p1) +float3 cross (float3 p0, float3 p1) +double4 cross (double4 p0, double4 p1) +double3 cross (double3 p0, double3 p1) +---- + a@ Returns the cross product of p0.xyz and p1.xyz. The + _w_ component of [code]#float4# result returned will be 0.0. + +a@ +[source] +---- +mfloat4 cross (mfloat4 p0, mfloat4 p1) +mfloat3 cross (mfloat3 p0, mfloat3 p1) +mdouble4 cross (mdouble4 p0, mdouble4 p1) +mdouble3 cross (mdouble3 p0, mdouble3 p1) +---- + a@ Returns the cross product of first 3 components of p0 and p1. The 4th component of result returned will be 0.0. + +a@ +[source] +---- +float dot (gengeofloat p0, gengeofloat p1) +double dot (gengeodouble p0, gengeodouble p1) +---- + a@ Compute dot product. + +a@ +[source] +---- +float distance (gengeofloat p0, gengeofloat p1) +double distance (gengeodouble p0, gengeodouble p1) +---- + a@ Returns the distance between p0 and p1. This is + calculated as [code]#length(p0 - p1)#. + +a@ +[source] +---- +float length (gengeofloat p) +double length (gengeodouble p) +---- + a@ Return the length of vector p, i.e., + latexmath:[\sqrt{ p.x^2 + p.y^2 + ...}] + +a@ +[source] +---- +gengeofloat normalize (gengeofloat p) +gengeodouble normalize (gengeodouble p) +---- + a@ Returns a vector in the same direction as p but with a + length of 1. + +a@ +[source] +---- +float fast_distance (gengeofloat p0, gengeofloat p1) +---- + a@ Returns [code]#fast_length(p0 - p1)#. + +a@ +[source] +---- +float fast_length (gengeofloat p) +---- + a@ Returns the length of vector p computed as: + [code]#pass:[sqrt((half)(pow(p.x,2) + pow(p.y,2) + ...))]# + +a@ +[source] +---- +gengeofloat fast_normalize (gengeofloat p) +---- + a@ Returns a vector in the same direction as p but with a + length of 1. fast_normalize is computed as: + +[code]#pass:[p*rsqrt((half)(pow(p.x,2) + pow(p.y,2) + ... ))]# + +The result shall be within 8192 ulps error from the +infinitely precise result of + +[source] +---- +if (all(p == 0.0f)) + result = p; +else + result = p/sqrt (pow(p.x,2) + pow(p.y,2) + ... ); +---- + +with the following exceptions: + +-- + . If the sum of squares is greater than [code]#FLT_MAX# then the + value of the floating-point values in the result vector are undefined. + . If the sum of squares is less than [code]#FLT_MIN# then the + implementation may return back p. + . If the device is in "`denorms are flushed to zero`" mode, individual + operand elements with magnitude less than [code]#sqrt(FLT_MIN)# may + be flushed to zero before proceeding with the calculation. +-- + +|==== + + + +=== Relational functions + +In SYCL the OpenCL [keyword]#relational functions# are available in the +namespace [code]#sycl# on host and device as defined in the +OpenCL 1.2 specification document <>. The +built-in functions can take as input [code]#char#, +[code]#unsigned char#, [code]#short#, +[code]#unsigned short#, [code]#int#, +[code]#unsigned int#, +[code]#long#, [code]#unsigned long#, [code]#float# or +optionally [code]#double# and their [code]#vec# and +[code]#marray# counterparts. The relational functions are +provided in addition to the operators. + +The available built-in functions for [code]#vec# template class are described in +<> + + +[[table.relational.functions.vec]] +.Relational functions for [code]#vec# template class which work on SYCL host and device, are available in the [code]#sycl# namespace. They correspond to <>. +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Relational Function @ Description +a@ +[source] +---- +igeninteger32bit isequal (genfloatf x, genfloatf y) +igeninteger64bit isequal (genfloatd x, genfloatd y) +---- + a@ Returns the component-wise compare of latexmath:[x == y]. + +a@ +[source] +---- +igeninteger32bit isnotequal (genfloatf x, genfloatf y) +igeninteger64bit isnotequal (genfloatd x, genfloatd y) +---- + a@ Returns the component-wise compare of latexmath:[x != y]. + +a@ +[source] +---- +igeninteger32bit isgreater (genfloatf x, genfloatf y) +igeninteger64bit isgreater (genfloatd x, genfloatd y) +---- + a@ Returns the component-wise compare of latexmath:[x > y]. + +a@ +[source] +---- +igeninteger32bit isgreaterequal (genfloatf x, genfloatf y) +igeninteger64bit isgreaterequal (genfloatd x, genfloatd y) +---- + a@ Returns the component-wise compare of latexmath:[x >= y]. + +a@ +[source] +---- +igeninteger32bit isless (genfloatf x, genfloatf y) +igeninteger64bit isless (genfloatd x, genfloatd y) +---- + a@ Returns the component-wise compare of latexmath:[x < y]. + +a@ +[source] +---- +igeninteger32bit islessequal (genfloatf x, genfloatf y) +igeninteger64bit islessequal (genfloatd x, genfloatd y) +---- + a@ Returns the component-wise compare of latexmath:[x <= y]. + +a@ +[source] +---- +igeninteger32bit islessgreater (genfloatf x, genfloatf y) +igeninteger64bit islessgreater (genfloatd x, genfloatd y) +---- + a@ Returns the component-wise compare of + latexmath:[(x < y) || (x > y)]. + +a@ +[source] +---- +igeninteger32bit isfinite (genfloatf x) +igeninteger64bit isfinite (genfloatd x) +---- + a@ Test for finite value. + +a@ +[source] +---- +igeninteger32bit isinf (genfloatf x) +igeninteger64bit isinf (genfloatd x) +---- + a@ Test for infinity value (positive or negative) . + +a@ +[source] +---- +igeninteger32bit isnan (genfloatf x) +igeninteger64bit isnan (genfloatd x) +---- + a@ Test for a NaN. + +a@ +[source] +---- +igeninteger32bit isnormal (genfloatf x) +igeninteger64bit isnormal (genfloatd x) +---- + a@ Test for a normal value. + +a@ +[source] +---- +igeninteger32bit isordered (genfloatf x, genfloatf y) +igeninteger64bit isordered (genfloatd x, genfloatd y) +---- + a@ Test if arguments are ordered. isordered() takes arguments x and y, and + returns the result [code]#isequal(x, x) && isequal(y, y)#. + +a@ +[source] +---- +igeninteger32bit isunordered (genfloatf x, genfloatf y) +igeninteger64bit isunordered (genfloatd x, genfloatd y) +---- + a@ Test if arguments are unordered. isunordered() + takes arguments x and y, returning non-zero if x or + y is NaN, and zero otherwise. + +a@ +[source] +---- +igeninteger32bit signbit (genfloatf x) +igeninteger64bit signbit (genfloatd x) +---- + a@ Test for sign bit. The scalar version of the + function returns a 1 if the sign bit in the float is set + else returns 0. + +The vector version of the function +returns the following for each component in [keyword]#floatn#: + +-1 (i.e all bits set) if the sign bit in the float is set +else returns 0. + +a@ +[source] +---- +int any (igeninteger x) +---- + a@ Returns 1 if the most significant bit in any + component of x is set; otherwise returns 0. + +a@ +[source] +---- +int all (igeninteger x) +---- + a@ Returns 1 if the most significant bit in all + components of x is set; otherwise returns 0. + +a@ +[source] +---- +gentype bitselect (gentype a, gentype b, gentype c) +---- + a@ Each bit of the result is the corresponding bit of a + if the corresponding bit of c is 0. Otherwise it is + the corresponding bit of b. + +a@ +[source] +---- +geninteger select (geninteger a, geninteger b, igeninteger c) +geninteger select (geninteger a, geninteger b, ugeninteger c) +genfloatf select (genfloatf a, genfloatf b, genint c) +genfloatf select (genfloatf a, genfloatf b, ugenint c) +genfloatd select (genfloatd a, genfloatd b, igeninteger64 c) +genfloatd select (genfloatd a, genfloatd b, ugeninteger64 c) +---- + a@ For each component of a vector type: + +[code]#result[i] = (MSB of c[i] is set) ? b[i] : a[i]#. + +For a scalar type: +[code]#result = c ? b : a#. + +[code]#geninteger# must have the same number of elements and bits as +[code]#gentype#. + +|==== + + +The available built-in functions for [code]#marray# template class are described in +<> + + +[[table.relational.functions.marray]] +.Relational functions for scalar data types and [code]#marray# template class template class which work on SYCL host and device, are available in the [code]#sycl# namespace. +[width="100%",options="header",separator="@",cols="65%,35%"] +|==== +@ Relational Function @ Description +a@ +[source] +---- +genbool isequal (genfloatf x, genfloatf y) +genbool isequal (genfloatd x, genfloatd y) +---- + a@ Returns the component-wise compare of latexmath:[x == y]. + +a@ +[source] +---- +genbool isnotequal (genfloatf x, genfloatf y) +genbool isnotequal (genfloatd x, genfloatd y) +---- + a@ Returns the component-wise compare of latexmath:[x != y]. + +a@ +[source] +---- +genbool isgreater (genfloatf x, genfloatf y) +genbool isgreater (genfloatd x, genfloatd y) +---- + a@ Returns the component-wise compare of latexmath:[x > y]. + +a@ +[source] +---- +genbool isgreaterequal (genfloatf x, genfloatf y) +genbool isgreaterequal (genfloatd x, genfloatd y) +---- + a@ Returns the component-wise compare of latexmath:[x >= y]. + +a@ +[source] +---- +genbool isless (genfloatf x, genfloatf y) +genbool isless (genfloatd x, genfloatd y) +---- + a@ Returns the component-wise compare of latexmath:[x < y]. + +a@ +[source] +---- +genbool islessequal (genfloatf x, genfloatf y) +genbool islessequal (genfloatd x, genfloatd y) +---- + a@ Returns the component-wise compare of latexmath:[x <= y]. + +a@ +[source] +---- +genbool islessgreater (genfloatf x, genfloatf y) +genbool islessgreater (genfloatd x, genfloatd y) +---- + a@ Returns the component-wise compare of + latexmath:[(x < y) || (x > y)]. + +a@ +[source] +---- +genbool isfinite (genfloatf x) +genbool isfinite (genfloatd x) +---- + a@ Test for finite value. + +a@ +[source] +---- +genbool isinf (genfloatf x) +genbool isinf (genfloatd x) +---- + a@ Test for infinity value (positive or negative) . + +a@ +[source] +---- +genbool isnan (genfloatf x) +genbool isnan (genfloatd x) +---- + a@ Test for a NaN. + +a@ +[source] +---- +genbool isnormal (genfloatf x) +genbool isnormal (genfloatd x) +---- + a@ Test for a normal value. + +a@ +[source] +---- +genbool isordered (genfloatf x, genfloatf y) +genbool isordered (genfloatd x, genfloatd y) +---- + a@ Test if arguments are ordered. isordered() takes arguments x and y, and + returns the result [code]#isequal(x, x) && isequal(y, y)#. + +a@ +[source] +---- +genbool isunordered (genfloatf x, genfloatf y) +genbool isunordered (genfloatd x, genfloatd y) +---- + a@ Test if arguments are unordered. isunordered() + takes arguments x and y, returning [code]#true# if x or + y is NaN, and [code]#false# otherwise. + +a@ +[source] +---- +genbool signbit (genfloatf x) +genbool signbit (genfloatd x) +---- + a@ Test for sign bit, returning [code]#true# if the sign bit + in the float is set, and [code]#false# otherwise. + +a@ +[source] +---- +bool any (genbool x) +---- + a@ Returns [code]#true# if the most significant bit in any component of x is set; otherwise returns [code]#false#. + +a@ +[source] +---- +int all (igeninteger x) +---- + a@ Returns [code]#true# if the most significant bit in all components of x is set; otherwise returns [code]#false#. + +a@ +[source] +---- +gentype bitselect (gentype a, gentype b, gentype c) +---- + a@ Each bit of the result is the corresponding bit of a + if the corresponding bit of c is 0. Otherwise it is + the corresponding bit of b. + +a@ +[source] +---- +gentype select (gentype a, gentype b, genbool c) +---- + a@ Returns the component-wise [code]#result = c ? b : a#. + +|==== + + +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% end builtin_functions %%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% end programming_interface %%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/adoc/chapters/references.adoc b/adoc/chapters/references.adoc new file mode 100644 index 00000000..750c3980 --- /dev/null +++ b/adoc/chapters/references.adoc @@ -0,0 +1,32 @@ +[appendix] +[[references]] += References + +[[cpp17]] International Organization for Standardization (ISO). +"`Programming Languages — {cpp}`". ISO/IEC 14882:2017, 2017. + +[[dr2325]] +International Organization for Standardization (ISO). +Accepted resolution to C++ Standard Core Language Defect Report DR2325. +http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p0593r6.html . + +[[openclext12]] +Khronos OpenCL Working Group. +_The OpenCL Extension Specification_, Version 1.2.25 (2/13/18). +http://www.khronos.org/registry/cl/specs/opencl-1.2-extensions.pdf . + +[[opencl12]] +Khronos OpenCL Working Group. +_The OpenCL Specification, Version 1.2.19_ (11/14/12). +https://www.khronos.org/registry/OpenCL/specs/opencl-1.2.pdf . + +[[opencl20]] +Khronos OpenCL Working Group. +_The OpenCL Specification, Version 2.0.29_ (July 21, 2015). +https://www.khronos.org/registry/OpenCL/specs/opencl-2.0.pdf . + +[[cpp20]] +International Organization for Standardization (ISO). +" Programming Languages — {cpp}, Langages de programmation +— C++ ", International Standard ISO/IEC 14882:2020(E), +Sixth edition 2020-12, 2020. diff --git a/adoc/chapters/what_changed.adoc b/adoc/chapters/what_changed.adoc new file mode 100644 index 00000000..23c3f77a --- /dev/null +++ b/adoc/chapters/what_changed.adoc @@ -0,0 +1,424 @@ +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% begin what_changed %%%%%%%%%%%%%%%%%%%%%%%%%%%% + +[appendix] +[[cha:what-changed-from]] += What has changed from previous versions + + +[[sec:what-changed-between]] +== What has changed from SYCL 1.2.1 to SYCL 2020 + +The SYCL runtime moved from namespace [code]#cl::sycl# provided +by [code]#{hash}include # to namespace [code]#sycl# +provided by [code]#{hash}include # as explained in +<>. The old header file is still +available for compatibility with SYCL 1.2.1 applications. + +The SYCL specification is now based on the core language of {cpp17}, as +described in <>. Features of +{cpp17} are now enabled within the specification, such as deduction guides +for class template argument deduction. + +Naming of lambda functions passed to kernel invocations is now optional. + +Changes to buffers, images and accessors: + + * The [code]#image# class has been removed. There are now new classes + [code]#unsampled_image# and [code]#sampled_image# which represent sampled + and unsampled images. The [code]#sampler# class has been removed and + replaced with the new [code]#image_sampler# structure. + + * Support for image arrays has been removed. + + * The type name [code]#access::target# has been deprecated and replaced with + the type [code]#target#. + + * The type name [code]#access::mode# has been deprecated and replaced with + the type [code]#access_mode#. + + * The name of the [code]#accessor# target [code]#target::global_buffer# + has been deprecated and replaced with [code]#target::device#. + + * Support for the [code]#accessor# target [code]#target::host_buffer# has + been deprecated. There is now a new accessor class [code]#host_accessor# + which provides equivalent functionality. + + * The [code]#buffer# member functions which return an [code]#accessor# of + type [code]#target::host_buffer# have been deprecated. A new member + function [code]#get_host_access()# has been added which returns a + [code]#host_accessor#. + + * The [code]#buffer# class has a new variadic overload of the + [code]#get_access()# member function which allows construction of an + [code]#accessor# with various parameters. + + * Support for the [code]#accessor# target [code]#target::local# has been + deprecated. There is now a new accessor class [code]#local_accessor# which + provides equivalent functionality. + + * Support for the [code]#accessor# targets [code]#target::image# and + [code]#target::host_image# have been removed. There are now new accessor + classes for sampled and unsampled images: [code]#sampled_image_accessor#, + [code]#host_sampled_image_accessor#, [code]#unsampled_image_accessor# and + [code]#host_unsampled_image_accessor#. + + * A new [code]#accessor# target [code]#target::host_task# has been added, + which allows access to a [code]#buffer# from a <>. + + * Support for the [code]#accessor# modes [code]#access_mode::discard_write# + and [code]#access_mode::discard_read_write# has been deprecated. Accessors + can now be constructed with a property list, and the new property + [code]#property::no_init# provides equivalent functionality. + + * Support for the [code]#accessor# mode [code]#access_mode::atomic# and the + member functions that return an instance of the [code]#atomic# class have + been deprecated in favor of using the new [code]#atomic_ref# class instead. + + * Support for the [code]#accessor# template parameter [code]#isPlaceholder# + has been deprecated, and the value of this parameter no longer has any + bearing on whether the accessor is a placeholder. The enumerated type + [code]#access::placeholder# is also deprecated. A placeholder + accessor can now be constructed by calling the appropriate constructor, + without regard to the template parameter. + + * The return type of [code]#accessor::is_placeholder()# is no longer + [code]#constexpr#. + + * The member function [code]#handler::require()# may now be called on any + [code]#accessor# with target [code]#target::device#, + [code]#target::constant_buffer# or [code]#target::host_task#, regardless + of whether it is a placeholder. + + * New [code]#accessor# constructors have been added which take a type tag + parameter, which allows the class template parameters to be inferred via + {cpp} class template argument deduction (CTAD). + + * The [code]#buffer# member function [code]#get_access()# now has a default + value for the [code]#target# template parameter, so it is no longer + necessary to provide any template parameters in order to get a + [code]#access_mode::read_write# accessor. + + * The [code]#accessor# template parameters [code]#dimensions# and + [code]#accessMode# now have default values, so the only required template + parameter is [code]#dataT#. Moreover, the default access mode is either + [code]#access_mode::read_write# or [code]#access_mode::read#, + depending on the constness of the [code]#dataT# type. This makes it + possible to declare a read-only accessor by simply using a [code]#const# + qualified type. + + * Implicit conversions have been added between the two forms of read-only + [code]#accessor# (one form has [code]#const dataT# and + [code]#access_mode::read# and the other has non-const [code]#dataT# and + [code]#access_mode::read#). There is also an implicit conversion from + a read-write [code]#accessor# to either of the read-only forms. + + * Member functions of [code]#accessor# which return a reference to an + element have been changed to return a [code]#const# reference for + read-only accessors. The [code]#get_pointer()# member function has also + been changed to return a [code]#const# pointer for read-only accessors. + + * The [code]#accessor# member function [code]#get_pointer()# now returns + a raw pointer. The [code]#get_multi_ptr()# member function was introduced + which returns the [code]#multi_ptr# class to the appropriate space. + + * The [code]#accessor# class now meets the {cpp} requirement of + [code]#ReversibleContainer#. This includes (but is not limited to) + returning [code]#begin# and [code]#end# iterators, specifying a default + constructible accessor that can be passed to a kernel but not dereferenced, + and making them equality comparable. + + * Many of the [code]#accessor# member functions have been marked + [code]#noexcept#. + + * A <> is no longer allowed to read elements that are + outside of its range; attempting to do so produces undefined behavior. + + * The semantics of the subscript operator have been changed for a + <> which has an offset. Calling [code]#operator[](0)# now + returns a reference to the first element in the range, rather than a + reference to the first element in the underlying buffer. + +Constant memory no longer appears in the SYCL device memory model in SYCL 2020. + +Kernel attributes have been better described and are now applied +to the function type of a kernel function, which allows them to be +applied directly to lambdas. This means that propagation of the +attribute from a function to the calling kernel is no longer required, +and attributes are instead applied directly to the kernel function +that they impact. + +The list of built-in integer math functions was extended with +[code]#ctz()# in <>. +Specification of [code]#clz()# was extended with the case +of argument is 0. + +The classes [code]#vector_class#, [code]#string_class#, +[code]#function_class#, [code]#mutex_class#, +[code]#shared_ptr_class#, [code]#weak_ptr_class#, +[code]#hash_class# and [code]#exception_ptr_class# have been +removed from the API and the standard classes +[code]#std::vector#, [code]#std::string#, +[code]#std::function#, [code]#std::mutex#, +[code]#std::shared_ptr#, [code]#std::weak_ptr#, +[code]#std::hash# and [code]#std::exception_ptr# are used +instead. + +The specific [code]#sycl::buffer# API taking +[code]#std::unique_ptr# has been removed. The behavior is the +same as in SYCL 1.2.1 but with a simplified API. Since there is still +the API taking [code]#std::shared_ptr# and there is an implicit +conversion from a [code]#std::unique_ptr# prvalue to a +[code]#std::shared_ptr#, the API can still be used as before with +a [code]#std::unique_ptr# to give away memory ownership. + +Offsets to [code]#parallel_for#, [code]#nd_range#, [code]#nd_item# and [code]#item# classes have been deprecated. +As such, the parallel iteration spaces all begin at [code]#(0,0,0)# and developers are now required to handle any offset arithmetic themselves. +The behavior of [code]#nd_item.get_global_linear_id()# and [code]#nd_item.get_local_linear_id()# has been clarified accordingly. + +Unified Shared Memory (USM), in <>, has been added as a pointer-based strategy +for data management. It defines several types of allocations with various +accessibility rules for host and devices. USM is meant to complement +buffers, not replace them. + +The [code]#queue# class received a new [code]#property# +that requires in-order semantics for a queue where operations are +executed in the order in which they are submitted. + +The [code]#queue# class received several new member functions to +invoke kernels directly on a queue objects instead of inside a +command group handler in the [code]#submit# member function. + +The [code]#program# class has been removed and replaced with a new class +[code]#kernel_bundle#, which provides similar functionality in a type-safe and +thread-safe way. The [code]#kernel# class has changed, and some member +functions have been removed. + +Support has been added for <>, +which allow a <> to use constant variables whose values +aren't known until the kernel is invoked. A <> can now +take an optional parameter of type [code]#kernel_handler#, which allows the +kernel to read the values of +<>. + +The constructors for SYCL [code]#context# and [code]#queue# +are made [code]#explicit# to prevent ambiguities in the selected +constructor resulting from implicit type conversion. + +The requirement for {cpp} standard layout for data shared between host +and devices has been relaxed. SYCL now requires data shared between +host and devices to be <> as defined <>. + +The concept of a <> of <> was generalized to include +<> and <>. A <> is represented +by the [code]#sycl::group# class as in SYCL 1.2.1, and a <> +is represented by the new [code]#sycl::sub_group# class. + +The [code]#host_task# member function for the [code]#queue# has been +introduced for en-queueing <> on a <> to schedule the +<> to invoke native {cpp} functions, conforming to the SYCL memory +model. <> also support interoperability with the native +<> objects associated at that point in the DAG using +the optional [code]#interop_handle# class. + +A library of algorithms based on the {cpp17} algorithms library +was introduced in <>. These algorithms +provide a simple way for developers to apply common parallel algorithms +using the work-items of a group. + +The definition of the [code]#sycl::group# class was modified to +support the new group functions in <>. +New member types and variables were added to enable generic programming, and +member functions were updated to encapsulate all functionality tied to +<> in the [code]#sycl::group# class. See +<> for details. + +The [code]#barrier# and [code]#mem_fence# member functions of the +[code]#nd_item# class have been removed. The [code]#barrier# member +function has been replaced by the [code]#group_barrier()# function, which +can be used to synchronize either <> or <>. The +[code]#mem_fence# member function has been replaced by the +[code]#atomic_fence# function, which is more closely aligned with +[code]#std::atomic_thread_fence# and offers control over memory ordering +and scope. + +Changes in the SYCL [code]#vec# class described in +<>: + + * [code]#operator[]# was added; + * unary [code]#pass:[operator+()]# and [code]#operator-()# were added; + +The device selection now relies on a simpler API based on ranking +functions used as <> described in +<>. + +A new device selector utility has been added to <>, +the [code]#aspect_selector#, which returns a selector object +that only selects devices that have all the requested aspects. + +A new reduction library consisting of the [code]#reduction# function and +[code]#reducer# class was introduced to simplify the expression of variables +with <> semantics in SYCL kernels. See <>. + +The [code]#atomic# class from SYCL 1.2.1 was deprecated in favor of a new +[code]#atomic_ref# interface. + +The SYCL exception class hierarchy has been condensed into a single exception +type: [code]#exception#. +[code]#exception# now derives from +[code]#std::exception#. The variety of errors are now provided via error +codes, which aligns with the {cpp} error code mechanism. + +The new error code mechanism now also generalizes the previous +[code]#get_cl_code# interface to provide a generic interface way for +querying backend-specific error codes. + +Default asynchronous error handling behavior is now defined, so that asynchronous +errors will cause abnormal program termination even if a user-defined +asynchronous handler function is not defined. This prevents asynchronous errors +from being silently lost during early stages of application development. + +Kernel invocation functions, such as [code]#parallel_for#, now take +kernel functions by [code]#const# reference. Kernel functions must now have +a [code]#const#-qualified [code]#operator()#, and are allowed to be copied zero +or more times by an implementation. These clarifications allow implementations +to have flexibility for specific devices, and define what users should expect +with kernel functors. Specifically, kernel functors can not be marked as +[code]#mutable#, and sharing of data between work-items should not be +attempted through state stored within a kernel functor. + +A new concept called device <> has been added, which tells the set +of optional features a device supports. This new mechanism replaces the +[code]#has_extension()# function and some uses of [code]#get_info()#. + +There is a new <> which describes how extensions +to the SYCL language can be added by vendors and by the Khronos Group. + +A [code]#queue# constructor has been added that takes both a +[code]#device# and [code]#context#, to simplify interfacing +with libraries. + +The [code]#parallel_for# interface has been simplified in some forms +to accept a braced initializer list in place of a [code]#range#, and +to always take [code]#item# arguments. Kernel invocation functions have +also been modified to accept generic lambda expressions. Implicit conversions +from one-dimensional [code]#item# and one-dimensional [code]#id# to scalar types +have been defined. All of these modifications lead to simpler SYCL code in common +use cases. + +Some device-specific queries have been renamed to more clearly be "`device-specific +kernel`" [code]#get_info# queries ([code]#info::kernel_device_specific#) +instead of "`work-group`" ([code]#get_workgroup_info#) and sub-group +([code]#get_sub_group_info#) queries. + +A new math array type [code]#marray# has been defined to begin disambiguation +of the multiple possible interpretations of how [code]#sycl::vec# should be +interpreted and implemented. + +Changes in SYCL address spaces: + + * the address space meaning has been significantly improved; + * the generic address space was introduced; + * the constant address space was deprecated; + * behavior of unannotated pointer/reference (raw pointer/reference) is now + dependent on the compilation mode. The compiler can either interpret + unannotated pointer/reference has addressing the generic address space + or to be deduced; + * some ambiguities in the address space deduction were clarified. Notably + that deduced type does not affect the user-provided type. + +Changes in [code]#multi_ptr# interface: + + * addition of [code]#access::address_space::generic_space# to represent + the generic address space; + * deprecation of [code]#access::address_space::constant_space#; + * an extra template parameter to allow to select a flavor of the + [code]#multi_ptr# interface. There are now 3 different interfaces: + ** interface exposing undecorated types. Returned pointer and reference + are not annotated by an address space; + ** interface exposing decorated types. Returned pointer and reference are + annotated by an address space; + ** legacy 1.2.1 interface (deprecated). + * deprecation of the 1.2.1 interface; + * deprecation of [code]#constant_ptr#; + * [code]#global_ptr#, [code]#local_ptr# and + [code]#private_ptr# alias take the new extra parameter; + * addition of the [code]#address_space_cast# free function to cast + undecorated pointer to [code]#multi_pointer#; + * addition of construction/conversion operator for the generic address + space; + * removal of the constructor and assignment operator taking an unannotated + pointer; + * implicit conversion to a pointer is now deprecated. [code]#get# should + be used instead; + * the return type of the member function [code]#get# now depends on the + selected interface. + * addition of the member function [code]#get_raw# which returns the + underlying pointer as an unannotated pointer; + * addition of the member function [code]#get_decorated# which returns the + underlying pointer as an annotated pointer. + +The [code]#cl::sycl::byte# has been deprecated and now the {cpp17} +[code]#std::byte# should be used instead. + +A SYCL implementation is no longer required to provide a host device. +Instead, an implementation is only required to provide at least one +device. Implementations are still allowed to provide devices that are +implemented on the host, but it is no longer required. The specification +no longer defines any special semantics for a "host device" and APIs +specific to the host device have been removed. + +The default constructors for the [code]#device# and [code]#platform# classes +have been changed to construct a copy of the default device and a copy of the +platform containing the default device. Previously, they returned a copy of +the host device and a copy of the platform containing the host device. The +default constructor for the [code]#event# class has also been changed to +construct an event that comes from a default-constructed [code]#queue#. +Previously, it constructed an event that used the host backend. + +Explicit copy functions of the handler class +have also been introduced to the queue class as shortcuts for the handler ones. +This is enabled by the improved placeholder accessors +to help reduce code verbosity in certain cases +because the shortcut functions implicitly create a command group +and call [code]#handler::require#. + +Information query descriptors have been changed to structures under namespaces +named accordingly. [code]#param_traits# has been removed and the return type of +an information query is now contained in the descriptor. +The [code]#sycl::info::device::max_work_item_sizes# is now a +template that takes a dimension parameter corresponding to the number of +dimensions of the work-item size maxima. + +Changes to retrieving size information: + + * all [code]#get_size()# member functions have been deprecated + and replaced with [code]#byte_size()#, which is marked [code]#noexcept#; + * all [code]#get_count()# member functions have been deprecated + and replaced with [code]#size()#, which is marked [code]#noexcept#; + * in the [code]#vec# class the functions [code]#byte_size()# and [code]#size()# + are now static member functions; + * in the [code]#stream# class [code]#get_size()# has been deprecated + in favor of [code]#size()#, + whereas [code]#stream::byte_size()# is not available; + * accessors for sampled and unsampled images only define [code]#size()# + and not [code]#byte_size()#. + +The device descriptors [code]#info::device::max_constant_buffer_size# and +[code]#info::device::max_constant_args# are deprecated in SYCL 2020. + +The [code]#buffer_allocator# is now templated on the data type +and follows the C++ named requirement [code]#Allocator#. + +// Expose various workarounds showing how to typeset +, ++ and -- The +The SYCL [code]#id# and [code]#range# have now unary +pass:quotes[[code\]#+#] and [code]#-# operations, prefix +[code]#++# and [code]#--# operations, postfix +pass:quotes[[code\]#++#] and pass:quotes[[code\]#--#] operations which +were forgotten in SYCL 1.2.1. + +In SYCL 1.2.1, the [code]#handler::copy()# overload with two [code]#accessor# +parameters did not clearly specify which accessor's size determines the amount +of memory that is copied. The spec now clarifies that the [code]#src# +accessor's size is used. + +// %%%%%%%%%%%%%%%%%%%%%%%%%%%% end what_changed %%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/adoc/code/algorithms.cpp b/adoc/code/algorithms.cpp new file mode 100644 index 00000000..ddedb5a6 --- /dev/null +++ b/adoc/code/algorithms.cpp @@ -0,0 +1,35 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +buffer inputBuf { 1024 }; +buffer outputBuf { 2 }; +{ + // Initialize buffer on the host with 0, 1, 2, 3, ..., 1023 + host_accessor a { inputBuf }; + std::iota(a.begin(), a.end(), 0); +} + +myQueue.submit([&](handler & cgh) { + + accessor inputValues { inputBuf, cgh, read_only }; + accessor outputValues { outputBuf, cgh, write_only, no_init }; + + cgh.parallel_for(nd_range<1>(range<1>(16), range<1>(16)), + [=] (nd_item<1> it) { + + // Apply a group algorithm to any number of values, described by an iterator range + // The work-group reduces all inputValues and each work-item works on part of the range + int* first = inputValues.get_pointer(); + int* last = first + 1024; + int sum = joint_reduce(it.get_group(), first, last, plus<>()); + outputValues[0] = sum; + + // Apply a group algorithm to a set of values held directly by work-items + // The work-group reduces a number of values equal to the size of the group and each work-item provides one value + int partial_sum = reduce_over_group(it.get_group(), inputValues[it.get_linear_id()], plus<>()); + outputValues[1] = partial_sum; + + }); +}); + +assert(outputBuf.get_host_access()[0] == 523776 && outputBuf.get_host_access()[1] == 136); diff --git a/adoc/code/anatomy.cpp b/adoc/code/anatomy.cpp new file mode 100644 index 00000000..b891c382 --- /dev/null +++ b/adoc/code/anatomy.cpp @@ -0,0 +1,39 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +#include +#include +using namespace sycl; // (optional) avoids need for "sycl::" before SYCL names + +int main() { + int data[1024]; // Allocate data to be worked on + + // Create a default queue to enqueue work to the default device + queue myQueue; + + // By wrapping all the SYCL work in a {} block, we ensure + // all SYCL tasks must complete before exiting the block, + // because the destructor of resultBuf will wait + { + // Wrap our data variable in a buffer + buffer resultBuf { data, range<1> { 1024 } }; + + // Create a command group to issue commands to the queue + myQueue.submit([&](handler& cgh) { + // Request write access to the buffer without initialization + accessor writeResult { resultBuf, cgh, write_only, no_init }; + + // Enqueue a parallel_for task with 1024 work-items + cgh.parallel_for(1024, [=](id<1> idx) { + // Initialize each buffer element with its own rank number starting at 0 + writeResult[idx] = idx; + }); // End of the kernel function + }); // End of our commands for this queue + } // End of scope, so we wait for work producing resultBuf to complete + + // Print result + for (int i = 0; i < 1024; i++) + std::cout << "data[" << i << "] = " << data[i] << std::endl; + + return 0; +} diff --git a/adoc/code/aspectTraitExample.cpp b/adoc/code/aspectTraitExample.cpp new file mode 100644 index 00000000..fd3289e0 --- /dev/null +++ b/adoc/code/aspectTraitExample.cpp @@ -0,0 +1,33 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +#include +using namespace sycl; // (optional) avoids need for "sycl::" before SYCL names + +constexpr int N = 512; + +template +class MyKernel { + public: + void operator()(id<1> i) { + if constexpr (hasFp16) { + // Algorithm using sycl::half type + } else { + // Fall back code for devices that don't support sycl::half + } + } +}; + +int main() { + queue myQueue; + myQueue.submit([&](handler& cgh) { + device dev = myQueue.get_device(); + if (dev.has(aspect::fp16)) { + cgh.parallel_for(range{N}, MyKernel>{}); + } else { + cgh.parallel_for(range{N}, MyKernel>{}); + } + }); + + myQueue.wait(); +} diff --git a/adoc/code/attributes.cpp b/adoc/code/attributes.cpp new file mode 100644 index 00000000..e25a6f3d --- /dev/null +++ b/adoc/code/attributes.cpp @@ -0,0 +1,19 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +// Kernel defined as a lambda +myQueue.submit([&](handler &h) { + h.parallel_for( range<1>(16), + [=] (item<1> it) [[sycl::reqd_work_group_size(16)]] { + //[kernel code] + }); +}); + +// Kernel defined as a functor to be invoked later +class KernelFunctor { + public: + void operator()(item<1> it) const [[sycl::reqd_work_group_size(16)]] { + //[kernel code] + }; +}; + diff --git a/adoc/code/basicParallelForGeneric.cpp b/adoc/code/basicParallelForGeneric.cpp new file mode 100755 index 00000000..d6d76327 --- /dev/null +++ b/adoc/code/basicParallelForGeneric.cpp @@ -0,0 +1,13 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +myQueue.submit([&](handler & cgh) { + auto acc = myBuffer.get_access(cgh); + + cgh.parallel_for(range<1>(numWorkItems), + [=] (auto item) { + // kernel argument type is auto treated as an item + size_t index = item.get_linear_id(); + acc[index] = index; + }); +}); diff --git a/adoc/code/basicParallelForIntegral.cpp b/adoc/code/basicParallelForIntegral.cpp new file mode 100755 index 00000000..7b638a75 --- /dev/null +++ b/adoc/code/basicParallelForIntegral.cpp @@ -0,0 +1,12 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +myQueue.submit([&](handler & cgh) { + auto acc = myBuffer.get_access(cgh); + + cgh.parallel_for(range<1>(numWorkItems), + [=] (size_t index) { + // kernel argument type is size_t + acc[index] = index; + }); +}); diff --git a/adoc/code/basicParallelForItem.cpp b/adoc/code/basicParallelForItem.cpp new file mode 100644 index 00000000..fb3cd176 --- /dev/null +++ b/adoc/code/basicParallelForItem.cpp @@ -0,0 +1,13 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +myQueue.submit([&](handler & cgh) { + accessor acc { myBuffer, cgh, write_only }; + + cgh.parallel_for(range<1>(numWorkItems), + [=] (item<1> item) { + // kernel argument type is item + size_t index = item.get_linear_id(); + acc[index] = index; + }); +}); diff --git a/adoc/code/basicParallelForNumber.cpp b/adoc/code/basicParallelForNumber.cpp new file mode 100755 index 00000000..ed62c0e5 --- /dev/null +++ b/adoc/code/basicParallelForNumber.cpp @@ -0,0 +1,13 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +myQueue.submit([&](handler & cgh) { + auto acc = myBuffer.get_access(cgh); + + // parallel_for may be called with number (with numWorkItems) + cgh.parallel_for(numWorkItems, + [=] (auto item) { + size_t index = item.get_linear_id(); + acc[index] = index; + }); +}); diff --git a/adoc/code/basicparallelfor.cpp b/adoc/code/basicparallelfor.cpp new file mode 100644 index 00000000..18f74caf --- /dev/null +++ b/adoc/code/basicparallelfor.cpp @@ -0,0 +1,11 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +myQueue.submit([&](handler & cgh) { + accessor acc { myBuffer, cgh, write_only }; + + cgh.parallel_for(range<1>(numWorkItems), + [=] (id<1> index) { + acc[index] = 42.0f; + }); +}); diff --git a/adoc/code/bundle-builtin-kernel.cpp b/adoc/code/bundle-builtin-kernel.cpp new file mode 100644 index 00000000..2faa44c6 --- /dev/null +++ b/adoc/code/bundle-builtin-kernel.cpp @@ -0,0 +1,33 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +#include +using namespace sycl; // (optional) avoids need for "sycl::" before SYCL names + +int main() { + queue myQueue; + auto myContext = myQueue.get_context(); + auto myDevice = myQueue.get_device(); + + const std::vector builtinKernelIds = + myDevice.get_info(); + + // Get an executable kernel_bundle containing all the built-in kernels + // supported by the device. + kernel_bundle myBundle = + get_kernel_bundle(myContext, {myDevice}, builtinKernelIds); + + // Retrieve a kernel object that can be used to query for more information + // about the built-in kernel or to submit it to a command group. We assume + // here that the device supports at least one built-in kernel. + kernel builtinKernel = myBundle.get_kernel(builtinKernelIds[0]); + + // Submit the built-in kernel. + myQueue.submit([&](handler &cgh) { + // Setting the arguments depends on the backend and the exact kernel used. + cgh.set_args(...); + cgh.parallel_for(range{1024}, builtinKernel); + }); + + myQueue.wait(); +} diff --git a/adoc/code/bundle-kernel-introspection.cpp b/adoc/code/bundle-kernel-introspection.cpp new file mode 100644 index 00000000..118e7771 --- /dev/null +++ b/adoc/code/bundle-kernel-introspection.cpp @@ -0,0 +1,41 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +#include +using namespace sycl; // (optional) avoids need for "sycl::" before SYCL names + +class MyKernel; // Forward declare the name of our kernel. + +int main() { + size_t N = 1024; + queue myQueue; + auto myContext = myQueue.get_context(); + auto myDev = myQueue.get_device(); + + // Get an executable kernel bundle containing our kernel. + kernel_id kernelId = get_kernel_id(); + auto myBundle = get_kernel_bundle(myContext, kernelId); + + // Get the kernel's maximum work group size when running on our device. + kernel myKernel = myBundle.get_kernel(kernelId); + size_t maxWgSize = myKernel.get_info(myDev); + + // Compute a good ND-range to use for iteration in the kernel + // based on the maximum work group size. + std::array divisors = {1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1}; + size_t wgSize = *std::find_if(divisors.begin(), divisors.end(), [=](auto d) { + return (d <= maxWgSize); + }); + nd_range myRange {range{N}, range{wgSize}}; + + myQueue.submit([&](handler& cgh) { + // Use the kernel bundle we queried, so we are sure the queried work-group + // size matches the kernel we run. + cgh.use_kernel_bundle(myBundle); + cgh.parallel_for(myRange, ([=](nd_item<1> index) { + // kernel code + })); + }); + + myQueue.wait(); +} diff --git a/adoc/code/bundle-pre-compile.cpp b/adoc/code/bundle-pre-compile.cpp new file mode 100644 index 00000000..651d09d3 --- /dev/null +++ b/adoc/code/bundle-pre-compile.cpp @@ -0,0 +1,27 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +#include +using namespace sycl; // (optional) avoids need for "sycl::" before SYCL names + +int main() { + queue myQueue; + auto myContext = myQueue.get_context(); + + // This call to get_kernel_bundle() forces an online compilation of all the + // application's kernels for the device in "myContext", unless those kernels + // were already compiled for that device by the ahead-of-time compiler. + auto myBundle = get_kernel_bundle(myContext); + + myQueue.submit([&](handler& cgh) { + // Calling use_kernel_bundle() causes the parallel_for() below to use the + // pre-compiled kernel from "myBundle". + cgh.use_kernel_bundle(myBundle); + + cgh.parallel_for(range{1024}, ([=](item index) { + // kernel code + })); + }); + + myQueue.wait(); +} diff --git a/adoc/code/bundle-spec-constants.cpp b/adoc/code/bundle-spec-constants.cpp new file mode 100644 index 00000000..df5b6f88 --- /dev/null +++ b/adoc/code/bundle-spec-constants.cpp @@ -0,0 +1,55 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +#include +using namespace sycl; // (optional) avoids need for "sycl::" before SYCL names + +// Forward declare names for our two kernels. +class MyKernel1; +class MyKernel2; + +extern int get_width(); +extern int get_height(); + +// Declare specialization constants used in our kernels. +specialization_id width; +specialization_id height; + +int main() { + queue myQueue; + auto myContext = myQueue.get_context(); + + // Get the identifiers for our kernels, then get an input kernel bundle that + // contains our two kernels. + auto kernelIds = {get_kernel_id(), get_kernel_id()}; + auto inputBundle = get_kernel_bundle(myContext, kernelIds); + + // Set the values of the specialization constants. + inputBundle.set_specialization_constant(get_width()); + inputBundle.set_specialization_constant(get_height()); + + // Build the kernel bundle into an executable form. The values of the + // specialization constants are compiled in. + auto exeBundle = build(inputBundle); + + myQueue.submit([&](handler& cgh) { + // Use the kernel bundle we built in this command group. + cgh.use_kernel_bundle(exeBundle); + cgh.parallel_for(range{1024}, ([=](item index, kernel_handler kh) { + // Read the value of the specialization constant. + int w = kh.get_specialization_constant(); + // ... + })); + }); + + myQueue.submit([&](handler& cgh) { + // This command group uses the same kernel bundle. + cgh.use_kernel_bundle(exeBundle); + cgh.parallel_for(range{1024}, ([=](item index, kernel_handler kh) { + int h = kh.get_specialization_constant(); + // ... + })); + }); + + myQueue.wait(); +} diff --git a/adoc/code/explicitcopy.cpp b/adoc/code/explicitcopy.cpp new file mode 100644 index 00000000..ffa8e32c --- /dev/null +++ b/adoc/code/explicitcopy.cpp @@ -0,0 +1,23 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +const size_t nElems = 10u; + +// Create a vector and fill it with values 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 +std::vector v { nElems }; +std::iota(std::begin(v), std::end(v), 0); + +// Create a buffer with no associated user storage +sycl::buffer b { range<1>(nElems) }; + +// Create a queue +queue myQueue; + +myQueue.submit([&](handler &cgh) { + // Retrieve a ranged write accessor to a global buffer with access to the + // first half of the buffer + accessor acc { b, cgh, range<1>(nElems / 2), id<1>(0), write_only }; + // Copy the first five elements of the vector into the buffer associated with + // the accessor + cgh.copy(v.data(), acc); +}); diff --git a/adoc/code/handlingBackendErrorCode.cpp b/adoc/code/handlingBackendErrorCode.cpp new file mode 100644 index 00000000..65f8f356 --- /dev/null +++ b/adoc/code/handlingBackendErrorCode.cpp @@ -0,0 +1,28 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +void catch_backend_errors(sycl::context const& ctx) { + try { + do_something_to_invoke_error(ctx); + } + catch(sycl::exception const& e) { + if(e.category() == sycl::error_category_for()) { + switch(e.code().value()) { + case CL_INVALID_PROGRAM: + std::cerr << "OpenCL invalid program error: " << e.what(); + /* ...*/ + } + else { + throw; + } + } + else { + if(e.code() == sycl::errc::invalid) { + std::cerr << "Invalid error: " << e.what(); + } + else { + throw; + } + } + } +} diff --git a/adoc/code/handlingErrorCode.cpp b/adoc/code/handlingErrorCode.cpp new file mode 100644 index 00000000..e21ebf29 --- /dev/null +++ b/adoc/code/handlingErrorCode.cpp @@ -0,0 +1,16 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +void catch_invalid_errors(sycl::context const& ctx) { + try { + do_something_to_invoke_error(ctx); + } + catch(sycl::exception const& e) { + if(e.code() == sycl::errc::invalid) { + std::cerr << "Invalid error: " << e.what(); + } + else { + throw; + } + } +} diff --git a/adoc/code/handlingException.cpp b/adoc/code/handlingException.cpp new file mode 100644 index 00000000..484ec6d6 --- /dev/null +++ b/adoc/code/handlingException.cpp @@ -0,0 +1,11 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +void catch_any_errors(sycl::context const& ctx) { + try { + do_something_to_invoke_error(ctx); + } + catch(sycl::exception const& e) { + std::cerr << e.what(); + } +} diff --git a/adoc/code/lambdaNameExamples.cpp b/adoc/code/lambdaNameExamples.cpp new file mode 100644 index 00000000..16f16988 --- /dev/null +++ b/adoc/code/lambdaNameExamples.cpp @@ -0,0 +1,57 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +// Explicit kernel names can be optionally forward declared at namespace scope +class MyForwardDeclName; + +template +class MyTemplatedKernelName; + +// Define and launch templated kernel +template +void templatedFunction() { + queue myQueue; + + // Launch A: No explicit kernel name + myQueue.submit([&](handler& h) { + h.single_task([=]{ + // [kernel code that depends on type T] + }); + }); + + // Launch B: Name the kernel when invoking (this is optional) + myQueue.submit([&](handler& h) { + h.single_task>([=]{ + // The provided kernel name (MyTemplatedKernelName) depends on T + // because the kernel does. T must also be forward declarable at + // namespace scope. + + // [kernel code that depends on type T] + }); + }); +} + +int main() { + queue myQueue; + + myQueue.submit([&](handler& h) { + // Declare MyKernel within this kernel invocation. Legal because + // forward declaration at namespace scope is optional + h.single_task([=]{ + // [kernel code] + }); + }); + + myQueue.submit([&](handler& h) { + // Use kernel name that was forward declared at namespace scope + h.single_task([=]{ + // [kernel code] + }); + }); + + templatedFunction(); // OK + + templatedFunction>(); // Launch A is OK, Launch B illegal + // because std::complex is not forward declarable according to C++, and was + // used in an explicit kernel name which must be forward declarable. +} diff --git a/adoc/code/largesample.cpp b/adoc/code/largesample.cpp new file mode 100644 index 00000000..d5a58507 --- /dev/null +++ b/adoc/code/largesample.cpp @@ -0,0 +1,80 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +#include +#include +using namespace sycl; // (optional) avoids need for "sycl::" before SYCL names + +// Size of the matrices +constexpr size_t N = 2000; +constexpr size_t M = 3000; + +int main() { + // Create a queue to work on + queue myQueue; + + // Create some 2D buffers of float for our matrices + buffer a { range<2>{N, M} }; + buffer b { range<2>{N, M} }; + buffer c { range<2>{N, M} }; + + // Launch an asynchronous kernel to initialize a + myQueue.submit([&](handler& cgh) { + // The kernel writes a, so get a write accessor on it + accessor A { a, cgh, write_only }; + + // Enqueue a parallel kernel iterating on a N*M 2D iteration space + cgh.parallel_for(range<2> {N, M}, [=](id<2> index) { + A[index] = index[0] * 2 + index[1]; + }); + }); + + // Launch an asynchronous kernel to initialize b + myQueue.submit([&](handler& cgh) { + // The kernel writes b, so get a write accessor on it + accessor B { b, cgh, write_only }; + + // From the access pattern above, the SYCL runtime detects that this + // command_group is independent from the first one and can be + // scheduled independently + + // Enqueue a parallel kernel iterating on a N*M 2D iteration space + cgh.parallel_for(range<2> {N, M}, [=](id<2> index) { + B[index] = index[0] * 2014 + index[1] * 42; + }); + }); + + // Launch an asynchronous kernel to compute matrix addition c = a + b + myQueue.submit([&](handler& cgh) { + // In the kernel a and b are read, but c is written + accessor A { a, cgh, read_only }; + accessor B { b, cgh, read_only }; + accessor C { c, cgh, write_only }; + + // From these accessors, the SYCL runtime will ensure that when + // this kernel is run, the kernels computing a and b have completed + + // Enqueue a parallel kernel iterating on a N*M 2D iteration space + cgh.parallel_for(range<2> {N, M}, [=](id<2> index) { + C[index] = A[index] + B[index]; + }); + }); + + // Ask for an accessor to read c from application scope. The SYCL runtime + // waits for c to be ready before returning from the constructor + host_accessor C { c, read_only }; + std::cout << std::endl << "Result:" << std::endl; + for (size_t i = 0; i < N; i++) { + for (size_t j = 0; j < M; j++) { + // Compare the result to the analytic value + if (C[i][j] != i * (2 + 2014) + j * (1 + 42)) { + std::cout << "Wrong value " << C[i][j] << " on element " << i << " " + << j << std::endl; + exit(-1); + } + } + } + + std::cout << "Good computation!" << std::endl; + return 0; +} diff --git a/adoc/code/myfunctor.cpp b/adoc/code/myfunctor.cpp new file mode 100644 index 00000000..c89dcf22 --- /dev/null +++ b/adoc/code/myfunctor.cpp @@ -0,0 +1,27 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +class RandomFiller { + public: + RandomFiller(accessor ptr) + : ptr_ { ptr } { + std::random_device hwRand; + std::uniform_int_distribution<> r { 1, 100 }; + randomNum_ = r(hwRand); + } + void operator()(item<1> item) const { ptr_[item.get_id()] = get_random(); } + int get_random() { return randomNum_; } + + private: + accessor ptr_; + int randomNum_; +}; + +void workFunction(buffer& b, queue& q, const range<1> r) { + myQueue.submit([&](handler& cgh) { + accessor ptr { buf, cgh }; + RandomFiller filler { ptr }; + + cgh.parallel_for(r, filler); + }); +} diff --git a/adoc/code/mykernel.cpp b/adoc/code/mykernel.cpp new file mode 100644 index 00000000..7c003bcf --- /dev/null +++ b/adoc/code/mykernel.cpp @@ -0,0 +1,20 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +// Explicit kernel names can be optionally forward declared at namespace scope +class MyKernel; + +myQueue.submit([&](handler& h) { + + // Explicitly name kernel with previously forward declared type + h.single_task([=]{ + // [kernel code] + }); + + // Explicitly name kernel without forward declaring type at + // namespace scope. Must still be forward declarable at + // namespace scope, even if not declared at that scope + h.single_task([=]{ + // [kernel code] + }); +}); diff --git a/adoc/code/parallelForWithKernelHandler.cpp b/adoc/code/parallelForWithKernelHandler.cpp new file mode 100644 index 00000000..ad410830 --- /dev/null +++ b/adoc/code/parallelForWithKernelHandler.cpp @@ -0,0 +1,20 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +myQueue.submit([&](handler & cgh) { + cgh.parallel_for( + range<3>(3,3,3), // global range + [=] (item<3> it, kernel_handler kh) { + //[kernel code] + }); +}); + +// This form of parallel_for with the "offset" parameter is deprecated in SYCL 2020 +myQueue.submit([&](handler & cgh) { + cgh.parallel_for( + range<3>(3,3,3), // global range + id<3>(1,1,1), // offset + [=] (item<3> it, kernel_handler kh) { + //[kernel code] + }); +}); diff --git a/adoc/code/parallelForWorkGroupWithKernelHandler.cpp b/adoc/code/parallelForWorkGroupWithKernelHandler.cpp new file mode 100644 index 00000000..d3af99c9 --- /dev/null +++ b/adoc/code/parallelForWorkGroupWithKernelHandler.cpp @@ -0,0 +1,33 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +myQueue.submit([&](handler & cgh) { + // Issue 8 work-groups of 8 work-items each + cgh.parallel_for_work_group( + range<3>(2, 2, 2), range<3>(2, 2, 2), [=](group<3> myGroup, + kernel_handler kh) { + + //[workgroup code] + int myLocal; // this variable is shared between workitems + // this variable will be instantiated for each work-item separately + private_memory myPrivate(myGroup); + + // Issue parallel work-items. The number issued per work-group is determined + // by the work-group size range of parallel_for_work_group. In this case, + // 8 work-items will execute the parallel_for_work_item body for each of the + // 8 work-groups, resulting in 64 executions globally/total. + myGroup.parallel_for_work_item([&](h_item<3> myItem) { + //[work-item code] + myPrivate(myItem) = 0; + }); + + // Implicit work-group barrier + + // Carry private value across loops + myGroup.parallel_for_work_item([&](h_item<3> myItem) { + //[work-item code] + output[myItem.get_global_id()] = myPrivate(myItem); + }); + //[workgroup code] + }); +}); diff --git a/adoc/code/parallelfor.cpp b/adoc/code/parallelfor.cpp new file mode 100644 index 00000000..5b547382 --- /dev/null +++ b/adoc/code/parallelfor.cpp @@ -0,0 +1,20 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +myQueue.submit([&](handler & cgh) { + cgh.parallel_for( + range<3>(3,3,3), // global range + [=] (item<3> it) { + //[kernel code] + }); +}); + +// This form of parallel_for with the "offset" parameter is deprecated in SYCL 2020 +myQueue.submit([&](handler & cgh) { + cgh.parallel_for( + range<3>(3,3,3), // global range + id<3>(1,1,1), // offset + [=] (item<3> it) { + //[kernel code] + }); +}); diff --git a/adoc/code/parallelforbarrier.cpp b/adoc/code/parallelforbarrier.cpp new file mode 100644 index 00000000..0ad33fa5 --- /dev/null +++ b/adoc/code/parallelforbarrier.cpp @@ -0,0 +1,12 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +myQueue.submit([&](handler & cgh) { + cgh.parallel_for( + nd_range<3>(range<3>(4, 4, 4), range<3>(2, 2, 2)), [=](nd_item<3> item) { + //[kernel code] + // Internal synchronization + group_barrier(item.get_group()); + //[kernel code] + }); +}); diff --git a/adoc/code/parallelforworkgroup.cpp b/adoc/code/parallelforworkgroup.cpp new file mode 100644 index 00000000..a3a27f9f --- /dev/null +++ b/adoc/code/parallelforworkgroup.cpp @@ -0,0 +1,32 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +myQueue.submit([&](handler & cgh) { + // Issue 8 work-groups of 8 work-items each + cgh.parallel_for_work_group( + range<3>(2, 2, 2), range<3>(2, 2, 2), [=](group<3> myGroup) { + + //[workgroup code] + int myLocal; // this variable is shared between workitems + // this variable will be instantiated for each work-item separately + private_memory myPrivate(myGroup); + + // Issue parallel work-items. The number issued per work-group is determined + // by the work-group size range of parallel_for_work_group. In this case, + // 8 work-items will execute the parallel_for_work_item body for each of the + // 8 work-groups, resulting in 64 executions globally/total. + myGroup.parallel_for_work_item([&](h_item<3> myItem) { + //[work-item code] + myPrivate(myItem) = 0; + }); + + // Implicit work-group barrier + + // Carry private value across loops + myGroup.parallel_for_work_item([&](h_item<3> myItem) { + //[work-item code] + output[myItem.get_global_id()] = myPrivate(myItem); + }); + //[workgroup code] + }); +}); diff --git a/adoc/code/parallelforworkgroup2.cpp b/adoc/code/parallelforworkgroup2.cpp new file mode 100644 index 00000000..6a512549 --- /dev/null +++ b/adoc/code/parallelforworkgroup2.cpp @@ -0,0 +1,27 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +myQueue.submit([&](handler & cgh) { + // Issue 8 work-groups. The work-group size is chosen by the runtime because unspecified + cgh.parallel_for_work_group( + range<3>(2, 2, 2), [=](group<3> myGroup) { + + // Launch a set of work-items for each work-group. The number of work-items is chosen + // by the runtime because the work-group size was not specified to parallel_for_work_group + // and a logical range is not specified to parallel_for_work_item. + myGroup.parallel_for_work_item([=](h_item<3> myItem) { + //[work-item code] + }); + + // Implicit work-group barrier + + // Launch 512 logical work-items that will be executed by the underlying work-group size + // chosen by the runtime. myItem allows the logical and physical work-item IDs to be + // queried. 512 logical work-items will execute for each work-group, and the parallel_for + // body will therefore be executed 8*512 = 4096 times globally/total. + myGroup.parallel_for_work_item(range<3>(8, 8, 8), [=](h_item<3> myItem) { + //[work-item code] + }); + //[workgroup code] + }); +}); diff --git a/adoc/code/propertyExample.cpp b/adoc/code/propertyExample.cpp new file mode 100644 index 00000000..6c8070b5 --- /dev/null +++ b/adoc/code/propertyExample.cpp @@ -0,0 +1,19 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +{ + context myContext; + + std::vector> bufferList { + buffer{ptr, rng}, + buffer{ptr, rng, property::use_host_ptr{}}, + buffer{ptr, rng, property::context_bound{myContext}} + }; + + for(auto& buf : bufferList) { + if (buf.has_property()) { + auto prop = buf.get_property(); + assert(myContext == prop.get_context()); + } + } +} diff --git a/adoc/code/queueShortcuts.cpp b/adoc/code/queueShortcuts.cpp new file mode 100644 index 00000000..b167d111 --- /dev/null +++ b/adoc/code/queueShortcuts.cpp @@ -0,0 +1,20 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +class MyKernel; + +auto usmPtr = malloc_device(1024); // USM pointer + +int* data = /* pointer to some data */; +buffer buf{data, 1024}; +accessor acc{buf}; // Placeholder accessor + +// Queue shortcut for a kernel invocation +myQueue.single_task([=] { + // Allowed to use USM pointers, + // not allowed to use accessors + usmPtr[0] = 0; +}); + +// Placeholder accessor will automatically be registered +myQueue.copy(data, acc); diff --git a/adoc/code/reduction.cpp b/adoc/code/reduction.cpp new file mode 100644 index 00000000..f30c50d7 --- /dev/null +++ b/adoc/code/reduction.cpp @@ -0,0 +1,42 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +buffer valuesBuf { 1024 }; +{ + // Initialize buffer on the host with 0, 1, 2, 3, ..., 1023 + host_accessor a { valuesBuf }; + std::iota(a.begin(), a.end(), 0); +} + +// Buffers with just 1 element to get the reduction results +int sumResult = 0; +buffer sumBuf { &sumResult, 1 }; +int maxResult = 0; +buffer maxBuf { &maxResult, 1 }; + +myQueue.submit([&](handler& cgh) { + + // Input values to reductions are standard accessors + auto inputValues = valuesBuf.get_access(cgh); + + // Create temporary objects describing variables with reduction semantics + auto sumReduction = reduction(sumBuf, cgh, plus<>()); + auto maxReduction = reduction(maxBuf, cgh, maximum<>()); + + // parallel_for performs two reduction operations + // For each reduction variable, the implementation: + // - Creates a corresponding reducer + // - Passes a reference to the reducer to the lambda as a parameter + cgh.parallel_for(range<1>{1024}, + sumReduction, maxReduction, + [=](id<1> idx, auto& sum, auto& max) { + // plus<>() corresponds to += operator, so sum can be updated via += or combine() + sum += inputValues[idx]; + + // maximum<>() has no shorthand operator, so max can only be updated via combine() + max.combine(inputValues[idx]); + }); +}); + +// sumBuf and maxBuf contain the reduction results once the kernel completes +assert(maxBuf.get_host_access()[0] == 1023 && sumBuf.get_host_access()[0] == 523776); diff --git a/adoc/code/requires.cpp b/adoc/code/requires.cpp new file mode 100644 index 00000000..8d3b4c2d --- /dev/null +++ b/adoc/code/requires.cpp @@ -0,0 +1,30 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +class KernelFunctor { + public: + void operator()(item<1> it) const [[sycl::requires(has(aspect::fp16))]] { + foo(); + bar(); + }; + + private: + void foo() const { + half fp = 1.0; // No compiler diagnostic here + } + + void bar() const { + sycl::atomic_ref longAtomic(longValue); + longAtomic.fetchAdd(1); // ERROR: Compiler issues diagnostic because + // "aspect::atomic64" missing from "has()" + } +}; + +// Using "sycl::requires()" does not provide any guarantee that the device +// actually supports the required features. Therefore, the host code should +// still check the devices aspects before submitting the kernel. +if (myQueue.get_device().has(aspect::fp16)) { + myQueue.submit([&](handler &h) { + h.parallel_for(range{16}, KernelFunctor{}); + }); +} diff --git a/adoc/code/singleTaskWithKernelHandler.cpp b/adoc/code/singleTaskWithKernelHandler.cpp new file mode 100644 index 00000000..c1ea772c --- /dev/null +++ b/adoc/code/singleTaskWithKernelHandler.cpp @@ -0,0 +1,9 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +myQueue.submit([&](handler & cgh) { +cgh.single_task( + [=] (kernel_handler kh) { + // [kernel code] + })); +}); diff --git a/adoc/code/singletask.cpp b/adoc/code/singletask.cpp new file mode 100644 index 00000000..f007ba44 --- /dev/null +++ b/adoc/code/singletask.cpp @@ -0,0 +1,9 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +myQueue.submit([&](handler & cgh) { +cgh.single_task( + [=] () { + // [kernel code] + })); +}); diff --git a/adoc/code/subbuffer.cpp b/adoc/code/subbuffer.cpp new file mode 100644 index 00000000..08752c4a --- /dev/null +++ b/adoc/code/subbuffer.cpp @@ -0,0 +1,16 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +buffer parent_buffer { range<2>{ 8,8 } }; // Create 2-d buffer with 8x8 ints + +// OK: Contiguous region from middle of buffer +buffer sub_buf1 { parent_buffer, /*offset*/ range<2>{ 2,0 }, /*size*/ range<2>{ 2,8 } }; + +// invalid exception: Non-contiguous regions of 2-d buffer +buffer sub_buf2 { parent_buffer, /*offset*/ range<2>{ 2,0 }, /*size*/ range<2>{ 2,2 } }; +buffer sub_buf3 { parent_buffer, /*offset*/ range<2>{ 2,2 }, /*size*/ range<2>{ 2,6 } }; + +// invalid exception: Out-of-bounds size +buffer sub_buf4 { parent_buffer, /*offset*/ range<2>{ 2,2 }, /*size*/ range<2>{ 2,8 } }; + + diff --git a/adoc/code/twoOptionalFeatures.cpp b/adoc/code/twoOptionalFeatures.cpp new file mode 100644 index 00000000..bb2df277 --- /dev/null +++ b/adoc/code/twoOptionalFeatures.cpp @@ -0,0 +1,23 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +queue q1(dev1); +if (dev1.has(aspect::fp16)) { + q1.submit([&](handler &cgh) { + cgh.parallel_for(range{N}, [=](id i) { + half fpShort = 1.0; + /* ... */ + }); + }); +} + +queue q2(dev2); +if (dev2.has(aspect::atomic64)) { + q2.submit([&](handler &cgh) { + cgh.parallel_for(range{N}, [=](id i) { + /* ... */ + sycl::atomic_ref longAtomic(longValue); + longAtomic.fetch_add(1); + }); + }); +} diff --git a/adoc/code/usingSpecConstants.cpp b/adoc/code/usingSpecConstants.cpp new file mode 100644 index 00000000..ec3247d3 --- /dev/null +++ b/adoc/code/usingSpecConstants.cpp @@ -0,0 +1,47 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +#include +using namespace sycl; // (optional) avoids need for "sycl::" before SYCL names + +using coeff_t = std::array, 3>; + +// Read coefficients from somewhere. +coeff_t get_coefficients(); + +// Identify the specialization constant. +specialization_id coeff_id; + +void do_conv(buffer in, buffer out) { + queue myQueue; + + myQueue.submit([&](handler &cgh) { + accessor in_acc { in, cgh, read_only }; + accessor out_acc { out, cgh, write_only }; + + // Set the coefficient of the convolution as constant. + // This will build a specific kernel the coefficient available as literals. + cgh.set_specialization_constant(get_coefficients()); + + cgh.parallel_for( + in.get_range(), [=](item<2> item_id, kernel_handler h) { + float acc = 0; + coeff_t coeff = h.get_specialization_constant(); + for (int i = -1; i <= 1; i++) { + if (item_id[0] + i < 0 || item_id[0] + i >= in_acc.get_range()[0]) + continue; + for (int j = -1; j <= 1; j++) { + if (item_id[1] + j < 0 || item_id[1] + j >= in_acc.get_range()[1]) + continue; + // The underlying JIT can see all the values of the array returned + // by coeff.get(). + acc += coeff[i + 1][j + 1] * + in_acc[item_id[0] + i][item_id[1] + j]; + } + } + out_acc[item_id] = acc; + }); + }); + + myQueue.wait(); +} diff --git a/adoc/code/usm_device.cpp b/adoc/code/usm_device.cpp new file mode 100644 index 00000000..c7fae9c4 --- /dev/null +++ b/adoc/code/usm_device.cpp @@ -0,0 +1,35 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +#include +#include +using namespace sycl; // (optional) avoids need for "sycl::" before SYCL names + +int main() { + // Create a default queue to enqueue work to the default device + queue myQueue; + + // Allocate shared memory bound to the device and context associated to the queue + int *data = sycl::malloc_device(1024, myQueue); + + myQueue.parallel_for(1024, [=](id<1> idx) { + // Initialize each buffer element with its own rank number starting at 0 + data[idx] = idx; + }); // End of the kernel function + + // Explicitly wait for kernel execution since there is no accessor involved + myQueue.wait(); + + // Create an array to receive the device content + int hostData[1024]; + // Receive the content from the device + myQueue.memcpy(hostData, data, 1024*sizeof(int)); + // Wait for the copy to complete + myQueue.wait(); + + // Print result + for (int i = 0; i < 1024; i++) + std::cout <<"hostData["<< i << "] = " << hostData[i] << std::endl; + + return 0; +} diff --git a/adoc/code/usm_shared.cpp b/adoc/code/usm_shared.cpp new file mode 100644 index 00000000..9d9928e9 --- /dev/null +++ b/adoc/code/usm_shared.cpp @@ -0,0 +1,30 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +#include +#include +using namespace sycl; // (optional) avoids need for "sycl::" before SYCL names + +int main() { + // Create a default queue to enqueue work to the default device + queue myQueue; + + // Allocate shared memory bound to the device and context associated to the queue + // Replacing malloc_shared with malloc_host would yield a correct program that + // allocated device-visible memory on the host. + int *data = sycl::malloc_shared(1024, myQueue); + + myQueue.parallel_for(1024, [=](id<1> idx) { + // Initialize each buffer element with its own rank number starting at 0 + data[idx] = idx; + }); // End of the kernel function + + // Explicitly wait for kernel execution since there is no accessor involved + myQueue.wait(); + + // Print result + for (int i = 0; i < 1024; i++) + std::cout <<"data["<< i << "] = " << data[i] << std::endl; + + return 0; +} diff --git a/adoc/config/README.md b/adoc/config/README.md new file mode 100644 index 00000000..073bad06 --- /dev/null +++ b/adoc/config/README.md @@ -0,0 +1,30 @@ +# Vulkan Asciidoc Configuration Files + +## Macros + +The macros in `spec-macros.rb` and `spec-macros/extension.rb` are +described in the "Vulkan Documentation and Extensions: Procedures and +Conventions" document (see the [styleguide](../styleguide.txt)). + +## Support for Math + +Asciidoctor is customized to insert KaTeX ` +' + + output.sub! /(?=<\/head>)/, loaded_script + output.sub! /(
$ERRFILE + +status=$? +if test $status -ne 0 ; then + echo "$0: $GS return status = $status, aborting" +elif grep -q Error $ERRFILE ; then + echo "$0: $GS succeeded but found Error in $ERRFILE (follows), aborting" + echo '---------- Errors from $GS ----------' + grep Error $ERRFILE + echo '-------------------------------------' + status=1 +else + rm -f $ERRFILE +fi + +exit $status diff --git a/adoc/config/rouge/lib/rouge/lexers/sycl.rb b/adoc/config/rouge/lib/rouge/lexers/sycl.rb new file mode 100644 index 00000000..3cc365a3 --- /dev/null +++ b/adoc/config/rouge/lib/rouge/lexers/sycl.rb @@ -0,0 +1,464 @@ +# -*- coding: utf-8 -*- # +# frozen_string_literal: true + +module Rouge + module Lexers + load_lexer 'cpp.rb' + + class Sycl < Cpp + title "SYCL" + desc "The standard SYCL C++ for heterogeneous computing from Khronos Group" + + tag 'sycl' + + sycl_data_types = %w( + char2 char3 char4 char8 char16 + double2 double3 double4 double8 double16 + float2 float3 float4 float8 float16 + half half2 half3 half4 half8 half16 + int2 int3 int4 int8 int16 + long2 long3 long4 long8 long16 + longlong2 longlong3 longlong4 longlong8 longlong16 + schar2 schar3 schar4 schar8 schar16 + short2 short3 short4 short8 short16 + uchar2 uchar3 uchar4 uchar8 uchar16 + uint2 uint3 uint4 uint8 uint16 + ulong2 ulong3 ulong4 ulong8 ulong16 + ulonglong2 ulonglong3 ulonglong4 ulonglong8 ulonglong16 + ushort2 ushort3 ushort4 ushort8 ushort16 + ) + + # Split member functions from free functions? + sycl_functions = %w( + aligned_alloc + aligned_alloc_device + aligned_alloc_host + aligned_alloc_shared + all_of + any_of + aspect_selector + barrier + byte_size + copy + create_sub_devices + depends_on + exclusive_scan + fill + free + get + get_access + get_allocator + get_backend + get_backend_info + get_context + get_count + get_device + get_devices + get_host_access + get_info + get_native + get_native_context + get_native_device + get_native_mem + get_native_queue + get_platform + get_platforms + get_pointer_device + get_pointer_type + get_profiling_info + get_property + get_size + get_wait_list + group_all_of + group_any_of + group_barrier + group_broadcast + group_exclusive_scan + group_inclusive_scan + group_none_of + group_reduce + has + has_extension + has_property + host_task + inclusive_scan + is_cpu + is_gpu + is_accelerator + is_in_order + is_sub_buffer + make_buffer + make_context + make_device + make_event + make_image_sampler + make_kernel + make_kernel_bundle + make_platform + make_queue + make_sampled_image + make_sampler + make_stream + make_unsampled_image + malloc + malloc_device + malloc_host + malloc_shared + mem_advise + memcpy + memset + none_of + parallel_for + parallel_for_work_group + parallel_for_work_item + param_traits + prefetch + reduce + reinterpret + set_final_data + set_write_back + single_task + submit + throw_asynchronous + update_host + wait + wait_and_throw + ) + + # Generic types used in SYCL pseudo code descriptions like Gen, + # SGen, GenVec... + sycl_generic_types = %w( + charn + doublen + floatn + genchar + genfloat + genfloatd + genfloatf + genfloath + genfloatptr + gengeodouble + gengeofloat + genhalf + genint + geninteger + geninteger16bit + geninteger32bit + geninteger64bit + geninteger8bit + genintegerNbit + genintptr + genlong + genlonglong + genshort + gentype + genvector + halfn + igenchar + igeninteger + igeninteger16bit + igeninteger32bit + igeninteger64bit + igeninteger8bit + igenintegerNbit + igenlonginteger + intn + longlongn + longn + scharn + sgenfloat + sgeninteger + shortn + ucharn + ugenchar + ugenint + ugeninteger + ugeninteger16bit + ugeninteger32bit + ugeninteger64bit + ugeninteger8bit + ugenintegerNbit + ugenlong + ugenlonginteger + ugenlonglong + ugenshort + uintn + ulonglongn + ulongn + ushortn + ) + + sycl_macros = %w( + SYCL_EXTERNAL + ) + + sycl_namespaces = %w( + info + event_profiling + kernel_device_specific + property + sycl + ) + + # Types, namespace and attributes used by the SYCL OpenCL backend + sycl_opencl_keywords = %w( + __kernel + __read_only + __read_write + __write_only + cl + cl_bool + cl_char + cl_char16 + cl_char2 + cl_char3 + cl_char4 + cl_char8 + cl_command_queue + cl_context + cl_device_id + cl_double + cl_double16 + cl_double2 + cl_double3 + cl_double4 + cl_double8 + cl_event + cl_exception + cl_float + cl_float16 + cl_float2 + cl_float3 + cl_float4 + cl_float8 + cl_half + cl_half16 + cl_half2 + cl_half3 + cl_half4 + cl_half8 + cl_int + cl_int16 + cl_int2 + cl_int3 + cl_int4 + cl_int8 + cl_kernel + cl_long + cl_long16 + cl_long2 + cl_long3 + cl_long4 + cl_long8 + cl_mem + cl_pipe + cl_platform_id + cl_program + cl_sampler + cl_short + cl_short16 + cl_short2 + cl_short3 + cl_short4 + cl_short8 + cl_uchar + cl_uchar16 + cl_uchar2 + cl_uchar3 + cl_uchar4 + cl_uchar8 + cl_uint + cl_uint16 + cl_uint2 + cl_uint3 + cl_uint4 + cl_uint8 + cl_ulong + cl_ulong16 + cl_ulong2 + cl_ulong4 + cl_ulong8 + cl_ushort + cl_ushort16 + cl_ushort2 + cl_ushort3 + cl_ushort4 + cl_ushort8 + event_t + ) + + sycl_types = %w( + accelerator_selector + access + access_mode + accessor + all_devices_have + any_device_has + aspect + async_exception + async_handler + atomic_ref + backend + backend_input_t + backend_return_t + backend_traits + bit_and + bit_or + bit_xor + buffer + buffer_allocator + constant_ptr + context + context_bound + cpu_selector + decorated_constant_ptr + decorated_global_ptr + decorated_local_ptr + decorated_private_ptr + default_selector + device + device_event + device_type + event + event_command_status + exception + exception_list + executable + generic_ptr + global_ptr + gpu_selector + group + h_item + handler + host_accessor + host_selector + id + image_allocator + image_sampler + input + interop_handle + is_property + is_property_of + item + kernel + kernel_bundle + local_mem_type + local_ptr + logical_and + logical_or + marray + maximum + memory_order + memory_scope + minimum + mode + multi_ptr + multiplies + nd_item + nd_range + object + partition_affinity_domain + partition_property + platform + plus + private_memory + private_ptr + property_list + queue + range + raw_constant_ptr + raw_generic_ptr + raw_global_ptr + raw_local_ptr + raw_private_ptr + reducer + reduction + sampled_image + specialization_id + stream + sub_group + target + unsampled_image + use_host_ptr + use_mutex + usm_allocator + vec + ) + + # SYCL pre-defined variables and tags + sycl_variables = %w( + accelerator_selector_v + all_devices_have_v + any_device_has_v + cpu_selector_v + default_selector_v + gpu_selector_v + host_selector_v + is_property_of_v + is_property_v + memory_order_acq_rel + memory_order_acquire + memory_order_relaxed + memory_order_release + memory_order_seq_cst + memory_scope_device + memory_scope_sub_group + memory_scope_system + memory_scope_work_group + memory_scope_work_item + no_init + read_only + write_only + ) + + # Here are some interesting tokens + # https://pygments.org/docs/tokens/ unused in C++ we can reuse + # in SYCL mode: + # Comment::Preproc + # Keyword.Pseudo + # Keyword.Reserved + # Literal::String::Regex + # Literal::String::Symbol + # Name::Attribute + # Name.Builtin.Pseudo + # Name.Function.Magic + # Name.Other + # Name.Variable.Magic + # Operator.Word + # Generic + # Generic.Deleted + # Generic.Emph + # Generic.Error + # Generic.Heading + # Generic.Inserted + # Generic.Output + # Generic.Prompt + # Generic.Strong + # Generic.Subheading + # Generic.Traceback + + + # Insert some specific rules at the beginning of the statement + # rule of the C++ lexer + prepend :statements do + rule %r/(?:#{sycl_data_types.join('|')})\b/, + Keyword::Pseudo + rule %r/(?:#{sycl_functions.join('|')})\b/, + Name::Function::Magic + rule %r/(?:#{sycl_generic_types.join('|')})\b/, + Name::Builtin::Pseudo + rule %r/(?:#{sycl_macros.join('|')})\b/, + Generic::Output + rule %r/(?:#{sycl_namespaces.join('|')})\b/, + Generic::Heading + rule %r/(?:#{sycl_opencl_keywords.join('|')})\b/, + Name::Other + rule %r/(?:#{sycl_types.join('|')})\b/, + Keyword::Reserved + rule %r/(?:#{sycl_variables.join('|')})\b/, + Name::Variable::Magic + end + + end + end +end diff --git a/adoc/config/rouge/lib/rouge/themes/sycl_spec.rb b/adoc/config/rouge/lib/rouge/themes/sycl_spec.rb new file mode 100644 index 00000000..7e4862e4 --- /dev/null +++ b/adoc/config/rouge/lib/rouge/themes/sycl_spec.rb @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- # +# frozen_string_literal: true + +# The SYCL theme used by Khronos in the SYCL specification + +module Rouge + module Themes + class SYCLspec < Github + name 'sycl.spec' + + # Use mostly :bold versions to be clearer and because :italic + # does not work with asciidoctor-pdf + + # sycl_data_types DarkOrchid3 #9a32cd + style Keyword::Pseudo, :fg => '#9a32cd', :italic => true + # sycl_functions #00c5cd Turquoise 3 + style Name::Function::Magic, :fg => '#00c5cd', :bold => true + # sycl_generic_types magenta #ff00ff + style Name::Builtin::Pseudo, :fg => '#ff00ff', :italic => true + # sycl_macros OliveDrab2 #b3ee3a + style Generic::Output, :fg => '#b3ee3a', :bold => true + # sycl_namespaces use official SYCL orange defined by Khronos #f35a1c + style Generic::Heading, :fg => '#f35a1c', :bold => true + # sycl_opencl_keywords + style Name::Other, :fg => '#ff4500', :italic => true + # sycl_types VioletRed1 #ff3e96 + style Keyword::Reserved, :fg => '#ff3e96', :bold => true + # sycl_variables orange1 #ffa500 + style Name::Variable::Magic, :fg => '#ffa500', :bold => true + # Fix the gray comment which is not as visible as YellowGreen #9acd32 + style Comment, :fg => '#9acd32' + style Comment::Multiline, :fg => '#9acd32' + style Comment::Single, :fg => '#9acd32' + # Use a clearer white background + style Text, :bg => '#ffffff' + + end + end +end diff --git a/adoc/config/rouge_sycl.rb b/adoc/config/rouge_sycl.rb new file mode 100644 index 00000000..b83cbf70 --- /dev/null +++ b/adoc/config/rouge_sycl.rb @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- # +# frozen_string_literal: true +# Copyright (c) 2011-2021 The Khronos Group, Inc. +# SPDX-License-Identifier: Apache-2.0 + +puts "Loading rouge_sycl extensions for source code highlighting" + +require 'rouge' + +RUBY_ENGINE == 'opal' ? (require 'rouge/lib/rouge/lexers/sycl' ; + require 'rouge/lib/rouge/themes/sycl_spec') \ + : (require_relative 'rouge/lib/rouge/lexers/sycl' ; + require_relative 'rouge/lib/rouge/themes/sycl_spec') diff --git a/adoc/config/spec-macros.rb b/adoc/config/spec-macros.rb new file mode 100644 index 00000000..83e35643 --- /dev/null +++ b/adoc/config/spec-macros.rb @@ -0,0 +1,13 @@ +# Copyright (c) 2011-2021 The Khronos Group, Inc. +# +# SPDX-License-Identifier: Apache-2.0 + +#require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal' +RUBY_ENGINE == 'opal' ? (require 'spec-macros/extension') : (require_relative 'spec-macros/extension') + +# All the inline macros we need +Asciidoctor::Extensions.register do + inline_macro MustInlineMacro + inline_macro ReflinkInlineMacro + inline_macro CodeInlineMacro +end diff --git a/adoc/config/spec-macros/extension.rb b/adoc/config/spec-macros/extension.rb new file mode 100644 index 00000000..dea8d2d6 --- /dev/null +++ b/adoc/config/spec-macros/extension.rb @@ -0,0 +1,73 @@ +# Copyright (c) 2011-2021 The Khronos Group, Inc. +# +# SPDX-License-Identifier: Apache-2.0 + +require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal' + +include ::Asciidoctor + +class SpecInlineMacroBase < Extensions::InlineMacroProcessor + use_dsl + using_format :short +end + +class NormativeInlineMacroBase < SpecInlineMacroBase + def text + 'normative' + end + + def process parent, target, attributes + create_inline parent, :quoted, '' + text + '' + end +end + +class LinkInlineMacroBase < SpecInlineMacroBase + def process parent, target, attributes + if parent.document.attributes['cross-file-links'] + return Inline.new(parent, :anchor, target, :type => :link, :target => (target + '.html')) + else + return Inline.new(parent, :anchor, target, :type => :xref, :target => ('#' + target), :attributes => {'fragment' => target, 'refid' => target}) + end + end +end + +class CodeInlineMacroBase < SpecInlineMacroBase + def process parent, target, attributes + create_inline parent, :quoted, '' + target.gsub('→', '->') + '' + end +end + +class StrongInlineMacroBase < SpecInlineMacroBase + def process parent, target, attributes + create_inline parent, :quoted, '' + target.gsub('→', '->') + '' + end +end + +class ParamInlineMacroBase < SpecInlineMacroBase + def process parent, target, attributes + create_inline parent, :quoted, '' + target.gsub('→', '->') + '' + end +end + +class MustInlineMacro < NormativeInlineMacroBase + named :must + match /must:(\w*)/ + + def text + 'must' + end +end + +# Generic reference page link to any entity with an anchor/refpage +class ReflinkInlineMacro < LinkInlineMacroBase + named :reflink + match /reflink:(\w+)/ +end + +# This doesn't include the full range of code: use +# match /code:(\w+(\.\w+)*)/ +# match /code:([-A-Za-z0-9_()<>!=?:"&%|/*^+"]+ +class CodeInlineMacro < CodeInlineMacroBase + named :code + match /code:([-A-Za-z0-9_()<>!=?:"&%|*^+"\/]+)/ +end diff --git a/adoc/config/themes/pdf-theme.yml b/adoc/config/themes/pdf-theme.yml new file mode 100644 index 00000000..cb72e70d --- /dev/null +++ b/adoc/config/themes/pdf-theme.yml @@ -0,0 +1,340 @@ +# http://gist.asciidoctor.org/?github-asciidoctor%2Fasciidoctor-pdf%2F%2Fdocs%2Ftheming-guide.adoc + +# Modified from asciidoctor-pdf 1.5.3 (gems/asciidoctor-pdf-1.5.3/data/themes/default-theme.yml) +# by adding chapter names to the page footer and some custom roles + +# Number the pages starting at the title +page-numbering-start-at: title +# but only start the headers and footers on the next page, the table-of-content +running-content-start-at: toc + +font: + catalog: + # Noto Serif supports Latin, Latin-1 Supplement, Latin Extended-A, Greek, Cyrillic, Vietnamese & an assortment of symbols + Noto Serif: + normal: notoserif-regular-subset.ttf + bold: notoserif-bold-subset.ttf + italic: notoserif-italic-subset.ttf + bold_italic: notoserif-bold_italic-subset.ttf + # M+ 1mn supports ASCII and the circled numbers used for conums + M+ 1mn: + normal: mplus1mn-regular-subset.ttf + bold: mplus1mn-bold-subset.ttf + italic: mplus1mn-italic-subset.ttf + bold_italic: mplus1mn-bold_italic-subset.ttf +page: + background_color: FFFFFF + layout: portrait + # When opening the file, display all the page + initial_zoom: Fit + margin: [0.5in, 0.67in, 0.67in, 0.67in] + # margin_inner and margin_outer keys are used for recto/verso print margins when media=prepress + margin_inner: 0.75in + margin_outer: 0.59in + size: A4 +base: + align: justify + # color as hex string (leading # is optional) + font_color: 333333 + # color as RGB array + #font_color: [51, 51, 51] + # color as CMYK array (approximated) + #font_color: [0, 0, 0, 0.92] + #font_color: [0, 0, 0, 92%] + font_family: Noto Serif + # choose one of these font_size/line_height_length combinations + #font_size: 14 + #line_height_length: 20 + #font_size: 11.25 + #line_height_length: 18 + #font_size: 11.2 + #line_height_length: 16 + ##font_size: 10.5 + # Do not forget to adapt accordingly line_height_length + font_size: 10 + #line_height_length: 15 + # correct line height for Noto Serif metrics + #line_height_length: 12 + line_height_length: 10 + #font_size: 11.25 + #line_height_length: 18 + line_height: $base_line_height_length / $base_font_size + font_size_large: round($base_font_size * 1.25) + font_size_small: round($base_font_size * 0.85) + font_size_min: $base_font_size * 0.75 + font_style: normal + border_color: EEEEEE + border_radius: 4 + border_width: 0.5 +role: + line-through: + text_decoration: line-through + underline: + text_decoration: underline + big: + font_size: $base_font_size_large + small: + font_size: $base_font_size_small + subtitle: + font_size: 0.8em + font_color: 999999 + # Asciidoctor custom [code] role + code: + font_size: 1em + font_family: M+ 1mn + font_color: FF0000 +# From khronos.css code CSS style: +# code, .code { font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; color: #264357; } +# font_color: $base_font_color +# font_family: $literal_font_family +# font_size: ceil($base_font_size) +# padding: $code_font_size +# line_height: 1.25 +# # line_gap is an experimental property to control how a background color is applied to an inline block element +# line_gap: 3.8 +# background_color: F5F5F5 +# border_color: CCCCCC +# border_radius: $base_border_radius +# border_width: 0.75 + +# FIXME vertical_rhythm is weird; we should think in terms of ems +#vertical_rhythm: $base_line_height_length * 2 / 3 +# correct line height for Noto Serif metrics (comes with built-in line height) +vertical_rhythm: $base_line_height_length +horizontal_rhythm: $base_line_height_length +# QUESTION should vertical_spacing be block_spacing instead? +vertical_spacing: $vertical_rhythm +link: + font_color: 428BCA +# literal is currently used for inline monospaced in prose and table cells +literal: + font_color: B12146 + font_family: M+ 1mn +button: + content: "[\u2009%s\u2009]" + font_style: bold +key: + background_color: F5F5F5 + border_color: CCCCCC + border_offset: 2 + border_radius: 2 + border_width: 0.5 + font_family: $literal_font_family + separator: "\u202f+\u202f" +mark: + background_color: FFFF00 + border_offset: 1 +menu: + caret_content: " \u203a " +heading: + align: left + font_color: $base_font_color + font_style: bold + # h1 is used for part titles (book doctype) or the doctitle (article doctype) + h1_font_size: floor($base_font_size * 2.6) + # h2 is used for chapter titles (book doctype only) + h2_font_size: floor($base_font_size * 2.15) + h3_font_size: round($base_font_size * 1.7) + h4_font_size: $base_font_size_large + h5_font_size: $base_font_size + h6_font_size: $base_font_size_small + #line_height: 1.4 + # correct line height for Noto Serif metrics (comes with built-in line height) + line_height: 1 + margin_top: $vertical_rhythm * 0.4 + margin_bottom: $vertical_rhythm * 0.9 + min_height_after: $base_line_height_length * 1.5 +title_page: + align: right + logo: + top: 10% + title: + top: 55% + font_size: $heading_h1_font_size + font_color: 999999 + line_height: 0.9 + subtitle: + font_size: $heading_h3_font_size + font_style: bold_italic + line_height: 1 + authors: + margin_top: $base_font_size * 1.25 + font_size: $base_font_size_large + font_color: 181818 + revision: + margin_top: $base_font_size * 1.25 +block: + margin_top: 0 + margin_bottom: $vertical_rhythm +caption: + align: left + font_size: $base_font_size * 0.95 + font_style: italic + # FIXME perhaps set line_height instead of / in addition to margins? + margin_inside: $vertical_rhythm / 3 + #margin_inside: $vertical_rhythm / 4 + margin_outside: 0 +lead: + font_size: $base_font_size_large + line_height: 1.4 +abstract: + font_color: 5C6266 + font_size: $lead_font_size + line_height: $lead_line_height + font_style: italic + first_line_font_style: bold + title: + align: center + font_color: $heading_font_color + font_size: $heading_h4_font_size + font_style: $heading_font_style +admonition: + column_rule_color: $base_border_color + column_rule_width: $base_border_width + padding: [0, $horizontal_rhythm, 0, $horizontal_rhythm] + #icon: + # tip: + # name: far-lightbulb + # stroke_color: 111111 + # size: 24 + label: + text_transform: uppercase + font_style: bold +blockquote: + font_size: $base_font_size_large + border_color: $base_border_color + border_width: 0 + border_left_width: 5 + # FIXME disable negative padding bottom once margin collapsing is implemented + padding: [0, $horizontal_rhythm, $block_margin_bottom * -0.75, $horizontal_rhythm + $blockquote_border_left_width / 2] + cite_font_size: $base_font_size_small + cite_font_color: 999999 +verse: + font_size: $blockquote_font_size + border_color: $blockquote_border_color + border_width: $blockquote_border_width + border_left_width: $blockquote_border_left_width + padding: $blockquote_padding + cite_font_size: $blockquote_cite_font_size + cite_font_color: $blockquote_cite_font_color +# code is used for source blocks (perhaps change to source or listing?) +code: + font_color: $base_font_color + font_family: $literal_font_family + font_size: ceil($base_font_size) + padding: $code_font_size + line_height: 1.25 + # line_gap is an experimental property to control how a background color is applied to an inline block element + line_gap: 3.8 + background_color: F5F5F5 + border_color: CCCCCC + border_radius: $base_border_radius + border_width: 0.75 +conum: + font_family: $literal_font_family + font_color: $literal_font_color + font_size: $base_font_size + line_height: 4 / 3 + glyphs: circled +example: + border_color: $base_border_color + border_radius: $base_border_radius + border_width: 0.75 + background_color: $page_background_color + # FIXME reenable padding bottom once margin collapsing is implemented + padding: [$vertical_rhythm, $horizontal_rhythm, 0, $horizontal_rhythm] +image: + align: left +prose: + margin_top: $block_margin_top + margin_bottom: $block_margin_bottom +sidebar: + background_color: EEEEEE + border_color: E1E1E1 + border_radius: $base_border_radius + border_width: $base_border_width + # FIXME reenable padding bottom once margin collapsing is implemented + padding: [$vertical_rhythm, $vertical_rhythm * 1.25, 0, $vertical_rhythm * 1.25] + title: + align: center + font_color: $heading_font_color + font_size: $heading_h4_font_size + font_style: $heading_font_style +thematic_break: + border_color: $base_border_color + border_style: solid + border_width: $base_border_width + margin_top: $vertical_rhythm * 0.5 + margin_bottom: $vertical_rhythm * 1.5 +description_list: + term_font_style: bold + term_spacing: $vertical_rhythm / 4 + description_indent: $horizontal_rhythm * 1.25 +outline_list: + indent: $horizontal_rhythm * 1.5 + #marker_font_color: 404040 + # NOTE outline_list_item_spacing applies to list items that do not have complex content + item_spacing: $vertical_rhythm / 2 +table: + background_color: $page_background_color + border_color: DDDDDD + border_width: $base_border_width + cell_padding: 3 + head: + font_style: bold + border_bottom_width: $base_border_width * 2.5 + body: + stripe_background_color: F9F9F9 + foot: + background_color: F0F0F0 +toc: + indent: $horizontal_rhythm + line_height: 1.4 + dot_leader: + #content: ". " + font_color: A9A9A9 + #levels: 2 3 +footnotes: + font_size: round($base_font_size * 0.75) + item_spacing: $outline_list_item_spacing / 2 + +header: + font_size: $base_font_size_small + border_color: DDDDDD + border_width: 0.25 + height: $base_line_height_length * 2.5 + line_height: 1 + vertical_align: middle + # Put the spec name and the deep section title in the header + sectlevels: 10 + recto: + left: + content: '{SYCL_NAME} {SYCL_VERSION} rev {SYCL_REVISION}' + right: + content: '{section-title}' + verso: + left: + content: '{section-title}' + right: + content: '{SYCL_NAME} {SYCL_VERSION} rev {SYCL_REVISION}' + +footer: + font_size: $base_font_size_small + # NOTE if background_color is set, background and border will span width of page + border_color: DDDDDD + border_width: 0.25 + height: $base_line_height_length * 2.5 + line_height: 1 + padding: [$base_line_height_length / 2, 1, 0, 1] + vertical_align: top + # Put the page number and the chapter title + recto: + #columns: "<50% =0% >50%" + right: + # content: '{page-number}' + content: '{chapter-title} | {page-number}' + verso: + #columns: $footer_recto_columns + left: + # content: $footer_recto_right_content + content: '{page-number} | {chapter-title}' diff --git a/adoc/headers/Readme.txt b/adoc/headers/Readme.txt new file mode 100644 index 00000000..7316360e --- /dev/null +++ b/adoc/headers/Readme.txt @@ -0,0 +1,12 @@ +SYCL headers +------------- + +These headers are provided as part of the specification document, for the purpose of providing +a common interface for the SYCL system. + +The original authors are: + + * Gordon Brown, Codeplay Software Ltd. + * Ronan Keryell, AMD + * Ruyman Reyes, Codeplay Software Ltd. + * Maria Rovatsou, Codeplay Software Ltd. diff --git a/adoc/headers/accessMode.h b/adoc/headers/accessMode.h new file mode 100644 index 00000000..7fc7e248 --- /dev/null +++ b/adoc/headers/accessMode.h @@ -0,0 +1,18 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { +enum class access_mode { + read, + write, + read_write, + discard_write, // Deprecated in SYCL 2020 + discard_read_write, // Deprecated in SYCL 2020 + atomic // Deprecated in SYCL 2020 +}; + +namespace access { + // The legacy type "access::mode" is deprecated. + using mode = sycl::access_mode; +} // namespace access +} // namespace sycl diff --git a/adoc/headers/accessProperties.h b/adoc/headers/accessProperties.h new file mode 100755 index 00000000..69ea56d1 --- /dev/null +++ b/adoc/headers/accessProperties.h @@ -0,0 +1,10 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { +namespace property { + struct no_init {}; +} // namespace property + +inline constexpr property::no_init no_init; +} // namespace sycl diff --git a/adoc/headers/accessTags.h b/adoc/headers/accessTags.h new file mode 100755 index 00000000..0427cdeb --- /dev/null +++ b/adoc/headers/accessTags.h @@ -0,0 +1,13 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { + +inline constexpr __unspecified__ read_only; +inline constexpr __unspecified__ read_write; +inline constexpr __unspecified__ write_only; +inline constexpr __unspecified__ read_only_host_task; +inline constexpr __unspecified__ read_write_host_task; +inline constexpr __unspecified__ write_only_host_task; + +} // namespace sycl diff --git a/adoc/headers/accessorBuffer.h b/adoc/headers/accessorBuffer.h new file mode 100644 index 00000000..8236765a --- /dev/null +++ b/adoc/headers/accessorBuffer.h @@ -0,0 +1,200 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { + +enum class target { + device, + host_task, + global_buffer = device, // Deprecated + constant_buffer, // Deprecated + local, // Deprecated + host_buffer // Deprecated +}; + +namespace access { + // The legacy type "access::target" is deprecated. + using sycl::target; + +enum class placeholder { // Deprecated + false_t, + true_t +}; + +} // namespace access + + +template ? access_mode::read + : access_mode::read_write), + target accessTarget = target::device, + access::placeholder isPlaceholder = access::placeholder::false_t> +class accessor { + public: + using value_type = // const dataT for read-only accessors, dataT otherwise + __value_type__; + using reference = value_type &; + using const_reference = const dataT &; + template + using accessor_ptr = // multi_ptr to value_type with target address space, + __pointer_class__; // unspecified for access_mode::host_task + using iterator = __unspecified_iterator__; + using const_iterator = __unspecified_iterator__; + using reverse_iterator = std::reverse_iterator; + using const_reverse_iterator = std::reverse_iterator; + using difference_type = typename std::iterator_traits::difference_type; + using size_type = size_t; + + accessor(); + + /* Available only when: (dimensions == 0) */ + template + accessor(buffer &bufferRef, + const property_list &propList = {}); + + /* Available only when: (dimensions == 0) */ + template + accessor(buffer &bufferRef, + handler &commandGroupHandlerRef, const property_list &propList = {}); + + /* Available only when: (dimensions > 0) */ + template + accessor(buffer &bufferRef, + const property_list &propList = {}); + + /* Available only when: (dimensions > 0) */ + template + accessor(buffer &bufferRef, TagT tag, + const property_list &propList = {}); + + /* Available only when: (dimensions > 0) */ + template + accessor(buffer &bufferRef, + handler &commandGroupHandlerRef, const property_list &propList = {}); + + /* Available only when: (dimensions > 0) */ + template + accessor(buffer &bufferRef, + handler &commandGroupHandlerRef, TagT tag, + const property_list &propList = {}); + + /* Available only when: (dimensions > 0) */ + template + accessor(buffer &bufferRef, + range accessRange, const property_list &propList = {}); + + /* Available only when: (dimensions > 0) */ + template + accessor(buffer &bufferRef, + range accessRange, TagT tag, + const property_list &propList = {}); + + /* Available only when: (dimensions > 0) */ + template + accessor(buffer &bufferRef, + range accessRange, id accessOffset, + const property_list &propList = {}); + + /* Available only when: (dimensions > 0) */ + template + accessor(buffer &bufferRef, + range accessRange, id accessOffset, + TagT tag, const property_list &propList = {}); + + /* Available only when: (dimensions > 0) */ + template + accessor(buffer &bufferRef, + handler &commandGroupHandlerRef, range accessRange, + const property_list &propList = {}); + + /* Available only when: (dimensions > 0) */ + template + accessor(buffer &bufferRef, + handler &commandGroupHandlerRef, range accessRange, + TagT tag, const property_list &propList = {}); + + /* Available only when: (dimensions > 0) */ + template + accessor(buffer &bufferRef, + handler &commandGroupHandlerRef, range accessRange, + id accessOffset, const property_list &propList = {}); + + /* Available only when: (dimensions > 0) */ + template + accessor(buffer &bufferRef, + handler &commandGroupHandlerRef, range accessRange, + id accessOffset, TagT tag, + const property_list &propList = {}); + + /* -- common interface members -- */ + + void swap(accessor &other); + + bool is_placeholder() const; + + size_type byte_size() const noexcept; + + size_type size() const noexcept; + + size_type max_size() const noexcept; + + // Deprecated + size_t get_size() const; + + // Deprecated + size_t get_count() const; + + bool empty() const noexcept; + + /* Available only when: (dimensions > 0) */ + range get_range() const; + + /* Available only when: (dimensions > 0) */ + id get_offset() const; + + /* Available only when: (dimensions == 0) */ + operator reference() const; + + /* Available only when: (dimensions > 0) */ + reference operator[](id index) const; + + /* Available only when: (dimensions > 1) */ + __unspecified__ &operator[](size_t index) const; + + /* Available only when: (accessMode != access_mode::atomic && dimensions == 1) */ + reference operator[](size_t index) const; + + /* Deprecated + Available only when: (accessMode == access_mode::atomic && dimensions == 0) */ + operator cl::sycl::atomic () const; + + /* Deprecated + Available only when: (accessMode == access_mode::atomic && dimensions == 1) */ + cl::sycl::atomic operator[]( + id index) const; + + std::add_pointer_t get_pointer() const noexcept; + + template + accessor_ptr get_multi_ptr() const noexcept; + + iterator begin() const noexcept; + + iterator end() const noexcept; + + const_iterator cbegin() const noexcept; + + const_iterator cend() const noexcept; + + reverse_iterator rbegin() const noexcept; + + reverse_iterator rend() const noexcept; + + const_reverse_iterator crbegin() const noexcept; + + const_reverse_iterator crend() const noexcept; +}; + +} // namespace sycl diff --git a/adoc/headers/accessorDeprecatedConstant.h b/adoc/headers/accessorDeprecatedConstant.h new file mode 100644 index 00000000..7ee17af3 --- /dev/null +++ b/adoc/headers/accessorDeprecatedConstant.h @@ -0,0 +1,89 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { + +template +class accessor { + public: + using value_type = const dataT; + using reference = const dataT &; + using const_reference = const dataT &; + + /* Available only when: (dimensions == 0) */ + template + accessor(buffer &bufferRef, + const property_list &propList = {}); + + /* Available only when: (dimensions == 0) */ + template + accessor(buffer &bufferRef, + handler &commandGroupHandlerRef, const property_list &propList = {}); + + /* Available only when: (dimensions > 0) */ + template + accessor(buffer &bufferRef, + const property_list &propList = {}); + + /* Available only when: (dimensions > 0) */ + template + accessor(buffer &bufferRef, + handler &commandGroupHandlerRef, const property_list &propList = {}); + + /* Available only when: (dimensions > 0) */ + template + accessor(buffer &bufferRef, + range accessRange, const property_list &propList = {}); + + /* Available only when: (dimensions > 0) */ + template + accessor(buffer &bufferRef, + range accessRange, id accessOffset, + const property_list &propList = {}); + + /* Available only when: (dimensions > 0) */ + template + accessor(buffer &bufferRef, + handler &commandGroupHandlerRef, range accessRange, + const property_list &propList = {}); + + /* Available only when: (dimensions > 0) */ + template + accessor(buffer &bufferRef, + handler &commandGroupHandlerRef, range accessRange, + id accessOffset, const property_list &propList = {}); + + /* -- common interface members -- */ + + bool is_placeholder() const; + + size_t get_size() const noexcept; + + size_t get_count() const noexcept; + + /* Available only when: (dimensions > 0) */ + range get_range() const; + + /* Available only when: (dimensions > 0) */ + id get_offset() const; + + /* Available only when: (dimensions == 0) */ + operator reference() const; + + /* Available only when: (dimensions > 0) */ + reference operator[](id index) const; + + /* Available only when: (dimensions > 1) */ + __unspecified__ &operator[](size_t index) const; + + /* Available only when: (dimensions == 1) */ + reference operator[](size_t index) const; + + constant_ptr get_pointer() const noexcept; +}; + +} // namespace sycl diff --git a/adoc/headers/accessorDeprecatedHost.h b/adoc/headers/accessorDeprecatedHost.h new file mode 100644 index 00000000..853a1e7a --- /dev/null +++ b/adoc/headers/accessorDeprecatedHost.h @@ -0,0 +1,68 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { + +template +class accessor { + public: + using value_type = // const dataT for access_mode::read, dataT otherwise + __value_type__; + using reference = value_type &; + using const_reference = const dataT &; + + /* Available only when: (dimensions == 0) */ + template + accessor(buffer &bufferRef, + const property_list &propList = {}); + + /* Available only when: (dimensions > 0) */ + template + accessor(buffer &bufferRef, + const property_list &propList = {}); + + /* Available only when: (dimensions > 0) */ + template + accessor(buffer &bufferRef, + range accessRange, const property_list &propList = {}); + + /* Available only when: (dimensions > 0) */ + template + accessor(buffer &bufferRef, + range accessRange, id accessOffset, + const property_list &propList = {}); + + /* -- common interface members -- */ + + bool is_placeholder() const; + + size_t get_size() const; + + size_t get_count() const; + + /* Available only when: (dimensions > 0) */ + range get_range() const; + + /* Available only when: (dimensions > 0) */ + id get_offset() const; + + /* Available only when: (dimensions == 0) */ + operator reference() const; + + /* Available only when: (dimensions > 0) */ + reference operator[](id index) const; + + /* Available only when: (dimensions > 1) */ + __unspecified__ &operator[](size_t index) const; + + /* Available only when: (dimensions == 1) */ + reference operator[](size_t index) const; + + std::add_pointer_t get_pointer() const noexcept; +}; + +} // namespace sycl diff --git a/adoc/headers/accessorDeprecatedLocal.h b/adoc/headers/accessorDeprecatedLocal.h new file mode 100644 index 00000000..e3219205 --- /dev/null +++ b/adoc/headers/accessorDeprecatedLocal.h @@ -0,0 +1,60 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { + +template +class accessor { + public: + using value_type = dataT; + using reference = dataT &; + using const_reference = const dataT &; + + /* Available only when: (dimensions == 0) */ + accessor(handler &commandGroupHandlerRef, + const property_list &propList = {}); + + /* Available only when: (dimensions > 0) */ + accessor(range allocationSize, handler &commandGroupHandlerRef, + const property_list &propList = {}); + + /* -- common interface members -- */ + + bool is_placeholder() const; + + size_t get_size() const; + + size_t get_count() const; + + /* Available only when: (dimensions > 0) */ + range get_range() const; + + /* Available only when: (accessMode == access_mode::read_write && dimensions == 0) */ + operator reference() const; + + /* Available only when: (accessMode == access_mode::read_write && dimensions > 0) */ + reference operator[](id index) const; + + /* Available only when: (dimensions > 1) */ + __unspecified__ &operator[](size_t index) const; + + /* Available only when: (accessMode == access_mode::read_write && dimensions == 1) */ + reference operator[](size_t index) const; + + /* Available only when: (accessMode == access_mode::atomic && dimensions == 0) */ + operator atomic () const; + + /* Available only when: (accessMode == access_mode::atomic && dimensions > 0) */ + atomic operator[](id index) const; + + /* Available only when: (accessMode == access_mode::atomic && dimensions == 1) */ + atomic operator[](size_t index) const; + + local_ptr get_pointer() const noexcept; +}; + +} // namespace sycl diff --git a/adoc/headers/accessorHost.h b/adoc/headers/accessorHost.h new file mode 100755 index 00000000..fd365412 --- /dev/null +++ b/adoc/headers/accessorHost.h @@ -0,0 +1,111 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { +template ? access_mode::read + : access_mode::read_write), +class host_accessor { + public: + using value_type = // const dataT for read-only accessors, dataT otherwise + __value_type__; + using reference = value_type &; + using const_reference = const dataT &; + using iterator = __unspecified_iterator__; + using const_iterator = __unspecified_iterator__; + using reverse_iterator = std::reverse_iterator; + using const_reverse_iterator = std::reverse_iterator; + using difference_type = typename std::iterator_traits::difference_type; + using size_type = size_t; + + host_accessor(); + + /* Available only when: (dimensions == 0) */ + template + host_accessor(buffer &bufferRef, + const property_list &propList = {}); + + /* Available only when: (dimensions > 0) */ + template + host_accessor(buffer &bufferRef, + const property_list &propList = {}); + + /* Available only when: (dimensions > 0) */ + template + host_accessor(buffer &bufferRef, TagT tag, + const property_list &propList = {}); + + /* Available only when: (dimensions > 0) */ + template + host_accessor(buffer &bufferRef, + range accessRange, const property_list &propList = {}); + + /* Available only when: (dimensions > 0) */ + template + host_accessor(buffer &bufferRef, + range accessRange, TagT tag, + const property_list &propList = {}); + + /* Available only when: (dimensions > 0) */ + template + host_accessor(buffer &bufferRef, + range accessRange, id accessOffset, + const property_list &propList = {}); + + /* Available only when: (dimensions > 0) */ + template + host_accessor(buffer &bufferRef, + range accessRange, id accessOffset, + TagT tag, const property_list &propList = {}); + + /* -- common interface members -- */ + + void swap(host_accessor &other); + + size_type byte_size() const noexcept; + + size_type size() const noexcept; + + size_type max_size() const noexcept; + + bool empty() const noexcept; + + /* Available only when: (dimensions > 0) */ + range get_range() const; + + /* Available only when: (dimensions > 0) */ + id get_offset() const; + + /* Available only when: (dimensions == 0) */ + operator reference() const; + + /* Available only when: (dimensions > 0) */ + reference operator[](id index) const; + + /* Available only when: (dimensions > 1) */ + __unspecified__ &operator[](size_t index) const; + + /* Available only when: (dimensions == 1) */ + reference operator[](size_t index) const; + + std::add_pointer_t get_pointer() const noexcept; + + iterator begin() const noexcept; + + iterator end() const noexcept; + + const_iterator cbegin() const noexcept; + + const_iterator cend() const noexcept; + + reverse_iterator rbegin() const noexcept; + + reverse_iterator rend() const noexcept; + + const_reverse_iterator crbegin() const noexcept; + + const_reverse_iterator crend() const noexcept; +}; +} // namespace sycl diff --git a/adoc/headers/accessorLocal.h b/adoc/headers/accessorLocal.h new file mode 100644 index 00000000..0d3341b0 --- /dev/null +++ b/adoc/headers/accessorLocal.h @@ -0,0 +1,79 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { +template +class local_accessor { + public: + using value_type = // const dataT for read-only accessors, dataT otherwise + __value_type__; + using reference = value_type &; + using const_reference = const dataT &; + template + using accessor_ptr = + multi_ptr; + using iterator = __unspecified_iterator__; + using const_iterator = __unspecified_iterator__; + using reverse_iterator = std::reverse_iterator; + using const_reverse_iterator = std::reverse_iterator; + using difference_type = typename std::iterator_traits::difference_type; + using size_type = size_t; + + local_accessor(); + + /* Available only when: (dimensions == 0) */ + local_accessor(handler &commandGroupHandlerRef, + const property_list &propList = {}); + + /* Available only when: (dimensions > 0) */ + local_accessor(range allocationSize, handler &commandGroupHandlerRef, + const property_list &propList = {}); + + /* -- common interface members -- */ + + void swap(accessor &other); + + size_type byte_size() const noexcept; + + size_type size() const noexcept; + + size_type max_size() const noexcept; + + bool empty() const noexcept; + + range get_range() const; + + /* Available only when: (dimensions == 0) */ + operator reference() const; + + /* Available only when: (dimensions > 0) */ + reference operator[](id index) const; + + /* Available only when: (dimensions > 1) */ + __unspecified__ &operator[](size_t index) const; + + /* Available only when: (dimensions == 1) */ + reference operator[](size_t index) const; + + std::add_pointer_t get_pointer() const noexcept; + + template + accessor_ptr get_multi_ptr() const noexcept; + + iterator begin() const noexcept; + + iterator end() const noexcept; + + const_iterator cbegin() const noexcept; + + const_iterator cend() const noexcept; + + reverse_iterator rbegin() const noexcept; + + reverse_iterator rend() const noexcept; + + const_reverse_iterator crbegin() const noexcept; + + const_reverse_iterator crend() const noexcept; +}; +} // namespace sycl diff --git a/adoc/headers/accessorSampledImage.h b/adoc/headers/accessorSampledImage.h new file mode 100644 index 00000000..6e02598c --- /dev/null +++ b/adoc/headers/accessorSampledImage.h @@ -0,0 +1,67 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { + +enum class image_target { + device, + host_task +}; + +template +class sampled_image_accessor { + public: + using value_type = const dataT; + using reference = const dataT &; + using const_reference = const dataT &; + + template + sampled_image_accessor(sampled_image &imageRef, + handler &commandGroupHandlerRef, + const property_list &propList = {}); + + template + sampled_image_accessor(sampled_image &imageRef, + handler &commandGroupHandlerRef, TagT tag, + const property_list &propList = {}); + + /* -- common interface members -- */ + + /* -- property interface members -- */ + + size_t size() const noexcept; + + /* if dimensions == 1, coordT = float + if dimensions == 2, coordT = float2 + if dimensions == 3, coordT = float4 */ + template + dataT read(const coordT &coords) const noexcept; +}; + +template +class host_sampled_image_accessor { + public: + using value_type = const dataT; + using reference = const dataT &; + using const_reference = const dataT &; + + template + host_sampled_image_accessor(sampled_image &imageRef, + const property_list &propList = {}); + + /* -- common interface members -- */ + + /* -- property interface members -- */ + + size_t size() const noexcept; + + /* if dimensions == 1, coordT = float + if dimensions == 2, coordT = float2 + if dimensions == 3, coordT = float4 */ + template + dataT read(const coordT &coords) const noexcept; +}; + +} // namespace sycl diff --git a/adoc/headers/accessorUnsampledImage.h b/adoc/headers/accessorUnsampledImage.h new file mode 100644 index 00000000..06e4aaa4 --- /dev/null +++ b/adoc/headers/accessorUnsampledImage.h @@ -0,0 +1,92 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { + +enum class image_target { + device, + host_task +}; + +template +class unsampled_image_accessor { + public: + using value_type = // const dataT for read-only accessors, dataT otherwise + __value_type__; + using reference = value_type &; + using const_reference = const dataT &; + + template + unsampled_image_accessor(unsampled_image &imageRef, + handler &commandGroupHandlerRef, + const property_list &propList = {}); + + template + unsampled_image_accessor(unsampled_image &imageRef, + handler &commandGroupHandlerRef, TagT tag, + const property_list &propList = {}); + + /* -- common interface members -- */ + + /* -- property interface members -- */ + + size_t size() const noexcept; + + /* Available only when: accessMode == access_mode::read + if dimensions == 1, coordT = int + if dimensions == 2, coordT = int2 + if dimensions == 4, coordT = int4 */ + template + dataT read(const coordT &coords) const noexcept; + + /* Available only when: accessMode == access_mode::write + if dimensions == 1, coordT = int + if dimensions == 2, coordT = int2 + if dimensions == 3, coordT = int4 */ + template + void write(const coordT &coords, const dataT &color) const; +}; + +template +class host_unsampled_image_accessor { + public: + using value_type = // const dataT for read-only accessors, dataT otherwise + __value_type__; + using reference = value_type &; + using const_reference = const dataT &; + + template + host_unsampled_image_accessor(unsampled_image &imageRef, + const property_list &propList = {}); + + template + host_unsampled_image_accessor(unsampled_image &imageRef, + TagT tag, const property_list &propList = {}); + + /* -- common interface members -- */ + + /* -- property interface members -- */ + + size_t size() const noexcept; + + /* Available only when: accessMode == access_mode::read + if dimensions == 1, coordT = int + if dimensions == 2, coordT = int2 + if dimensions == 4, coordT = int4 */ + template + dataT read(const coordT &coords) const noexcept; + + /* Available only when: accessMode == access_mode::write + if dimensions == 1, coordT = int + if dimensions == 2, coordT = int2 + if dimensions == 3, coordT = int4 */ + template + void write(const coordT &coords, const dataT &color) const; +}; + +} // namespace sycl diff --git a/adoc/headers/algorithms/all_of.h b/adoc/headers/algorithms/all_of.h new file mode 100644 index 00000000..31477e69 --- /dev/null +++ b/adoc/headers/algorithms/all_of.h @@ -0,0 +1,11 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +template +bool joint_all_of(Group g, Ptr first, Ptr last, Predicate pred); // (1) + +template +bool all_of_group(Group g, T x, Predicate pred); // (2) + +template +bool all_of_group(Group g, bool pred); // (3) diff --git a/adoc/headers/algorithms/any_of.h b/adoc/headers/algorithms/any_of.h new file mode 100644 index 00000000..74b0b99d --- /dev/null +++ b/adoc/headers/algorithms/any_of.h @@ -0,0 +1,11 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +template +bool joint_any_of(Group g, Ptr first, Ptr last, Predicate pred); // (1) + +template +bool any_of_group(Group g, T x, Predicate pred); // (2) + +template +bool any_of_group(Group g, bool pred); // (3) diff --git a/adoc/headers/algorithms/exclusive_scan.h b/adoc/headers/algorithms/exclusive_scan.h new file mode 100644 index 00000000..73c4e2eb --- /dev/null +++ b/adoc/headers/algorithms/exclusive_scan.h @@ -0,0 +1,14 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +template +OutPtr joint_exclusive_scan(Group g, InPtr first, InPtr last, OutPtr result, BinaryOperation binary_op); // (1) + +template +T joint_exclusive_scan(Group g, InPtr first, InPtr last, OutPtr result, T init, BinaryOperation binary_op); // (2) + +template +T exclusive_scan_over_group(Group g, T x, BinaryOperation binary_op); // (3) + +template +T exclusive_scan_over_group(Group g, V x, T init, BinaryOperation binary_op); // (4) diff --git a/adoc/headers/algorithms/inclusive_scan.h b/adoc/headers/algorithms/inclusive_scan.h new file mode 100644 index 00000000..4387d466 --- /dev/null +++ b/adoc/headers/algorithms/inclusive_scan.h @@ -0,0 +1,14 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +template +OutPtr joint_inclusive_scan(Group g, InPtr first, InPtr last, OutPtr result, BinaryOperation binary_op); // (1) + +template +T joint_inclusive_scan(Group g, InPtr first, InPtr last, OutPtr result, BinaryOperation binary_op, T init); // (2) + +template +T inclusive_scan_over_group(Group g, T x, BinaryOperation binary_op); // (3) + +template +T inclusive_scan_over_group(Group g, V x, BinaryOperation binary_op, T init); // (4) diff --git a/adoc/headers/algorithms/is_group.h b/adoc/headers/algorithms/is_group.h new file mode 100644 index 00000000..effd0cc0 --- /dev/null +++ b/adoc/headers/algorithms/is_group.h @@ -0,0 +1,10 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +namespace sycl { + template + struct is_group; + + template + inline constexpr bool is_group_v = is_group::value; +} diff --git a/adoc/headers/algorithms/none_of.h b/adoc/headers/algorithms/none_of.h new file mode 100644 index 00000000..3bb1cf71 --- /dev/null +++ b/adoc/headers/algorithms/none_of.h @@ -0,0 +1,11 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +template +bool joint_none_of(Group g, Ptr first, Ptr last, Predicate pred); // (1) + +template +bool none_of_group(Group g, T x, Predicate pred); // (2) + +template +bool none_of_group(Group g, bool pred); // (3) diff --git a/adoc/headers/algorithms/permute.h b/adoc/headers/algorithms/permute.h new file mode 100644 index 00000000..a356b41a --- /dev/null +++ b/adoc/headers/algorithms/permute.h @@ -0,0 +1,5 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +template +T permute_group_by_xor(Group g, T x, Group::linear_id_type mask); // (1) diff --git a/adoc/headers/algorithms/reduce.h b/adoc/headers/algorithms/reduce.h new file mode 100644 index 00000000..4ff4e72b --- /dev/null +++ b/adoc/headers/algorithms/reduce.h @@ -0,0 +1,14 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +template +std::iterator_traits::value_type joint_reduce(Group g, Ptr first, Ptr last, BinaryOperation binary_op); // (1) + +template +T joint_reduce(Group g, Ptr first, Ptr last, T init, BinaryOperation binary_op); // (2) + +template +T reduce_over_group(Group g, T x, BinaryOperation binary_op); // (3) + +template +T reduce_over_group(Group g, V x, T init, BinaryOperation binary_op); // (4) diff --git a/adoc/headers/algorithms/select.h b/adoc/headers/algorithms/select.h new file mode 100644 index 00000000..1631ab3b --- /dev/null +++ b/adoc/headers/algorithms/select.h @@ -0,0 +1,5 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +template +T select_from_group(Group g, T x, Group::id_type remote_local_id); // (1) diff --git a/adoc/headers/algorithms/shift.h b/adoc/headers/algorithms/shift.h new file mode 100644 index 00000000..c08ac1d6 --- /dev/null +++ b/adoc/headers/algorithms/shift.h @@ -0,0 +1,8 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +template +T shift_group_left(Group g, T x, Group::linear_id_type delta = 1); // (1) + +template +T shift_group_right(Group g, T x, Group::linear_id_type delta = 1); // (2) diff --git a/adoc/headers/aspectTraits.h b/adoc/headers/aspectTraits.h new file mode 100644 index 00000000..372be7a0 --- /dev/null +++ b/adoc/headers/aspectTraits.h @@ -0,0 +1,12 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +namespace sycl { + +template struct any_device_has; +template struct all_devices_have; + +template inline constexpr bool any_device_has_v = any_device_has::value; +template inline constexpr bool all_devices_have_v = all_devices_have::value; + +} diff --git a/adoc/headers/atomic.h b/adoc/headers/atomic.h new file mode 100644 index 00000000..0d0e5e1f --- /dev/null +++ b/adoc/headers/atomic.h @@ -0,0 +1,61 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace cl { +namespace sycl { +/* Deprecated in SYCL 2020 */ +enum class memory_order : int { + relaxed +}; + +/* Deprecated in SYCL 2020 */ +template +class atomic { + public: + template + atomic(multi_ptr ptr); + + void store(T operand, memory_order memoryOrder = + memory_order::relaxed); + + T load(memory_order memoryOrder = memory_order::relaxed) const; + + T exchange(T operand, memory_order memoryOrder = + memory_order::relaxed); + + /* Available only when: T != float */ + bool compare_exchange_strong(T &expected, T desired, + memory_order successMemoryOrder = memory_order::relaxed, + memory_order failMemoryOrder = memory_order::relaxed); + + /* Available only when: T != float */ + T fetch_add(T operand, memory_order memoryOrder = + memory_order::relaxed); + + /* Available only when: T != float */ + T fetch_sub(T operand, memory_order memoryOrder = + memory_order::relaxed); + + /* Available only when: T != float */ + T fetch_and(T operand, memory_order memoryOrder = + memory_order::relaxed); + + /* Available only when: T != float */ + T fetch_or(T operand, memory_order memoryOrder = + memory_order::relaxed); + + /* Available only when: T != float */ + T fetch_xor(T operand, memory_order memoryOrder = + memory_order::relaxed); + + /* Available only when: T != float */ + T fetch_min(T operand, memory_order memoryOrder = + memory_order::relaxed); + + /* Available only when: T != float */ + T fetch_max(T operand, memory_order memoryOrder = + memory_order::relaxed); +}; +} // namespace sycl +} // namespace cl diff --git a/adoc/headers/atomicoperations.h b/adoc/headers/atomicoperations.h new file mode 100644 index 00000000..ee91bf97 --- /dev/null +++ b/adoc/headers/atomicoperations.h @@ -0,0 +1,62 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace cl { +namespace sycl { +/* Deprecated in SYCL 2020 */ +template +void atomic_store(atomic object, T operand, memory_order memoryOrder = + memory_order::relaxed); + +/* Deprecated in SYCL 2020 */ +template +T atomic_load(atomic object, memory_order memoryOrder = + memory_order::relaxed); + +/* Deprecated in SYCL 2020 */ +template +T atomic_exchange(atomic object, T operand, memory_order memoryOrder = + memory_order::relaxed); + +/* Deprecated in SYCL 2020 */ +template +bool atomic_compare_exchange_strong(atomic object, T &expected, T desired, + memory_order successMemoryOrder = memory_order::relaxed, + memory_order failMemoryOrder = memory_order::relaxed); + +/* Deprecated in SYCL 2020 */ +template +T atomic_fetch_add(atomic object, T operand, memory_order memoryOrder = + memory_order::relaxed); + +/* Deprecated in SYCL 2020 */ +template +T atomic_fetch_sub(atomic object, T operand, memory_order memoryOrder = + memory_order::relaxed); + +/* Deprecated in SYCL 2020 */ +template +T atomic_fetch_and(atomic object, T operand, memory_order memoryOrder = + memory_order::relaxed); + +/* Deprecated in SYCL 2020 */ +template +T atomic_fetch_or(atomic object, T operand, memory_order memoryOrder = + memory_order::relaxed); + +/* Deprecated in SYCL 2020 */ +template +T atomic_fetch_xor(atomic object, T operand, memory_order memoryOrder = + memory_order::relaxed); + +/* Deprecated in SYCL 2020 */ +template +T atomic_fetch_min(atomic object, T operand, memory_order memoryOrder = + memory_order::relaxed); + +/* Deprecated in SYCL 2020 */ +template +T atomic_fetch_max(atomic object, T operand, memory_order memoryOrder = + memory_order::relaxed); +} // namespace sycl +} // namespace cl diff --git a/adoc/headers/atomicref.h b/adoc/headers/atomicref.h new file mode 100644 index 00000000..7c53d1fa --- /dev/null +++ b/adoc/headers/atomicref.h @@ -0,0 +1,222 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +namespace sycl { + +// Exposition only +template +struct memory_order_traits; + +template <> +struct memory_order_traits { + static constexpr memory_order read_order = memory_order::relaxed; + static constexpr memory_order write_order = memory_order::relaxed; +}; + +template <> +struct memory_order_traits { + static constexpr memory_order read_order = memory_order::acquire; + static constexpr memory_order write_order = memory_order::release; +}; + +template <> +struct memory_order_traits { + static constexpr memory_order read_order = memory_order::seq_cst; + static constexpr memory_order write_order = memory_order::seq_cst; +}; + +template +class atomic_ref { + public: + + using value_type = T; + static constexpr size_t required_alignment = /* implementation-defined */; + static constexpr bool is_always_lock_free = /* implementation-defined */; + static constexpr memory_order default_read_order = memory_order_traits::read_order; + static constexpr memory_order default_write_order = memory_order_traits::write_order; + static constexpr memory_order default_read_modify_write_order = DefaultOrder; + static constexpr memory_scope default_scope = DefaultScope; + + bool is_lock_free() const noexcept; + + explicit atomic_ref(T&); + atomic_ref(const atomic_ref&) noexcept; + atomic_ref& operator=(const atomic_ref&) = delete; + + void store(T operand, + memory_order order = default_write_order, + memory_scope scope = default_scope) const noexcept; + + T operator=(T desired) const noexcept; + + T load(memory_order order = default_read_order, + memory_scope scope = default_scope) const noexcept; + + operator T() const noexcept; + + T exchange(T operand, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const noexcept; + + bool compare_exchange_weak(T &expected, T desired, + memory_order success, + memory_order failure, + memory_scope scope = default_scope) const noexcept; + + bool compare_exchange_weak(T &expected, T desired, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const noexcept; + + bool compare_exchange_strong(T &expected, T desired, + memory_order success, + memory_order failure, + memory_scope scope = default_scope) const noexcept; + + bool compare_exchange_strong(T &expected, T desired, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const noexcept; +}; + +// Partial specialization for integral types +template +class atomic_ref { + + /* All other members from atomic_ref are available */ + + using difference_type = value_type; + + Integral fetch_add(Integral operand, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const noexcept; + + Integral fetch_sub(Integral operand, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const noexcept; + + Integral fetch_and(Integral operand, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const noexcept; + + Integral fetch_or(Integral operand, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const noexcept; + + Integral fetch_min(Integral operand, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const noexcept; + + Integral fetch_max(Integral operand, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const noexcept; + + Integral operator++(int) const noexcept; + Integral operator--(int) const noexcept; + Integral operator++() const noexcept; + Integral operator--() const noexcept; + Integral operator+=(Integral) const noexcept; + Integral operator-=(Integral) const noexcept; + Integral operator&=(Integral) const noexcept; + Integral operator|=(Integral) const noexcept; + Integral operator^=(Integral) const noexcept; + +}; + +// Partial specialization for floating-point types +template +class atomic_ref { + + /* All other members from atomic_ref are available */ + + using difference_type = value_type; + + Floating fetch_add(Floating operand, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const noexcept; + + Floating fetch_sub(Floating operand, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const noexcept; + + Floating fetch_min(Floating operand, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const noexcept; + + Floating fetch_max(Floating operand, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const noexcept; + + Floating operator+=(Floating) const noexcept; + Floating operator-=(Floating) const noexcept; + +}; + +// Partial specialization for pointers +template +class atomic_ref { + + using value_type = T*; + using difference_type = ptrdiff_t; + static constexpr size_t required_alignment = /* implementation-defined */; + static constexpr bool is_always_lock_free = /* implementation-defined */; + static constexpr memory_order default_read_order = memory_order_traits::read_order; + static constexpr memory_order default_write_order = memory_order_traits::write_order; + static constexpr memory_order default_read_modify_write_order = DefaultOrder; + static constexpr memory_scope default_scope = DefaultScope; + + bool is_lock_free() const noexcept; + + explicit atomic_ref(T*&); + atomic_ref(const atomic_ref&) noexcept; + atomic_ref& operator=(const atomic_ref&) = delete; + + void store(T* operand, + memory_order order = default_write_order, + memory_scope scope = default_scope) const noexcept; + + T* operator=(T* desired) const noexcept; + + T* load(memory_order order = default_read_order, + memory_scope scope = default_scope) const noexcept; + + operator T*() const noexcept; + + T* exchange(T* operand, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const noexcept; + + bool compare_exchange_weak(T* &expected, T* desired, + memory_order success, + memory_order failure, + memory_scope scope = default_scope) const noexcept; + + bool compare_exchange_weak(T* &expected, T* desired, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const noexcept; + + bool compare_exchange_strong(T* &expected, T* desired, + memory_order success, + memory_order failure, + memory_scope scope = default_scope) const noexcept; + + bool compare_exchange_strong(T* &expected, T* desired, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const noexcept; + + T* fetch_add(difference_type, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const noexcept; + + T* fetch_sub(difference_type, + memory_order order = default_read_modify_write_order, + memory_scope scope = default_scope) const noexcept; + + T* operator++(int) const noexcept; + T* operator--(int) const noexcept; + T* operator++() const noexcept; + T* operator--() const noexcept; + T* operator+=(difference_type) const noexcept; + T* operator-=(difference_type) const noexcept; + +}; + +} // namespace sycl diff --git a/adoc/headers/backends.h b/adoc/headers/backends.h new file mode 100644 index 00000000..403f3341 --- /dev/null +++ b/adoc/headers/backends.h @@ -0,0 +1,8 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +namespace sycl { +enum class backend { + +}; +} // namespace sycl diff --git a/adoc/headers/buffer.h b/adoc/headers/buffer.h new file mode 100644 index 00000000..6cf19e7e --- /dev/null +++ b/adoc/headers/buffer.h @@ -0,0 +1,189 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { +namespace property { +namespace buffer { +class use_host_ptr { + public: + use_host_ptr() = default; +}; + +class use_mutex { + public: + use_mutex(std::mutex &mutexRef); + + std::mutex *get_mutex_ptr() const; +}; + +class context_bound { + public: + context_bound(context boundContext); + + context get_context() const; +}; +} // namespace buffer +} // namespace property + +template >> +class buffer { + public: + using value_type = T; + using reference = value_type &; + using const_reference = const value_type &; + using allocator_type = AllocatorT; + + buffer(const range &bufferRange, + const property_list &propList = {}); + + buffer(const range &bufferRange, AllocatorT allocator, + const property_list &propList = {}); + + buffer(T *hostData, const range &bufferRange, + const property_list &propList = {}); + + buffer(T *hostData, const range &bufferRange, + AllocatorT allocator, const property_list &propList = {}); + + buffer(const T *hostData, const range &bufferRange, + const property_list &propList = {}); + + buffer(const T *hostData, const range &bufferRange, + AllocatorT allocator, const property_list &propList = {}); + + /* Available only if Container is a contiguous container: + - std::data(container) and std::size(container) are well formed + - return type of std::data(container) is convertible to T* + and dimensions == 1 */ + template + buffer(Container &container, AllocatorT allocator, + const property_list &propList = {}); + + /* Available only if Container is a contiguous container: + - std::data(container) and std::size(container) are well formed + - return type of std::data(container) is convertible to T* + and dimensions == 1 */ + template + buffer(Container &container, const property_list &propList = {}); + + buffer(const std::shared_ptr &hostData, + const range &bufferRange, AllocatorT allocator, + const property_list &propList = {}); + + buffer(const std::shared_ptr &hostData, + const range &bufferRange, + const property_list &propList = {}); + + buffer(const std::shared_ptr &hostData, + const range &bufferRange, AllocatorT allocator, + const property_list &propList = {}); + + buffer(const std::shared_ptr &hostData, + const range &bufferRange, + const property_list &propList = {}); + + template + buffer(InputIterator first, InputIterator last, AllocatorT allocator, + const property_list &propList = {}); + + template + buffer(InputIterator first, InputIterator last, + const property_list &propList = {}); + + buffer(buffer &b, const id &baseIndex, + const range &subRange); + + /* -- common interface members -- */ + + /* -- property interface members -- */ + + range get_range() const; + + size_t byte_size() const noexcept; + + size_t size() const noexcept; + + // Deprecated + size_t get_count() const; + + // Deprecated + size_t get_size() const; + + AllocatorT get_allocator() const; + + template + accessor get_access( + handler &commandGroupHandler); + + // Deprecated + template + accessor get_access(); + + template + accessor get_access( + handler &commandGroupHandler, range accessRange, + id accessOffset = {}); + + // Deprecated + template + accessor get_access( + range accessRange, id accessOffset = {}); + + template + auto get_access(Ts...); + + template + auto get_host_access(Ts...); + + template + void set_final_data(Destination finalData = nullptr); + + void set_write_back(bool flag = true); + + bool is_sub_buffer() const; + + template + buffer::template rebind_alloc< + ReinterpretT>> + reinterpret(range reinterpretRange) const; + + // Only available when ReinterpretDim == 1 + // or when (ReinterpretDim == dimensions) && + // (sizeof(ReinterpretT) == sizeof(T)) + template + buffer::template rebind_alloc< + ReinterpretT>> + reinterpret() const; +}; + +// Deduction guides +template +buffer(InputIterator, InputIterator, AllocatorT, const property_list & = {}) + -> buffer::value_type, 1, + AllocatorT>; + +template +buffer(InputIterator, InputIterator, const property_list & = {}) + -> buffer::value_type, 1>; + +template +buffer(const T *, const range &, AllocatorT, + const property_list & = {}) + -> buffer; + +template +buffer(const T *, const range &, const property_list & = {}) + -> buffer; + +template +buffer(Container &, AllocatorT, const property_list & = {}) + ->buffer; + +template +buffer(Container &, const property_list & = {}) + ->buffer; + +} // namespace sycl diff --git a/adoc/headers/bundle/deviceImageClass.h b/adoc/headers/bundle/deviceImageClass.h new file mode 100644 index 00000000..bcf62d84 --- /dev/null +++ b/adoc/headers/bundle/deviceImageClass.h @@ -0,0 +1,16 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +namespace sycl { + +template +class device_image { + public: + device_image() = delete; + + bool has_kernel(const kernel_id &kernelId) const noexcept; + + bool has_kernel(const kernel_id &kernelId, const device &dev) const noexcept; +}; + +} // namespace sycl diff --git a/adoc/headers/bundle/freeFunctions.h b/adoc/headers/bundle/freeFunctions.h new file mode 100644 index 00000000..65708a5e --- /dev/null +++ b/adoc/headers/bundle/freeFunctions.h @@ -0,0 +1,119 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +namespace sycl { + +enum class bundle_state { + input, + object, + executable +}; + + +class kernel_id { /* ... */ }; + +template +class kernel_bundle { /* ... */ }; + + +template +kernel_id get_kernel_id(); + +std::vector get_kernel_ids(); + + +template +kernel_bundle get_kernel_bundle(const context &ctxt); + +template +kernel_bundle get_kernel_bundle(const context &ctxt, + const std::vector &kernelIds); + +template +kernel_bundle get_kernel_bundle(const context &ctxt); + +template +kernel_bundle get_kernel_bundle(const context &ctxt, const std::vector &devs); + +template +kernel_bundle get_kernel_bundle(const context &ctxt, const std::vector &devs, + const std::vector &kernelIds); + +template +kernel_bundle get_kernel_bundle(const context &ctxt, const std::vector &devs); + +template +kernel_bundle get_kernel_bundle(const context &ctxt, Selector selector); + +template +kernel_bundle get_kernel_bundle(const context &ctxt, const std::vector &devs, + Selector selector); + + +template +bool has_kernel_bundle(const context &ctxt); + +template +bool has_kernel_bundle(const context &ctxt, const std::vector &kernelIds); + +template +bool has_kernel_bundle(const context &ctxt); + +template +bool has_kernel_bundle(const context &ctxt, const std::vector &devs); + +template +bool has_kernel_bundle(const context &ctxt, const std::vector &devs, + const std::vector &kernelIds); + +template +bool has_kernel_bundle(const context &ctxt, const std::vector &devs); + + +bool is_compatible(const std::vector &kernelIds, const device &dev); + +template +bool is_compatible(const device &dev); + + +template +kernel_bundle join(const std::vector> &bundles); + + +kernel_bundle +compile(const kernel_bundle &inputBundle, + const property_list &propList = {}); + +kernel_bundle +compile(const kernel_bundle &inputBundle, + const std::vector &devs, + const property_list &propList = {}); + +kernel_bundle +link(const kernel_bundle &objectBundle, + const property_list &propList = {}); + +kernel_bundle +link(const std::vector> &objectBundles, + const property_list &propList = {}); + +kernel_bundle +link(const kernel_bundle &objectBundle, + const std::vector &devs, + const property_list &propList = {}); + +kernel_bundle +link(const std::vector> &objectBundles, + const std::vector &devs, + const property_list &propList = {}); + +kernel_bundle +build(const kernel_bundle &inputBundle, + const property_list &propList = {}); + +kernel_bundle +build(const kernel_bundle &inputBundle, + const std::vector &devs, + const property_list &propList = {}); + +} // namespace sycl diff --git a/adoc/headers/bundle/kernelBundleClass.h b/adoc/headers/bundle/kernelBundleClass.h new file mode 100644 index 00000000..dd58dd19 --- /dev/null +++ b/adoc/headers/bundle/kernelBundleClass.h @@ -0,0 +1,52 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +namespace sycl { + +class kernel { /* ... */ }; + +template +class kernel_bundle { + public: + using device_image_iterator = __unspecified__; + + kernel_bundle() = delete; + + bool empty() const noexcept; + + backend get_backend() const noexcept; + + context get_context() const noexcept; + + std::vector get_devices() const noexcept; + + bool has_kernel(const kernel_id &kernelId) const noexcept; + + bool has_kernel(const kernel_id &kernelId, const device &dev) const noexcept; + + std::vector get_kernel_ids() const; + + /* Available only when: (State == bundle_state::executable) */ + kernel get_kernel(const kernel_id &kernelId) const; + + bool contains_specialization_constants() const noexcept; + + bool native_specialization_constant() const noexcept; + + template + bool has_specialization_constant() const noexcept; + + /* Available only when: (State == bundle_state::input) */ + template + void set_specialization_constant( + typename std::remove_reference_t::type value); + + template + typename std::remove_reference_t::type get_specialization_constant() const; + + device_image_iterator begin() const; + + device_image_iterator end() const; +}; + +} // namespace sycl diff --git a/adoc/headers/bundle/kernelClass.h b/adoc/headers/bundle/kernelClass.h new file mode 100644 index 00000000..981969b0 --- /dev/null +++ b/adoc/headers/bundle/kernelClass.h @@ -0,0 +1,26 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +namespace sycl { + +class kernel { + public: + kernel() = delete; + + backend get_backend() const noexcept; + + context get_context() const; + + kernel_bundle get_kernel_bundle() const; + + template + typename param::return_type get_info() const; + + template + typename param::return_type get_info(const device &dev) const; + + template + typename param::return_type get_backend_info() const; +}; + +} // namespace sycl diff --git a/adoc/headers/bundle/kernelIdClass.h b/adoc/headers/bundle/kernelIdClass.h new file mode 100644 index 00000000..cb87dfa3 --- /dev/null +++ b/adoc/headers/bundle/kernelIdClass.h @@ -0,0 +1,13 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +namespace sycl { + +class kernel_id { + public: + kernel_id() = delete; + + const char *get_name() const noexcept; +}; + +} // namespace sycl diff --git a/adoc/headers/commandGroup.h b/adoc/headers/commandGroup.h new file mode 100644 index 00000000..d7691670 --- /dev/null +++ b/adoc/headers/commandGroup.h @@ -0,0 +1,22 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { +class command_group { + public: + template + command_group(queue &primaryQueue, const functorT &lambda); + + template + command_group(queue &primaryQueue, queue &secondaryQueue, + const functorT &lambda); + + ~command_group(); + + event start_event(); + + event kernel_event(); + + event complete_event(); +}; +} // namespace sycl diff --git a/adoc/headers/commandGroupHandler.h b/adoc/headers/commandGroupHandler.h new file mode 100644 index 00000000..7b6bc28e --- /dev/null +++ b/adoc/headers/commandGroupHandler.h @@ -0,0 +1,130 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { + +class handler { + private: + + // implementation defined constructor + handler(___unspecified___); + + public: + + template + void require(accessor acc); + + void depends_on(event depEvent); + + void depends_on(const std::vector &depEvents); + + //----- Backend interoperability interface + // + template + void set_arg(int argIndex, T && arg); + + template + void set_args(Ts &&... args); + + //------ Kernel dispatch API + // + // Note: In all kernel dispatch functions, the template parameter + // "typename KernelName" is optional. + // + template + void single_task(const KernelType &kernelFunc); + + // Parameter pack acts as-if: Reductions&&... reductions, const KernelType &kernelFunc + template + void parallel_for(range numWorkItems, + Rest&&... rest); + + // Deprecated in SYCL 2020. + template + void parallel_for(range numWorkItems, + id workItemOffset, + const KernelType& kernelFunc); + + // Parameter pack acts as-if: Reductions&&... reductions, const KernelType &kernelFunc + template + void parallel_for(nd_range executionRange, + Rest&&... rest); + + template + void parallel_for_work_group(range numWorkGroups, + const WorkgroupFunctionType &kernelFunc); + + template + void parallel_for_work_group(range numWorkGroups, + range workGroupSize, + const WorkgroupFunctionType &kernelFunc); + + void single_task(const kernel &kernelObject); + + template + void parallel_for(range numWorkItems, const kernel &kernelObject); + + template + void parallel_for(nd_range ndRange, const kernel &kernelObject); + + + //------ USM functions + // + + void memcpy(void *dest, const void *src, size_t numBytes); + + template + void copy(T *dest, const T *src, size_t count); + + void memset(void *ptr, int value, size_t numBytes); + + template + void fill(void *ptr, const T &pattern, size_t count); + + void prefetch(void *ptr, size_t numBytes); + + void mem_advise(void *ptr, size_t numBytes, int advice); + + + //------ Explicit memory operation APIs + // + template + void copy(accessor src, + std::shared_ptr dest); + + template + void copy(std::shared_ptr src, + accessor dest); + + template + void copy(accessor src, + T_dest *dest); + + template + void copy(const T_src *src, + accessor dest); + + template + void copy(accessor src, + accessor dest); + + template + void update_host(accessor acc); + + template + void fill(accessor dest, const T& src); + + void use_kernel_bundle(const kernel_bundle &execBundle); + + template + typename std::remove_reference_t::type get_specialization_constant(); + +}; +} // namespace sycl diff --git a/adoc/headers/common-byval.h b/adoc/headers/common-byval.h new file mode 100644 index 00000000..7797502a --- /dev/null +++ b/adoc/headers/common-byval.h @@ -0,0 +1,34 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { + +class T { + ... + + public: + // If any of the following five special member functions are not + // public, inline or defaulted, then all five of them should be + // explicitly declared (see rule of five). + // Otherwise, none of them should be explicitly declared + // (see rule of zero). + + // T(const T &rhs); + + // T(T &&rhs); + + // T &operator=(const T &rhs); + + // T &operator=(T &&rhs); + + // ~T(); + + ... + + friend bool operator==(const T &lhs, const T &rhs) { /* ... */ } + + friend bool operator!=(const T &lhs, const T &rhs) { /* ... */ } + + ... +}; +} // namespace sycl diff --git a/adoc/headers/common-reference.h b/adoc/headers/common-reference.h new file mode 100644 index 00000000..f859327f --- /dev/null +++ b/adoc/headers/common-reference.h @@ -0,0 +1,28 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { + +class T { + ... + + public: + T(const T &rhs); + + T(T &&rhs); + + T &operator=(const T &rhs); + + T &operator=(T &&rhs); + + ~T(); + + ... + + friend bool operator==(const T &lhs, const T &rhs) { /* ... */ } + + friend bool operator!=(const T &lhs, const T &rhs) { /* ... */ } + + ... +}; +} // namespace sycl diff --git a/adoc/headers/context.h b/adoc/headers/context.h new file mode 100644 index 00000000..678f74ca --- /dev/null +++ b/adoc/headers/context.h @@ -0,0 +1,39 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { +class context { + public: + explicit context(const property_list &propList = {}); + + explicit context(async_handler asyncHandler, + const property_list &propList = {}); + + explicit context(const device &dev, const property_list &propList = {}); + + explicit context(const device &dev, async_handler asyncHandler, + const property_list &propList = {}); + + explicit context(const std::vector &deviceList, + const property_list &propList = {}); + + explicit context(const std::vector &deviceList, + async_handler asyncHandler, + const property_list &propList = {}); + + /* -- property interface members -- */ + + /* -- common interface members -- */ + + backend get_backend() const noexcept; + + platform get_platform() const; + + std::vector get_devices() const; + + template typename param::return_type get_info() const; + + template + typename param::return_type get_backend_info() const; +}; +} // namespace sycl diff --git a/adoc/headers/contextInfo.h b/adoc/headers/contextInfo.h new file mode 100644 index 00000000..ef6a937f --- /dev/null +++ b/adoc/headers/contextInfo.h @@ -0,0 +1,17 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { +namespace info { +namespace context { + +struct platform; +struct devices; +struct atomic_memory_order_capabilities; +struct atomic_fence_order_capabilities; +struct atomic_memory_scope_capabilities; +struct atomic_fence_scope_capabilities; + +} // namespace context +} // info +} // sycl diff --git a/adoc/headers/device.h b/adoc/headers/device.h new file mode 100644 index 00000000..69fed091 --- /dev/null +++ b/adoc/headers/device.h @@ -0,0 +1,49 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { + +class device { + public: + device(); + + template + explicit device(const DeviceSelector &deviceSelector); + + /* -- common interface members -- */ + + backend get_backend() const noexcept; + + bool is_cpu() const; + + bool is_gpu() const; + + bool is_accelerator() const; + + platform get_platform() const; + + template typename param::return_type get_info() const; + + template + typename param::return_type get_backend_info() const; + + bool has(aspect asp) const; + + bool has_extension(const std::string &extension) const; // Deprecated + + // Available only when prop == info::partition_property::partition_equally + template + std::vector create_sub_devices(size_t count) const; + + // Available only when prop == info::partition_property::partition_by_counts + template + std::vector create_sub_devices(const std::vector &counts) const; + + // Available only when prop == info::partition_property::partition_by_affinity_domain + template + std::vector create_sub_devices(info::partition_affinity_domain affinityDomain) const; + + static std::vector get_devices( + info::device_type deviceType = info::device_type::all); +}; +} // namespace sycl diff --git a/adoc/headers/deviceEnumClassAspect.h b/adoc/headers/deviceEnumClassAspect.h new file mode 100644 index 00000000..75dc2a9a --- /dev/null +++ b/adoc/headers/deviceEnumClassAspect.h @@ -0,0 +1,28 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +namespace sycl { + +enum class aspect { + cpu, + gpu, + accelerator, + custom, + emulated, + host_debuggable, + fp16, + fp64, + atomic64, + image, + online_compiler, + online_linker, + queue_profiling, + usm_device_allocations, + usm_host_allocations, + usm_atomic_host_allocations, + usm_shared_allocations, + usm_atomic_shared_allocations, + usm_system_allocations +}; + +} // namespace sycl diff --git a/adoc/headers/deviceEvent.h b/adoc/headers/deviceEvent.h new file mode 100644 index 00000000..bdf4052c --- /dev/null +++ b/adoc/headers/deviceEvent.h @@ -0,0 +1,12 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { +class device_event { + + device_event(__unspecified__); + + public: + void wait() noexcept; +}; +} // namespace sycl diff --git a/adoc/headers/deviceInfo.h b/adoc/headers/deviceInfo.h new file mode 100644 index 00000000..0fdd8ba8 --- /dev/null +++ b/adoc/headers/deviceInfo.h @@ -0,0 +1,137 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { +namespace info { +namespace device { + +struct device_type; +struct vendor_id; +struct max_compute_units; +struct max_work_item_dimensions; +template struct max_work_item_sizes; +struct max_work_group_size; +struct preferred_vector_width_char; +struct preferred_vector_width_short; +struct preferred_vector_width_int; +struct preferred_vector_width_long; +struct preferred_vector_width_float; +struct preferred_vector_width_double; +struct preferred_vector_width_half; +struct native_vector_width_char; +struct native_vector_width_short; +struct native_vector_width_int; +struct native_vector_width_long; +struct native_vector_width_float; +struct native_vector_width_double; +struct native_vector_width_half; +struct max_clock_frequency; +struct address_bits; +struct max_mem_alloc_size; +struct image_support; // Deprecated +struct max_read_image_args; +struct max_write_image_args; +struct image2d_max_height; +struct image2d_max_width; +struct image3d_max_height; +struct image3d_max_width; +struct image3d_max_depth; +struct image_max_buffer_size; +struct max_samplers; +struct max_parameter_size; +struct mem_base_addr_align; +struct half_fp_config; +struct single_fp_config; +struct double_fp_config; +struct global_mem_cache_type; +struct global_mem_cache_line_size; +struct global_mem_cache_size; +struct global_mem_size; +struct max_constant_buffer_size; // Deprecated +struct max_constant_args; // Deprecated +struct local_mem_type; +struct local_mem_size; +struct error_correction_support; +struct host_unified_memory; +struct atomic_memory_order_capabilities; +struct atomic_fence_order_capabilities; +struct atomic_memory_scope_capabilities; +struct atomic_fence_scope_capabilities; +struct profiling_timer_resolution; +struct is_endian_little; +struct is_available; +struct is_compiler_available; // Deprecated +struct is_linker_available; // Deprecated +struct execution_capabilities; +struct queue_profiling; // Deprecated +struct built_in_kernels; // Deprecated +struct built_in_kernel_ids; +struct platform; +struct name; +struct vendor; +struct driver_version; +struct profile; +struct version; +struct backend_version; +struct aspects; +struct extensions; // Deprecated +struct printf_buffer_size; +struct preferred_interop_user_sync; +struct parent_device; +struct partition_max_sub_devices; +struct partition_properties; +struct partition_affinity_domains; +struct partition_type_property; +struct partition_type_affinity_domain; + +} // namespace device + +enum class device_type : unsigned int { + cpu, // Maps to OpenCL CL_DEVICE_TYPE_CPU + gpu, // Maps to OpenCL CL_DEVICE_TYPE_GPU + accelerator, // Maps to OpenCL CL_DEVICE_TYPE_ACCELERATOR + custom, // Maps to OpenCL CL_DEVICE_TYPE_CUSTOM + automatic, // Maps to OpenCL CL_DEVICE_TYPE_DEFAULT + host, + all // Maps to OpenCL CL_DEVICE_TYPE_ALL +}; + +enum class partition_property : int { + no_partition, + partition_equally, + partition_by_counts, + partition_by_affinity_domain +}; + +enum class partition_affinity_domain : int { + not_applicable, + numa, + L4_cache, + L3_cache, + L2_cache, + L1_cache, + next_partitionable +}; + +enum class local_mem_type : int { none, local, global }; + +enum class fp_config : int { + denorm, + inf_nan, + round_to_nearest, + round_to_zero, + round_to_inf, + fma, + correctly_rounded_divide_sqrt, + soft_float +}; + +enum class global_mem_cache_type : int { none, read_only, read_write }; + +enum class execution_capability : unsigned int { + exec_kernel, + exec_native_kernel +}; + +} // namespace info +} // namespace sycl diff --git a/adoc/headers/deviceSelector.h b/adoc/headers/deviceSelector.h new file mode 100644 index 00000000..52c92097 --- /dev/null +++ b/adoc/headers/deviceSelector.h @@ -0,0 +1,27 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { + +// Predefined device selectors +__unspecified__ default_selector_v; +__unspecified__ cpu_selector_v; +__unspecified__ gpu_selector_v; +__unspecified__ accelerator_selector_v; + +// Predefined types for compatibility with old SYCL 1.2.1 device selectors +using default_selector = __unspecified__; +using cpu_selector = __unspecified__; +using gpu_selector = __unspecified__; +using accelerator_selector = __unspecified__; + +// Returns a selector that selects a device based on desired aspects +__unspecified_callable__ aspect_selector( + const std::vector &aspectList, + const std::vector &denyList = {}); +template +__unspecified_callable__ aspect_selector(aspectListTN... aspectList); +template +__unspecified_callable__ aspect_selector(); + +} // namespace sycl diff --git a/adoc/headers/event.h b/adoc/headers/event.h new file mode 100644 index 00000000..7cc3609a --- /dev/null +++ b/adoc/headers/event.h @@ -0,0 +1,33 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { + +class event { + public: + event(); + + /* -- common interface members -- */ + + backend get_backend() const noexcept; + + std::vector get_wait_list(); + + void wait(); + + static void wait(const std::vector &eventList); + + void wait_and_throw(); + + static void wait_and_throw(const std::vector &eventList); + + template typename param::return_type get_info() const; + + template + typename param::return_type get_backend_info() const; + + template + typename param::return_type get_profiling_info() const; +}; + +} // namespace sycl diff --git a/adoc/headers/eventInfo.h b/adoc/headers/eventInfo.h new file mode 100644 index 00000000..33847332 --- /dev/null +++ b/adoc/headers/eventInfo.h @@ -0,0 +1,26 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { +namespace info { +namespace event { + +struct command_execution_status; + +} // namespace event + +enum class event_command_status : int { + submitted, + running, + complete +}; + +namespace event_profiling { + +struct command_submit; +struct command_start; +struct command_end; + +} // namespace event_profiling +} // namespace info +} // namespace sycl diff --git a/adoc/headers/exception.h b/adoc/headers/exception.h new file mode 100644 index 00000000..118f2578 --- /dev/null +++ b/adoc/headers/exception.h @@ -0,0 +1,84 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { + +using async_handler = std::function; + +class exception : public virtual std::exception { + public: + exception(std::error_code ec, const std::string& what_arg); + exception(std::error_code ec, const char * what_arg); + exception(std::error_code ec); + exception(int ev, const std::error_category& ecat, const std::string& what_arg); + exception(int ev, const std::error_category& ecat, const char* what_arg); + exception(int ev, const std::error_category& ecat); + + exception(context ctx, std::error_code ec, const std::string& what_arg); + exception(context ctx, std::error_code ec, const char* what_arg); + exception(context ctx, std::error_code ec); + exception(context ctx, int ev, const std::error_category& ecat, const std::string& what_arg); + exception(context ctx, int ev, const std::error_category& ecat, const char* what_arg); + exception(context ctx, int ev, const std::error_category& ecat); + + const std::error_code& code() const noexcept; + const std::error_category& category() const noexcept; + + bool has_context() const noexcept; + context get_context() const; +}; + +class exception_list { + // Used as a container for a list of asynchronous exceptions + public: + using value_type = std::exception_ptr; + using reference = value_type&; + using const_reference = const value_type&; + using size_type = std::size_t; + using iterator = /*unspecified*/; + using const_iterator = /*unspecified*/; + + size_type size() const; + iterator begin() const; // first asynchronous exception + iterator end() const; // refer to past-the-end last asynchronous exception +}; + +enum class errc { + runtime = /* implementation-defined */, + kernel = /* implementation-defined */, + accessor = /* implementation-defined */, + nd_range = /* implementation-defined */, + event = /* implementation-defined */, + kernel_argument = /* implementation-defined */, + build = /* implementation-defined */, + invalid = /* implementation-defined */, + memory_allocation = /* implementation-defined */, + platform = /* implementation-defined */, + profiling = /* implementation-defined */, + feature_not_supported = /* implementation-defined */, + kernel_not_supported = /* implementation-defined */, + backend_mismatch = /* implementation-defined */ +}; + +template +using errc_for = typename backend_traits::errc; + +std::error_condition make_error_condition(errc e) noexcept; +std::error_code make_error_code(errc e) noexcept; + +const std::error_category& sycl_category() noexcept; + +template +const std::error_category& error_category_for() noexcept; + +} // namespace sycl + +namespace std { + + template <> + struct is_error_condition_enum : true_type {}; + + template <> + struct is_error_code_enum : true_type {}; + +} // namespace std diff --git a/adoc/headers/expressingParallelism/classKernelHandler.h b/adoc/headers/expressingParallelism/classKernelHandler.h new file mode 100644 index 00000000..96237dbf --- /dev/null +++ b/adoc/headers/expressingParallelism/classKernelHandler.h @@ -0,0 +1,12 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +namespace sycl { + +class kernel_handler { + public: + template + typename std::remove_reference_t::type get_specialization_constant(); +}; + +} // namespace sycl diff --git a/adoc/headers/expressingParallelism/classSpecializationId.h b/adoc/headers/expressingParallelism/classSpecializationId.h new file mode 100644 index 00000000..9665b216 --- /dev/null +++ b/adoc/headers/expressingParallelism/classSpecializationId.h @@ -0,0 +1,20 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +namespace sycl { + +template +class specialization_id { + public: + using value_type = T; + + template + explicit constexpr specialization_id(Args&&... args); + + specialization_id(const specialization_id& rhs) = delete; + specialization_id(specialization_id&& rhs) = delete; + specialization_id &operator=(const specialization_id& rhs) = delete; + specialization_id &operator=(specialization_id&& rhs) = delete; +}; + +} // namespace sycl diff --git a/adoc/headers/expressingParallelism/kernelHandlerSynopsis.h b/adoc/headers/expressingParallelism/kernelHandlerSynopsis.h new file mode 100644 index 00000000..667ab451 --- /dev/null +++ b/adoc/headers/expressingParallelism/kernelHandlerSynopsis.h @@ -0,0 +1,21 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +namespace sycl { + +class kernel_handler { + private: + + kernel_handler(__unspecified__); + + public: + + template + bool has_specialization_constant() const noexcept; + + template + typename std::remove_reference_t::type get_specialization_constant(); + +}; + +} // namespace sycl diff --git a/adoc/headers/functional.h b/adoc/headers/functional.h new file mode 100644 index 00000000..d0af2bff --- /dev/null +++ b/adoc/headers/functional.h @@ -0,0 +1,51 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +namespace sycl { + +template +struct plus { + T operator()(const T& x, const T& y) const; +}; + +template +struct multiplies { + T operator()(const T& x, const T& y) const; +}; + +template +struct bit_and { + T operator()(const T& x, const T& y) const; +}; + +template +struct bit_or { + T operator()(const T& x, const T& y) const; +}; + +template +struct bit_xor { + T operator()(const T& x, const T& y) const; +}; + +template +struct logical_and { + T operator()(const T& x, const T& y) const; +}; + +template +struct logical_or { + T operator()(const T& x, const T& y) const; +}; + +template +struct minimum { + T operator()(const T& x, const T& y) const; +}; + +template +struct maximum { + T operator()(const T& x, const T& y) const; +}; + +} // namespace sycl diff --git a/adoc/headers/group.h b/adoc/headers/group.h new file mode 100644 index 00000000..65776783 --- /dev/null +++ b/adoc/headers/group.h @@ -0,0 +1,73 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { +template +class group { +public: + + using id_type = id; + using range_type = range; + using linear_id_type = size_t; + static constexpr int dimensions = Dimensions; + static constexpr memory_scope fence_scope = memory_scope::work_group; + + /* -- common interface members -- */ + + id get_group_id() const; + + size_t get_group_id(int dimension) const; + + id get_local_id() const; + + size_t get_local_id(int dimension) const; + + range get_local_range() const; + + size_t get_local_range(int dimension) const; + + range get_group_range() const; + + size_t get_group_range(int dimension) const; + + range get_max_local_range() const; + + size_t operator[](int dimension) const; + + size_t get_group_linear_id() const; + + size_t get_local_linear_id() const; + + size_t get_group_linear_range() const; + + size_t get_local_linear_range() const; + + bool leader() const; + + template + void parallel_for_work_item(const workItemFunctionT &func) const; + + template + void parallel_for_work_item(range logicalRange, + const workItemFunctionT &func) const; + + template + device_event async_work_group_copy(decorated_local_ptr dest, + decorated_global_ptr src, size_t numElements) const; + + template + device_event async_work_group_copy(decorated_global_ptr dest, + decorated_local_ptr src, size_t numElements) const; + + template + device_event async_work_group_copy(decorated_local_ptr dest, + decorated_global_ptr src, size_t numElements, size_t srcStride) const; + + template + device_event async_work_group_copy(decorated_global_ptr dest, + decorated_local_ptr src, size_t numElements, size_t destStride) const; + + template + void wait_for(eventTN... events) const; +}; +} // sycl diff --git a/adoc/headers/groups/barrier.h b/adoc/headers/groups/barrier.h new file mode 100644 index 00000000..7e4967ab --- /dev/null +++ b/adoc/headers/groups/barrier.h @@ -0,0 +1,5 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +template +void group_barrier(Group g, memory_scope fence_scope = Group::fence_scope); // (1) diff --git a/adoc/headers/groups/broadcast.h b/adoc/headers/groups/broadcast.h new file mode 100644 index 00000000..6a6d9715 --- /dev/null +++ b/adoc/headers/groups/broadcast.h @@ -0,0 +1,11 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +template +bool group_broadcast(Group g, T x); // (1) + +template +T group_broadcast(Group g, T x, Group::linear_id_type local_linear_id); // (2) + +template +T group_broadcast(Group g, T x, Group::id_type local_id); // (3) diff --git a/adoc/headers/handler/useKernelBundle.h b/adoc/headers/handler/useKernelBundle.h new file mode 100644 index 00000000..220ca7b6 --- /dev/null +++ b/adoc/headers/handler/useKernelBundle.h @@ -0,0 +1,4 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +void use_kernel_bundle(const kernel_bundle &execBundle); diff --git a/adoc/headers/hitem.h b/adoc/headers/hitem.h new file mode 100644 index 00000000..1f51b6f6 --- /dev/null +++ b/adoc/headers/hitem.h @@ -0,0 +1,53 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { +template +class h_item { +public: + h_item() = delete; + + /* -- common interface members -- */ + + item get_global() const; + + item get_local() const; + + item get_logical_local() const; + + item get_physical_local() const; + + range get_global_range() const; + + size_t get_global_range(int dimension) const; + + id get_global_id() const; + + size_t get_global_id(int dimension) const; + + range get_local_range() const; + + size_t get_local_range(int dimension) const; + + id get_local_id() const; + + size_t get_local_id(int dimension) const; + + range get_logical_local_range() const; + + size_t get_logical_local_range(int dimension) const; + + id get_logical_local_id() const; + + size_t get_logical_local_id(int dimension) const; + + range get_physical_local_range() const; + + size_t get_physical_local_range(int dimension) const; + + id get_physical_local_id() const; + + size_t get_physical_local_id(int dimension) const; + +}; +} // namespace sycl diff --git a/adoc/headers/hostTask/classHandler/hostTask.h b/adoc/headers/hostTask/classHandler/hostTask.h new file mode 100644 index 00000000..2ba03cf4 --- /dev/null +++ b/adoc/headers/hostTask/classHandler/hostTask.h @@ -0,0 +1,12 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +class handler { + ... + + public: + template + void host_task(T &&hostTaskCallable); // (1) + + ... +}; diff --git a/adoc/headers/hostTask/classInteropHandle.h b/adoc/headers/hostTask/classInteropHandle.h new file mode 100644 index 00000000..3024faf4 --- /dev/null +++ b/adoc/headers/hostTask/classInteropHandle.h @@ -0,0 +1,4 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +class interop_handle; diff --git a/adoc/headers/hostTask/classInteropHandle/constructors.h b/adoc/headers/hostTask/classInteropHandle/constructors.h new file mode 100644 index 00000000..9ee22d03 --- /dev/null +++ b/adoc/headers/hostTask/classInteropHandle/constructors.h @@ -0,0 +1,10 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +private: + + interop_handle(__unspecified__); // (1) + +public: + + interop_handle() = delete; // (2) diff --git a/adoc/headers/hostTask/classInteropHandle/getbackend.h b/adoc/headers/hostTask/classInteropHandle/getbackend.h new file mode 100644 index 00000000..895b9730 --- /dev/null +++ b/adoc/headers/hostTask/classInteropHandle/getbackend.h @@ -0,0 +1,4 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +backend get_backend() const noexcept; diff --git a/adoc/headers/hostTask/classInteropHandle/getnativeX.h b/adoc/headers/hostTask/classInteropHandle/getnativeX.h new file mode 100644 index 00000000..1e07b6dc --- /dev/null +++ b/adoc/headers/hostTask/classInteropHandle/getnativeX.h @@ -0,0 +1,28 @@ +headers/hostTask/classInteropHandle/getnativeX.h +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +template +backend_return_t> +get_native_mem(const accessor &bufferAcc) const; + +template +backend_return_t> +get_native_mem( // (2) + const unsampled_image_accessor &imageAcc) const; + +template +backend_return_t> +get_native_mem( // (3) + const sampled_image_accessor &imageAcc) const; + +template +backend_return_t get_native_queue() const; // (4) + +template +backend_return_t get_native_device() const; // (5) + +template +backend_return_t get_native_context() const; // (6) diff --git a/adoc/headers/hostTask/hostTaskSynopsis.h b/adoc/headers/hostTask/hostTaskSynopsis.h new file mode 100644 index 00000000..ff99bf4b --- /dev/null +++ b/adoc/headers/hostTask/hostTaskSynopsis.h @@ -0,0 +1,57 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +namespace sycl { + +class interop_handle { + private: + + interop_handle(__unspecified__); + + public: + + interop_handle() = delete; + + backend get_backend() const noexcept; + + template + backend_return_t> + get_native_mem(const accessor &bufferAccessor) const; + + template + backend_return_t> + get_native_mem( + const unsampled_image_accessor + &imageAcc) const; + + template + backend_return_t> + get_native_mem( + const sampled_image_accessor &imageAcc) + const; + + template + backend_return_t get_native_queue() const; + + template + backend_return_t get_native_device() const; + + template + backend_return_t get_native_context() const; + +}; + +class handler { + ... + + public: + + template + void host_task(T &&hostTaskCallable); + + ... +}; + +} // namespace sycl diff --git a/adoc/headers/id.h b/adoc/headers/id.h new file mode 100644 index 00000000..ca16deee --- /dev/null +++ b/adoc/headers/id.h @@ -0,0 +1,59 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { +template +class id { +public: + id(); + + /* The following constructor is only available in the id class + * specialization where: dimensions==1 */ + id(size_t dim0); + /* The following constructor is only available in the id class + * specialization where: dimensions==2 */ + id(size_t dim0, size_t dim1); + /* The following constructor is only available in the id class + * specialization where: dimensions==3 */ + id(size_t dim0, size_t dim1, size_t dim2); + + /* -- common interface members -- */ + + id(const range &range); + id(const item &item); + + size_t get(int dimension) const; + size_t &operator[](int dimension); + size_t operator[](int dimension) const; + + // only available if dimensions == 1 + operator size_t() const; + + // OP is: +, -, *, /, %, <<, >>, &, |, ^, &&, ||, <, >, <=, >= + friend id operatorOP(const id &lhs, const id &rhs) { /* ... */ } + friend id operatorOP(const id &lhs, const size_t &rhs) { /* ... */ } + + // OP is: +=, -=, *=, /=, %=, <<=, >>=, &=, |=, ^= + friend id &operatorOP(id &lhs, const id &rhs) { /* ... */ } + friend id &operatorOP(id &lhs, const size_t &rhs) { /* ... */ } + + // OP is: +, -, *, /, %, <<, >>, &, |, ^, &&, ||, <, >, <=, >= + friend id operatorOP(const size_t &lhs, const id &rhs) { /* ... */ } + + // OP is unary +, - + friend id operatorOP(const id &rhs) { /* ... */ } + + // OP is prefix ++, -- + friend id & operatorOP(id &rhs) { /* ... */ } + + // OP is postfix ++, -- + friend id operatorOP(id &lhs, int) { /* ... */ } + +}; + +// Deduction guides +id(size_t) -> id<1>; +id(size_t, size_t) -> id<2>; +id(size_t, size_t, size_t) -> id<3>; + +} // namespace sycl diff --git a/adoc/headers/identity.h b/adoc/headers/identity.h new file mode 100644 index 00000000..f83239a5 --- /dev/null +++ b/adoc/headers/identity.h @@ -0,0 +1,18 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +template +struct known_identity { + static constexpr AccumulatorT value; +}; + +template +inline constexpr AccumulatorT known_identity_v = known_identity::value; + +template +struct has_known_identity { + static constexpr bool value; +}; + +template +inline constexpr bool has_known_identity_v = has_known_identity::value; diff --git a/adoc/headers/imageProperties.h b/adoc/headers/imageProperties.h new file mode 100644 index 00000000..f94de125 --- /dev/null +++ b/adoc/headers/imageProperties.h @@ -0,0 +1,27 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { +namespace property { +namespace image { +class use_host_ptr { + public: + use_host_ptr() = default; +}; + +class use_mutex { + public: + use_mutex(std::mutex &mutexRef); + + std::mutex *get_mutex_ptr() const; +}; + +class context_bound { + public: + context_bound(context boundContext); + + context get_context() const; +}; +} // namespace image +} // namespace property +} // namespace sycl diff --git a/adoc/headers/imageSampler.h b/adoc/headers/imageSampler.h new file mode 100644 index 00000000..1238ba29 --- /dev/null +++ b/adoc/headers/imageSampler.h @@ -0,0 +1,28 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { +enum class addressing_mode: unsigned int { + mirrored_repeat, + repeat, + clamp_to_edge, + clamp, + none +}; + +enum class filtering_mode: unsigned int { + nearest, + linear +}; + +enum class coordinate_normalization_mode : unsigned int { + normalized, + unnormalized +}; + +struct image_sampler { + addressing_mode addressing; + coordinate_mode coordinate; + filtering_mode filtering; +}; +} // namespace sycl diff --git a/adoc/headers/interop/templateFunctionGetNative.h b/adoc/headers/interop/templateFunctionGetNative.h new file mode 100644 index 00000000..6be9a2c4 --- /dev/null +++ b/adoc/headers/interop/templateFunctionGetNative.h @@ -0,0 +1,9 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +namespace sycl { + +template +backend_return_t get_native(const T &syclObject); + +} // namespace sycl diff --git a/adoc/headers/interop/templateFunctionMakeX.h b/adoc/headers/interop/templateFunctionMakeX.h new file mode 100644 index 00000000..baaaf5d4 --- /dev/null +++ b/adoc/headers/interop/templateFunctionMakeX.h @@ -0,0 +1,77 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +namespace sycl { + +template +platform make_platform(const backend_input_t &backendObject); + +template +device make_device(const backend_input_t &backendObject); + +template +context make_context(const backend_input_t &backendObject, + const async_handler asyncHandler = {}); + +template +queue make_queue(const backend_input_t &backendObject, + const context &targetContext, + const async_handler asyncHandler = {}); + +template +event make_event(const backend_input_t &backendObject, + const context &targetContext); + +template >> +buffer +make_buffer(const backend_input_t> + &backendObject, + const context &targetContext, event availableEvent); + +template >> +buffer +make_buffer(const backend_input_t> + &backendObject, + const context &targetContext); + +template +sampled_image make_sampled_image( + const backend_input_t> + &backendObject, + const context &targetContext, image_sampler imageSampler, + event availableEvent); + +template +sampled_image make_sampled_image( + const backend_input_t> + &backendObject, + const context &targetContext, image_sampler imageSampler); + +template +unsampled_image make_unsampled_image( + const backend_input_t> + &backendObject, + const context &targetContext, event availableEvent); + +template +unsampled_image make_unsampled_image( + const backend_input_t> + &backendObject, + const context &targetContext); + +template +kernel_bundle make_kernel_bundle( + const backend_input_t> &backendObject, + const context &targetContext); + +template +kernel make_kernel(const backend_input_t &backendObject, + const context &targetContext); + +} // namespace sycl diff --git a/adoc/headers/interop/typeTraitsBackendTraits.h b/adoc/headers/interop/typeTraitsBackendTraits.h new file mode 100644 index 00000000..964d5bd6 --- /dev/null +++ b/adoc/headers/interop/typeTraitsBackendTraits.h @@ -0,0 +1,26 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +namespace sycl { + +template +class backend_traits { + public: + template + using input_type = see-below; + + template + using return_type = see-below; + + using errc = see-below; +}; + +template +using backend_input_t = + typename backend_traits::template input_type; + +template +using backend_return_t = + typename backend_traits::template return_type; + +} // namespace sycl diff --git a/adoc/headers/item.h b/adoc/headers/item.h new file mode 100644 index 00000000..8cb063fa --- /dev/null +++ b/adoc/headers/item.h @@ -0,0 +1,34 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { +template +class item { +public: + item() = delete; + + /* -- common interface members -- */ + + id get_id() const; + + size_t get_id(int dimension) const; + + size_t operator[](int dimension) const; + + range get_range() const; + + size_t get_range(int dimension) const; + + // Deprecated in SYCL 2020. + // only available if with_offset is true + id get_offset() const; + + // only available if with_offset is false + operator item() const; + + // only available if dimensions == 1 + operator size_t() const; + + size_t get_linear_id() const; +}; +} // namespace sycl diff --git a/adoc/headers/kernelInfo.h b/adoc/headers/kernelInfo.h new file mode 100644 index 00000000..f2214047 --- /dev/null +++ b/adoc/headers/kernelInfo.h @@ -0,0 +1,28 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { +namespace info { +namespace kernel { + +struct num_args; +struct attributes; + +} // namespace kernel + +namespace kernel_device_specific { + +struct global_work_size; +struct work_group_size; +struct compile_work_group_size; +struct preferred_work_group_size_multiple; +struct private_mem_size; +struct max_num_sub_groups; +struct compile_num_sub_groups; +struct max_sub_group_size; +struct compile_sub_group_size; + +} // namespace kernel_device_specific + +} // namespace info +} // namespace sycl diff --git a/adoc/headers/marray.h b/adoc/headers/marray.h new file mode 100755 index 00000000..6fc4da0e --- /dev/null +++ b/adoc/headers/marray.h @@ -0,0 +1,124 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { + +template +class marray { + public: + using value_type = dataT; + using reference = dataT&; + using const_reference = const dataT&; + using iterator = dataT*; + using const_iterator = const dataT*; + + marray(); + + explicit marray(const dataT &arg); + + template + marray(const argTN&... args); + + marray(const marray &rhs); + marray(marray &&rhs); + + // Available only when: numElements == 1 + operator dataT() const; + + static constexpr std::size_t size() noexcept; + + // subscript operator + reference operator[](std::size_t index); + const_reference operator[](std::size_t index) const; + + marray &operator=(const marray &rhs); + marray &operator=(const dataT &rhs); + + // iterator functions + iterator begin(); + const_iterator begin() const; + + iterator end(); + const_iterator end() const; + + + // OP is: +, -, *, /, % + /* If OP is %, available only when: dataT != float && dataT != double && dataT != half. */ + friend marray operatorOP(const marray &lhs, const marray &rhs) { /* ... */ } + friend marray operatorOP(const marray &lhs, const dataT &rhs) { /* ... */ } + + // OP is: +=, -=, *=, /=, %= + /* If OP is %=, available only when: dataT != float && dataT != double && dataT != half. */ + friend marray &operatorOP(marray &lhs, const marray &rhs) { /* ... */ } + friend marray &operatorOP(marray &lhs, const dataT &rhs) { /* ... */ } + + // OP is prefix ++, -- + friend marray &operatorOP(marray &rhs) { /* ... */ } + + // OP is postfix ++, -- + friend marray operatorOP(marray& lhs, int) { /* ... */ } + + // OP is unary +, - + friend marray operatorOP(marray &rhs) { /* ... */ } + + // OP is: &, |, ^ + /* Available only when: dataT != float && dataT != double && dataT != half. */ + friend marray operatorOP(const marray &lhs, const marray &rhs) { /* ... */ } + friend marray operatorOP(const marray &lhs, const dataT &rhs) { /* ... */ } + + // OP is: &=, |=, ^= + /* Available only when: dataT != float && dataT != double && dataT != half. */ + friend marray &operatorOP(marray &lhs, const marray &rhs) { /* ... */ } + friend marray &operatorOP(marray &lhs, const dataT &rhs) { /* ... */ } + + // OP is: &&, || + friend marray operatorOP(const marray &lhs, const marray &rhs) { + /* ... */ } + friend marray operatorOP(const marray& lhs, const dataT &rhs) { + /* ... */ } + + // OP is: <<, >> + /* Available only when: dataT != float && dataT != double && dataT != half. */ + friend marray operatorOP(const marray &lhs, const marray &rhs) { /* ... */ } + friend marray operatorOP(const marray &lhs, const dataT &rhs) { /* ... */ } + + // OP is: <<=, >>= + /* Available only when: dataT != float && dataT != double && dataT != half. */ + friend marray &operatorOP(marray &lhs, const marray &rhs) { /* ... */ } + friend marray &operatorOP(marray &lhs, const dataT &rhs) { /* ... */ } + + // OP is: ==, !=, <, >, <=, >= + friend marray operatorOP(const marray &lhs, const marray &rhs) { + /* ... */ } + friend marray operatorOP(const marray &lhs, const dataT &rhs) { + /* ... */ } + + /* Available only when: dataT != float && dataT != double && dataT != half. */ + friend marray operator~(const marray &v) { /* ... */ } + + // OP is: +, -, *, /, % + /* operator% is only available when: dataT != float && dataT != double && dataT != half. */ + friend marray operatorOP(const dataT &lhs, const marray &rhs) { /* ... */ } + + // OP is: &, |, ^ + /* Available only when: dataT != float && dataT != double + && dataT != half. */ + friend marray operatorOP(const dataT &lhs, const marray &rhs) { /* ... */ } + + // OP is: &&, || + friend marray operatorOP(const dataT &lhs, const marray &rhs) { + /* ... */ } + + // OP is: <<, >> + /* Available only when: dataT != float && dataT != double && dataT != half. */ + friend marray operatorOP(const dataT &lhs, const marray &rhs) { /* ... */ } + + // OP is: ==, !=, <, >, <=, >= + friend marray operatorOP(const dataT &lhs, const marray &rhs) { + /* ... */ } + + friend marray operator!(const marray &v) { /* ... */ } + +}; + +} // namespace sycl diff --git a/adoc/headers/memoryOrder.h b/adoc/headers/memoryOrder.h new file mode 100644 index 00000000..f6be4fd1 --- /dev/null +++ b/adoc/headers/memoryOrder.h @@ -0,0 +1,15 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +namespace sycl { + +enum class memory_order : /* unspecified */ { + relaxed, acquire, release, acq_rel, seq_cst +}; +inline constexpr auto memory_order_relaxed = memory_order::relaxed; +inline constexpr auto memory_order_acquire = memory_order::acquire; +inline constexpr auto memory_order_release = memory_order::release; +inline constexpr auto memory_order_acq_rel = memory_order::acq_rel; +inline constexpr auto memory_order_seq_cst = memory_order::seq_cst; + +} // namespace sycl diff --git a/adoc/headers/memoryScope.h b/adoc/headers/memoryScope.h new file mode 100644 index 00000000..e9e476b7 --- /dev/null +++ b/adoc/headers/memoryScope.h @@ -0,0 +1,15 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +namespace sycl { + +enum class memory_scope : /* unspecified */ { + work_item, sub_group, work_group, device, system +}; +inline constexpr auto memory_scope_work_item = memory_scope::work_item; +inline constexpr auto memory_scope_sub_group = memory_scope::sub_group; +inline constexpr auto memory_scope_work_group = memory_scope::work_group; +inline constexpr auto memory_scope_device = memory_scope::device; +inline constexpr auto memory_scope_system = memory_scope::system; + +} // namespace sycl diff --git a/adoc/headers/multipointer.h b/adoc/headers/multipointer.h new file mode 100644 index 00000000..ad306a0a --- /dev/null +++ b/adoc/headers/multipointer.h @@ -0,0 +1,288 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { +namespace access { +enum class address_space : int { + global_space, + local_space, + constant_space, // Deprecated in SYCL 2020 + private_space, + generic_space, +}; + +enum class decorated : int { + no, + yes, + legacy, +}; + +} // namespace access + +template struct remove_decoration { + using type = /* ... */; +}; + +template +using remove_decoration_t = remove_decoration::type; + +template +class multi_ptr { + public: + static constexpr bool is_decorated = DecorateAddress == access::decorated::yes; + static constexpr access::address_space address_space = Space; + + using value_type = ElementType; + using pointer = std::conditional>; + using reference = std::conditional>; + using iterator_category = std::random_access_iterator_tag; + using difference_type = std::ptrdiff_t; + + static_assert(std::is_same_v, std::add_pointer_t>); + static_assert(std::is_same_v, std::add_lvalue_reference_t>); + // Legacy has a different interface. + static_assert(DecorateAddress != access::decorated::legacy); + + // Constructors + multi_ptr(); + multi_ptr(const multi_ptr&); + multi_ptr(multi_ptr&&); + explicit multi_ptr(multi_ptr::pointer); + multi_ptr(std::nullptr_t); + + // Only if Space == global_space or generic_space + template + multi_ptr(accessor); + + // Only if Space == local_space or generic_space + template + multi_ptr(local_accessor) + + // Deprecated + // Only if Space == local_space or generic_space + template + multi_ptr(accessor); + + // Assignment and access operators + multi_ptr &operator=(const multi_ptr&); + multi_ptr &operator=(multi_ptr&&); + multi_ptr &operator=(std::nullptr_t); + + // Only if Space == address_space::generic_space + // and ASP != access::address_space::constant_space + template + multi_ptr &operator=(const multi_ptr&); + // Only if Space == address_space::generic_space + // and ASP != access::address_space::constant_space + template + multi_ptr &operator=(multi_ptr&&); + + reference operator*() const; + pointer operator->() const; + + pointer get() const; + std::add_pointer_t get_raw() const; + __unspecified__ * get_decorated() const; + + // Conversion to the underlying pointer type + // Deprecated, get() should be used instead. + operator pointer() const; + + // Only if Space == address_space::generic_space + // Cast to private_ptr + explicit operator multi_ptr(); + // Only if Space == address_space::generic_space + // Cast to private_ptr + explicit + operator multi_ptr() const; + // Only if Space == address_space::generic_space + // Cast to global_ptr + explicit operator multi_ptr(); + // Only if Space == address_space::generic_space + // Cast to global_ptr + explicit + operator multi_ptr() const; + // Only if Space == address_space::generic_space + // Cast to local_ptr + explicit operator multi_ptr(); + // Only if Space == address_space::generic_space + // Cast to local_ptr + explicit + operator multi_ptr() const; + + // Implicit conversion to a multi_ptr. + // Only available when value_type is not const-qualified. + template + operator multi_ptr() const; + + // Implicit conversion to a multi_ptr. + // Only available when value_type is const-qualified. + template + operator multi_ptr() const; + + // Implicit conversion to multi_ptr. + template + operator multi_ptr() const; + + // Implicit conversion to the non-decorated version of multi_ptr. + // Only available when is_decorated is true. + operator multi_ptr() const; + + // Implicit conversion to the decorated version of multi_ptr. + // Only available when is_decorated is false. + operator multi_ptr() const; + + void prefetch(size_t numElements) const; + + // Arithmetic operators + friend multi_ptr& operator++(multi_ptr& mp) { /* ... */ } + friend multi_ptr operator++(multi_ptr& mp, int) { /* ... */ } + friend multi_ptr& operator--(multi_ptr& mp) { /* ... */ } + friend multi_ptr operator--(multi_ptr& mp, int) { /* ... */ } + friend multi_ptr& operator+=(multi_ptr& lhs, difference_type r) { /* ... */ } + friend multi_ptr& operator-=(multi_ptr& lhs, difference_type r) { /* ... */ } + friend multi_ptr operator+(const multi_ptr& lhs, difference_type r) { /* ... */ } + friend multi_ptr operator-(const multi_ptr& lhs, difference_type r) { /* ... */ } + friend reference operator*(const multi_ptr& lhs) { /* ... */ } + + friend bool operator==(const multi_ptr& lhs, const multi_ptr& rhs) { /* ... */ } + friend bool operator!=(const multi_ptr& lhs, const multi_ptr& rhs) { /* ... */ } + friend bool operator<(const multi_ptr& lhs, const multi_ptr& rhs) { /* ... */ } + friend bool operator>(const multi_ptr& lhs, const multi_ptr& rhs) { /* ... */ } + friend bool operator<=(const multi_ptr& lhs, const multi_ptr& rhs) { /* ... */ } + friend bool operator>=(const multi_ptr& lhs, const multi_ptr& rhs) { /* ... */ } + + friend bool operator==(const multi_ptr& lhs, std::nullptr_t) { /* ... */ } + friend bool operator!=(const multi_ptr& lhs, std::nullptr_t) { /* ... */ } + friend bool operator<(const multi_ptr& lhs, std::nullptr_t) { /* ... */ } + friend bool operator>(const multi_ptr& lhs, std::nullptr_t) { /* ... */ } + friend bool operator<=(const multi_ptr& lhs, std::nullptr_t) { /* ... */ } + friend bool operator>=(const multi_ptr& lhs, std::nullptr_t) { /* ... */ } + + friend bool operator==(std::nullptr_t, const multi_ptr& rhs) { /* ... */ } + friend bool operator!=(std::nullptr_t, const multi_ptr& rhs) { /* ... */ } + friend bool operator<(std::nullptr_t, const multi_ptr& rhs) { /* ... */ } + friend bool operator>(std::nullptr_t, const multi_ptr& rhs) { /* ... */ } + friend bool operator<=(std::nullptr_t, const multi_ptr& rhs) { /* ... */ } + friend bool operator>=(std::nullptr_t, const multi_ptr& rhs) { /* ... */ } + +}; + +// Specialization of multi_ptr for void and const void +// VoidType can be either void or const void +template +class multi_ptr { + public: + static constexpr bool is_decorated = DecorateAddress == access::decorated::yes; + static constexpr access::address_space address_space = Space; + + using value_type = VoidType; + using pointer = std::conditional>; + using difference_type = std::ptrdiff_t; + + static_assert(std::is_same_v, std::add_pointer_t>); + // Legacy has a different interface. + static_assert(DecorateAddress != access::decorated::legacy); + + // Constructors + multi_ptr(); + multi_ptr(const multi_ptr&); + multi_ptr(multi_ptr&&); + explicit multi_ptr(multi_ptr::pointer); + multi_ptr(std::nullptr_t); + + // Only if Space == global_space + template + multi_ptr(accessor); + + // Only if Space == local_space + template + multi_ptr(local_accessor); + + // Deprecated + // Only if Space == local_space + template + multi_ptr(accessor); + + // Assignment operators + multi_ptr &operator=(const multi_ptr&); + multi_ptr &operator=(multi_ptr&&); + multi_ptr &operator=(std::nullptr_t); + + pointer get() const; + + // Conversion to the underlying pointer type + explicit operator pointer() const; + + // Explicit conversion to a multi_ptr + // If VoidType is const, ElementType must be as well + template + explicit operator multi_ptr() const; + + // Implicit conversion to the non-decorated version of multi_ptr. + // Only available when is_decorated is true. + operator multi_ptr() const; + + // Implicit conversion to the decorated version of multi_ptr. + // Only available when is_decorated is false. + operator multi_ptr() const; + + // Implicit conversion to multi_ptr + operator multi_ptr() const; + + friend bool operator==(const multi_ptr& lhs, const multi_ptr& rhs) { /* ... */ } + friend bool operator!=(const multi_ptr& lhs, const multi_ptr& rhs) { /* ... */ } + friend bool operator<(const multi_ptr& lhs, const multi_ptr& rhs) { /* ... */ } + friend bool operator>(const multi_ptr& lhs, const multi_ptr& rhs) { /* ... */ } + friend bool operator<=(const multi_ptr& lhs, const multi_ptr& rhs) { /* ... */ } + friend bool operator>=(const multi_ptr& lhs, const multi_ptr& rhs) { /* ... */ } + + friend bool operator==(const multi_ptr& lhs, std::nullptr_t) { /* ... */ } + friend bool operator!=(const multi_ptr& lhs, std::nullptr_t) { /* ... */ } + friend bool operator<(const multi_ptr& lhs, std::nullptr_t) { /* ... */ } + friend bool operator>(const multi_ptr& lhs, std::nullptr_t) { /* ... */ } + friend bool operator<=(const multi_ptr& lhs, std::nullptr_t) { /* ... */ } + friend bool operator>=(const multi_ptr& lhs, std::nullptr_t) { /* ... */ } + + friend bool operator==(std::nullptr_t, const multi_ptr& rhs) { /* ... */ } + friend bool operator!=(std::nullptr_t, const multi_ptr& rhs) { /* ... */ } + friend bool operator<(std::nullptr_t, const multi_ptr& rhs) { /* ... */ } + friend bool operator>(std::nullptr_t, const multi_ptr& rhs) { /* ... */ } + friend bool operator<=(std::nullptr_t, const multi_ptr& rhs) { /* ... */ } + friend bool operator>=(std::nullptr_t, const multi_ptr& rhs) { /* ... */ } + +}; + +// Deprecated, address_space_cast should be used instead. +template +multi_ptr make_ptr(ElementType *); + +template +multi_ptr address_space_cast(ElementType *); + +// Deduction guides +template +multi_ptr( + accessor) + -> multi_ptr; +template +multi_ptr(local_accessor) + -> multi_ptr; + +} // namespace sycl diff --git a/adoc/headers/multipointerlegacy.h b/adoc/headers/multipointerlegacy.h new file mode 100644 index 00000000..3787ce75 --- /dev/null +++ b/adoc/headers/multipointerlegacy.h @@ -0,0 +1,187 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { + +// Legacy interface, inherited from 1.2.1. +// Deprecated. +template +class [[deprecated]] multi_ptr { + public: + using element_type = ElementType; + using difference_type = std::ptrdiff_t; + + // Implementation defined pointer and reference types that correspond to + // SYCL/OpenCL interoperability types for OpenCL C functions. + using pointer_t = multi_ptr::pointer; + using const_pointer_t = multi_ptr::pointer; + using reference_t = multi_ptr::reference; + using const_reference_t = multi_ptr::reference; + + static constexpr access::address_space address_space = Space; + + // Constructors + multi_ptr(); + multi_ptr(const multi_ptr&); + multi_ptr(multi_ptr&&); + multi_ptr(pointer_t); + multi_ptr(ElementType*); + multi_ptr(std::nullptr_t); + ~multi_ptr(); + + // Assignment and access operators + multi_ptr &operator=(const multi_ptr&); + multi_ptr &operator=(multi_ptr&&); + multi_ptr &operator=(pointer_t); + multi_ptr &operator=(ElementType*); + multi_ptr &operator=(std::nullptr_t); + friend ElementType& operator*(const multi_ptr& mp) { /* ... */ } + ElementType* operator->() const; + + // Only if Space == global_space + template + multi_ptr(accessor); + + // Only if Space == local_space + template + multi_ptr(accessor); + + // Only if Space == constant_space + template + multi_ptr(accessor); + + // Returns the underlying OpenCL C pointer + pointer_t get() const; + + // Implicit conversion to the underlying pointer type + operator ElementType*() const; + + // Implicit conversion to a multi_ptr + // Only available when ElementType is not const-qualified + operator multi_ptr() const; + + // Implicit conversion to a multi_ptr + // Only available when ElementType is const-qualified + operator multi_ptr() const; + + // Implicit conversion to multi_ptr + operator multi_ptr() const; + + // Arithmetic operators + friend multi_ptr& operator++(multi_ptr& mp) { /* ... */ } + friend multi_ptr operator++(multi_ptr& mp, int) { /* ... */ } + friend multi_ptr& operator--(multi_ptr& mp) { /* ... */ } + friend multi_ptr operator--(multi_ptr& mp, int) { /* ... */ } + friend multi_ptr& operator+=(multi_ptr& lhs, difference_type r) { /* ... */ } + friend multi_ptr& operator-=(multi_ptr& lhs, difference_type r) { /* ... */ } + friend multi_ptr operator+(const multi_ptr& lhs, difference_type r) { /* ... */ } + friend multi_ptr operator-(const multi_ptr& lhs, difference_type r) { /* ... */ } + + void prefetch(size_t numElements) const; + + friend bool operator==(const multi_ptr& lhs, const multi_ptr& rhs) { /* ... */ } + friend bool operator!=(const multi_ptr& lhs, const multi_ptr& rhs) { /* ... */ } + friend bool operator<(const multi_ptr& lhs, const multi_ptr& rhs) { /* ... */ } + friend bool operator>(const multi_ptr& lhs, const multi_ptr& rhs) { /* ... */ } + friend bool operator<=(const multi_ptr& lhs, const multi_ptr& rhs) { /* ... */ } + friend bool operator>=(const multi_ptr& lhs, const multi_ptr& rhs) { /* ... */ } + + friend bool operator==(const multi_ptr& lhs, std::nullptr_t) { /* ... */ } + friend bool operator!=(const multi_ptr& lhs, std::nullptr_t) { /* ... */ } + friend bool operator<(const multi_ptr& lhs, std::nullptr_t) { /* ... */ } + friend bool operator>(const multi_ptr& lhs, std::nullptr_t) { /* ... */ } + friend bool operator<=(const multi_ptr& lhs, std::nullptr_t) { /* ... */ } + friend bool operator>=(const multi_ptr& lhs, std::nullptr_t) { /* ... */ } + + friend bool operator==(std::nullptr_t, const multi_ptr& rhs) { /* ... */ } + friend bool operator!=(std::nullptr_t, const multi_ptr& rhs) { /* ... */ } + friend bool operator<(std::nullptr_t, const multi_ptr& rhs) { /* ... */ } + friend bool operator>(std::nullptr_t, const multi_ptr& rhs) { /* ... */ } + friend bool operator<=(std::nullptr_t, const multi_ptr& rhs) { /* ... */ } + friend bool operator>=(std::nullptr_t, const multi_ptr& rhs) { /* ... */ } + +}; + +// Legacy interface, inherited from 1.2.1. +// Deprecated. +// Specialization of multi_ptr for void and const void +// VoidType can be either void or const void +template +class [[deprecated]] multi_ptr { + public: + using element_type = VoidType; + using difference_type = std::ptrdiff_t; + + // Implementation defined pointer types that correspond to + // SYCL/OpenCL interoperability types for OpenCL C functions + using pointer_t = multi_ptr::pointer; + using const_pointer_t = multi_ptr::pointer; + + static constexpr access::address_space address_space = Space; + + // Constructors + multi_ptr(); + multi_ptr(const multi_ptr&); + multi_ptr(multi_ptr&&); + multi_ptr(pointer_t); + multi_ptr(VoidType*); + multi_ptr(std::nullptr_t); + ~multi_ptr(); + + // Assignment operators + multi_ptr &operator=(const multi_ptr&); + multi_ptr &operator=(multi_ptr&&); + multi_ptr &operator=(pointer_t); + multi_ptr &operator=(VoidType*); + multi_ptr &operator=(std::nullptr_t); + + // Only if Space == global_space + template + multi_ptr(accessor); + + // Only if Space == local_space + template + multi_ptr(accessor); + + // Only if Space == constant_space + template + multi_ptr(accessor); + + // Returns the underlying OpenCL C pointer + pointer_t get() const; + + // Implicit conversion to the underlying pointer type + operator VoidType*() const; + + // Explicit conversion to a multi_ptr + // If VoidType is const, ElementType must be as well + template + explicit operator multi_ptr() const; + + // Implicit conversion to multi_ptr + operator multi_ptr() const; + + friend bool operator==(const multi_ptr& lhs, const multi_ptr& rhs) { /* ... */ } + friend bool operator!=(const multi_ptr& lhs, const multi_ptr& rhs) { /* ... */ } + friend bool operator<(const multi_ptr& lhs, const multi_ptr& rhs) { /* ... */ } + friend bool operator>(const multi_ptr& lhs, const multi_ptr& rhs) { /* ... */ } + friend bool operator<=(const multi_ptr& lhs, const multi_ptr& rhs) { /* ... */ } + friend bool operator>=(const multi_ptr& lhs, const multi_ptr& rhs) { /* ... */ } + + friend bool operator==(const multi_ptr& lhs, std::nullptr_t) { /* ... */ } + friend bool operator!=(const multi_ptr& lhs, std::nullptr_t) { /* ... */ } + friend bool operator<(const multi_ptr& lhs, std::nullptr_t) { /* ... */ } + friend bool operator>(const multi_ptr& lhs, std::nullptr_t) { /* ... */ } + friend bool operator<=(const multi_ptr& lhs, std::nullptr_t) { /* ... */ } + friend bool operator>=(const multi_ptr& lhs, std::nullptr_t) { /* ... */ } + + friend bool operator==(std::nullptr_t, const multi_ptr& rhs) { /* ... */ } + friend bool operator!=(std::nullptr_t, const multi_ptr& rhs) { /* ... */ } + friend bool operator<(std::nullptr_t, const multi_ptr& rhs) { /* ... */ } + friend bool operator>(std::nullptr_t, const multi_ptr& rhs) { /* ... */ } + friend bool operator<=(std::nullptr_t, const multi_ptr& rhs) { /* ... */ } + friend bool operator>=(std::nullptr_t, const multi_ptr& rhs) { /* ... */ } + +}; + +} // namespace sycl diff --git a/adoc/headers/ndRange.h b/adoc/headers/ndRange.h new file mode 100644 index 00000000..57efb8c0 --- /dev/null +++ b/adoc/headers/ndRange.h @@ -0,0 +1,20 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { +template +class nd_range { +public: + + /* -- common interface members -- */ + + // The offset is deprecated in SYCL 2020. + nd_range(range globalSize, range localSize, + id offset = id()); + + range get_global_range() const; + range get_local_range() const; + range get_group_range() const; + id get_offset() const; // Deprecated in SYCL 2020. +}; +} // namespace sycl diff --git a/adoc/headers/nditem.h b/adoc/headers/nditem.h new file mode 100644 index 00000000..afb64785 --- /dev/null +++ b/adoc/headers/nditem.h @@ -0,0 +1,66 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { +template +class nd_item { +public: + nd_item() = delete; + + /* -- common interface members -- */ + + id get_global_id() const; + + size_t get_global_id(int dimension) const; + + size_t get_global_linear_id() const; + + id get_local_id() const; + + size_t get_local_id(int dimension) const; + + size_t get_local_linear_id() const; + + group get_group() const; + + size_t get_group(int dimension) const; + + size_t get_group_linear_id() const; + + range get_group_range() const; + + size_t get_group_range(int dimension) const; + + range get_global_range() const; + + size_t get_global_range(int dimension) const; + + range get_local_range() const; + + size_t get_local_range(int dimension) const; + + // Deprecated in SYCL 2020. + id get_offset() const; + + nd_range get_nd_range() const; + + template + device_event async_work_group_copy(decorated_local_ptr dest, + decorated_global_ptr src, size_t numElements) const; + + template + device_event async_work_group_copy(decorated_global_ptr dest, + decorated_local_ptr src, size_t numElements) const; + + template + device_event async_work_group_copy(decorated_local_ptr dest, + decorated_global_ptr src, size_t numElements, size_t srcStride) const; + + template + device_event async_work_group_copy(decorated_global_ptr dest, + decorated_local_ptr src, size_t numElements, size_t destStride) const; + + template + void wait_for(eventTN... events) const; +}; +} // namespace sycl diff --git a/adoc/headers/openclBackend/createBundle.h b/adoc/headers/openclBackend/createBundle.h new file mode 100644 index 00000000..59f5c738 --- /dev/null +++ b/adoc/headers/openclBackend/createBundle.h @@ -0,0 +1,15 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +namespace sycl::opencl { + +template +kernel_bundle create_bundle(const context &ctxt, + const std::vector &devs, + const std::vector &clPrograms); + +kernel_bundle +create_bundle(const context &ctxt, const std::vector &devs, + const std::vector &clKernels); + +} // namespace sycl::opencl diff --git a/adoc/headers/openclBackend/samplerImagePair.h b/adoc/headers/openclBackend/samplerImagePair.h new file mode 100644 index 00000000..354bcbc4 --- /dev/null +++ b/adoc/headers/openclBackend/samplerImagePair.h @@ -0,0 +1,17 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +struct sampler_1dimage_pair_t { + sampler_t sampler; + image1d_t image; +} + +struct sampler_2dimage_pair_t { + sampler_t sampler; + image2d_t image; +} + +struct sampler_3dimage_pair_t { + sampler_t sampler; + image3d_t image; +} diff --git a/adoc/headers/openclcInterop.h b/adoc/headers/openclcInterop.h new file mode 100644 index 00000000..3fc05df0 --- /dev/null +++ b/adoc/headers/openclcInterop.h @@ -0,0 +1,5 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +extern "C" typename sycl::decorated_global_ptr::pointer my_func( + sycl::float4::vector_t x, double y); diff --git a/adoc/headers/parallelFor.h b/adoc/headers/parallelFor.h new file mode 100644 index 00000000..87df3320 --- /dev/null +++ b/adoc/headers/parallelFor.h @@ -0,0 +1,61 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +void single_task(kernel *syclKernel); + +void parallel_for(nd_range ndRange, kernel *k); + +void parallel_for(range range kernel *syclKernel); + + +template +void single_task(KernelType); + +template +void parallel_for(range num_work_items, KernelType); + +// Deprecated in SYCL 2020. +template +void parallel_for(range numWorkItems, + id workItemOffset, KernelType); + +template +void parallel_for(nd_range ndRange, KernelType); + +template +void parallel_for_work_group(range numWorkGroups, + WorkgroupFunctionType); + +template +void parallel_for_work_group(range numWorkGroups, + range workGroupSize, + WorkgroupFunctionType); + +template +void single_task(KernelType); + +template +void parallel_for(range numWorkItems, KernelType); + +// Deprecated in SYCL 2020. +template +void parallel_for(range numWorkItems, + id workItemOffset, KernelType); + +template +void parallel_for(nd_range ndRange, KernelType); + +// Deprecated in SYCL 2020. +template +void parallel_for(nd_range numWorkItems, + id workItemOffset, KernelType); + + +template +void parallel_for_work_group(range numWorkGroups, + WorkgroupFunctionType); + +template +void parallel_for_work_group(range numWorkGroups, + range workGroupSize, + WorkgroupFunctionType); diff --git a/adoc/headers/platform.h b/adoc/headers/platform.h new file mode 100644 index 00000000..c9a073dd --- /dev/null +++ b/adoc/headers/platform.h @@ -0,0 +1,30 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { +class platform { + public: + platform(); + + template + explicit platform(const DeviceSelector &deviceSelector); + + /* -- common interface members -- */ + + backend get_backend() const noexcept; + + std::vector get_devices( + info::device_type = info::device_type::all) const; + + template typename param::return_type get_info() const; + + template + typename param::return_type get_backend_info() const; + + bool has(aspect asp) const; + + bool has_extension(const std::string &extension) const; // Deprecated + + static std::vector get_platforms(); +}; +} // namespace sycl diff --git a/adoc/headers/platformInfo.h b/adoc/headers/platformInfo.h new file mode 100644 index 00000000..f377c79b --- /dev/null +++ b/adoc/headers/platformInfo.h @@ -0,0 +1,16 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { +namespace info { +namespace platform { + +struct profile; +struct version; +struct name; +struct vendor; +struct extensions; // Deprecated + +} // namespace platform +} // namespace info +} // namespace sycl diff --git a/adoc/headers/pointer.h b/adoc/headers/pointer.h new file mode 100644 index 00000000..9af44eb5 --- /dev/null +++ b/adoc/headers/pointer.h @@ -0,0 +1,59 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { + +template +class multi_ptr; + +// Template specialization aliases for different pointer address spaces + +template +using global_ptr = multi_ptr; + +template +using local_ptr = multi_ptr; + +// Deprecated in SYCL 2020 +template +using constant_ptr = multi_ptr; + +template +using private_ptr = multi_ptr; + +// Template specialization aliases for different pointer address spaces. +// The interface exposes non-decorated pointer while keeping the +// address space information internally. + +template +using raw_global_ptr = multi_ptr; + +template +using raw_local_ptr = multi_ptr; + +template +using raw_private_ptr = multi_ptr; + +// Template specialization aliases for different pointer address spaces. +// The interface exposes decorated pointer. + +template +using decorated_global_ptr = multi_ptr; + +template +using decorated_local_ptr = multi_ptr; + +template +using decorated_private_ptr = multi_ptr; + +} // namespace sycl diff --git a/adoc/headers/priv.h b/adoc/headers/priv.h new file mode 100644 index 00000000..a639b72a --- /dev/null +++ b/adoc/headers/priv.h @@ -0,0 +1,14 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { +template +class private_memory { + public: + // Construct based directly off the number of work-items + private_memory(const group &); + + // Access the instance for the current work-item + T &operator()(const h_item &id); +}; +} diff --git a/adoc/headers/properties.h b/adoc/headers/properties.h new file mode 100644 index 00000000..38be1809 --- /dev/null +++ b/adoc/headers/properties.h @@ -0,0 +1,35 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { + +template +struct is_property; + +template +inline constexpr bool is_property_v = is_property::value; + +template +struct is_property_of; + +template +inline constexpr bool is_property_of_v = is_property_of::value; + +class T { + ... + + template + bool has_property() const noexcept; + + template + propertyT get_property() const; + + ... +}; + +class property_list { + public: + template + property_list(propertyTN... props); +}; +} // namespace sycl diff --git a/adoc/headers/queue.h b/adoc/headers/queue.h new file mode 100644 index 00000000..90334c0e --- /dev/null +++ b/adoc/headers/queue.h @@ -0,0 +1,206 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { +class queue { + public: + explicit queue(const property_list &propList = {}); + + explicit queue(const async_handler &asyncHandler, + const property_list &propList = {}); + + template + explicit queue(const DeviceSelector &deviceSelector, + const property_list &propList = {}); + + template + explicit queue(const DeviceSelector &deviceSelector, + const async_handler &asyncHandler, + const property_list &propList = {}); + + explicit queue(const device &syclDevice, const property_list &propList = {}); + + explicit queue(const device &syclDevice, const async_handler &asyncHandler, + const property_list &propList = {}); + + template + explicit queue(const context &syclContext, + const DeviceSelector &deviceSelector, + const property_list &propList = {}); + + template + explicit queue(const context &syclContext, + const DeviceSelector &deviceSelector, + const async_handler &asyncHandler, + const property_list &propList = {}); + + explicit queue(const context &syclContext, const device &syclDevice, + const property_list &propList = {}); + + explicit queue(const context &syclContext, const device &syclDevice, + const async_handler &asyncHandler, + const property_list &propList = {}); + + /* -- common interface members -- */ + + /* -- property interface members -- */ + + backend get_backend() const noexcept; + + context get_context() const; + + device get_device() const; + + bool is_in_order() const; + + template typename param::return_type get_info() const; + + template + typename param::return_type get_backend_info() const; + + template + event submit(T cgf); + + template + event submit(T cgf, const queue &secondaryQueue); + + void wait(); + + void wait_and_throw(); + + void throw_asynchronous(); + + /* -- convenience shortcuts -- */ + + template + event single_task(const KernelType &kernelFunc); + + template + event single_task(event depEvent, const KernelType &kernelFunc); + + template + event single_task(const std::vector &depEvents, + const KernelType &kernelFunc); + + // Parameter pack acts as-if: Reductions&&... reductions, const KernelType &kernelFunc + template + event parallel_for(range numWorkItems, + Rest&&... rest); + + // Parameter pack acts as-if: Reductions&&... reductions, const KernelType &kernelFunc + template + event parallel_for(range numWorkItems, event depEvent, + Rest&&... rest); + + // Parameter pack acts as-if: Reductions&&... reductions, const KernelType &kernelFunc + template + event parallel_for(range numWorkItems, + const std::vector &depEvents, + Rest&&... rest); + + // Parameter pack acts as-if: Reductions&&... reductions, const KernelType &kernelFunc + template + event parallel_for(nd_range executionRange, + Rest&&... rest); + + // Parameter pack acts as-if: Reductions&&... reductions, const KernelType &kernelFunc + template + event parallel_for(nd_range executionRange, + event depEvent, + Rest&&... rest); + + // Parameter pack acts as-if: Reductions&&... reductions, const KernelType &kernelFunc + template + event parallel_for(nd_range executionRange, + const std::vector &depEvents, + Rest&&... rest); + + /* -- USM functions -- */ + + event memcpy(void* dest, const void* src, size_t numBytes); + event memcpy(void* dest, const void* src, size_t numBytes, + event depEvent); + event memcpy(void* dest, const void* src, size_t numBytes, + const std::vector &depEvents); + + template + event copy(T* dest, const T *src, size_t count); + template + event copy(T* dest, const T *src, size_t count, + event depEvent); + template + event copy(T* dest, const T *src, size_t count, + const std::vector &depEvents); + + event memset(void* ptr, int value, size_t numBytes); + event memset(void* ptr, int value, size_t numBytes, + event depEvent); + event memset(void* ptr, int value, size_t numBytes, + const std::vector &depEvents); + + template + event fill(void* ptr, const T& pattern, size_t count); + template + event fill(void* ptr, const T& pattern, size_t count, + event depEvent); + template + event fill(void* ptr, const T& pattern, size_t count, + const std::vector &depEvents); + + event prefetch(void* ptr, size_t numBytes); + event prefetch(void* ptr, size_t numBytes, + event depEvent); + event prefetch(void* ptr, size_t numBytes, + const std::vector &depEvents); + + event mem_advise(void *ptr, size_t numBytes, int advice); + event mem_advise(void *ptr, size_t numBytes, int advice, + event depEvent); + event mem_advise(void *ptr, size_t numBytes, int advice, + const std::vector &depEvents); + + /// Placeholder accessor shortcuts + + // Explicit copy functions + + template + event copy(accessor src, + std::shared_ptr dest); + + template + event + copy(std::shared_ptr src, + accessor dest); + + template + event copy(accessor src, + T_dest *dest); + + template + event + copy(const T_src *src, + accessor dest); + + template + event copy( + accessor src, + accessor dest); + + template + event update_host(accessor acc); + + template + event fill(accessor dest, const T &src); +}; +} // namespace sycl diff --git a/adoc/headers/queueInfo.h b/adoc/headers/queueInfo.h new file mode 100644 index 00000000..e893ca10 --- /dev/null +++ b/adoc/headers/queueInfo.h @@ -0,0 +1,13 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { +namespace info { +namespace queue { + +struct context; +struct device; + +} // namespace queue +} // namespace info +} // namespace sycl diff --git a/adoc/headers/range.h b/adoc/headers/range.h new file mode 100644 index 00000000..8c814e9f --- /dev/null +++ b/adoc/headers/range.h @@ -0,0 +1,50 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { +template +class range { +public: + /* The following constructor is only available in the range class specialization where: dimensions==1 */ + range(size_t dim0); + /* The following constructor is only available in the range class specialization where: dimensions==2 */ + range(size_t dim0, size_t dim1); + /* The following constructor is only available in the range class specialization where: dimensions==3 */ + range(size_t dim0, size_t dim1, size_t dim2); + + /* -- common interface members -- */ + + size_t get(int dimension) const; + size_t &operator[](int dimension); + size_t operator[](int dimension) const; + + size_t size() const; + + // OP is: +, -, *, /, %, <<, >>, &, |, ^, &&, ||, <, >, <=, >= + friend range operatorOP(const range &lhs, const range &rhs) { /* ... */ } + friend range operatorOP(const range &lhs, const size_t &rhs) { /* ... */ } + + // OP is: +=, -=, *=, /=, %=, <<=, >>=, &=, |=, ^= + friend range & operatorOP(range &lhs, const range &rhs) { /* ... */ } + friend range & operatorOP(range &lhs, const size_t &rhs) { /* ... */ } + + // OP is: +, -, *, /, %, <<, >>, &, |, ^, &&, ||, <, >, <=, >= + friend range operatorOP(const size_t &lhs, const range &rhs) { /* ... */ } + + // OP is unary +, - + friend range operatorOP(const range &rhs) { /* ... */ } + + // OP is prefix ++, -- + friend range & operatorOP(range &rhs) { /* ... */ } + + // OP is postfix ++, -- + friend range operatorOP(range &lhs, int) { /* ... */ } + +}; + +// Deduction guides +range(size_t) -> range<1>; +range(size_t, size_t) -> range<2>; +range(size_t, size_t, size_t) -> range<3>; + +} // sycl diff --git a/adoc/headers/reducer.h b/adoc/headers/reducer.h new file mode 100644 index 00000000..c0198f77 --- /dev/null +++ b/adoc/headers/reducer.h @@ -0,0 +1,42 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +// Exposition only +template +class reducer { + + reducer(const reducer&) = delete; + reducer& operator(const reducer&) = delete; + + /* Only available if Dimensions == 0 */ + void combine(const T& partial); + + /* Only available if Dimensions > 0 */ + __unspecified__ &operator[](size_t index) const; + + /* Only available if identity value is known */ + T identity() const; + +}; + +template +void operator+=(reducer,0>&, const T&); + +template +void operator*=(reducer,0>&, const T&); + +/* Only available for integral types */ +template +void operator&=(reducer,0>&, const T&); + +/* Only available for integral types */ +template +void operator|=(reducer,0>&, const T&); + +/* Only available for integral types */ +template +void operator^=(reducer,0>&, const T&); + +/* Only available for integral types */ +template +void operator++(reducer,0>&); diff --git a/adoc/headers/reduction.h b/adoc/headers/reduction.h new file mode 100644 index 00000000..c9af6763 --- /dev/null +++ b/adoc/headers/reduction.h @@ -0,0 +1,23 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: MIT + +template +__unspecified__ reduction(BufferT vars, handler& cgh, BinaryOperation combiner, const property_list &propList = {}); + +template +__unspecified__ reduction(T* var, BinaryOperation combiner, const property_list &propList = {}); + +template +__unspecified__ reduction(span vars, BinaryOperation combiner, const property_list &propList = {}); + +/* Available only if has_known_identity::value is false */ +template +__unspecified__ reduction(BufferT vars, handler& cgh, const BufferT::value_type& identity, BinaryOperation combiner, const property_list &propList = {}); + +/* Available only if has_known_identity::value is false */ +template +__unspecified__ reduction(T* var, const T& identity, BinaryOperation combiner, const property_list &propList = {}); + +/* Available only if has_known_identity::value is false */ +template +__unspecified__ reduction(span vars, const T& identity, BinaryOperation combiner); diff --git a/adoc/headers/sampledImage.h b/adoc/headers/sampledImage.h new file mode 100644 index 00000000..77c33db9 --- /dev/null +++ b/adoc/headers/sampledImage.h @@ -0,0 +1,61 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { +enum class image_format : unsigned int { + r8g8b8a8_unorm, + r16g16b16a16_unorm, + r8g8b8a8_sint, + r16g16b16a16_sint, + r32b32g32a32_sint, + r8g8b8a8_uint, + r16g16b16a16_uint, + r32b32g32a32_uint, + r16b16g16a16_sfloat, + r32g32b32a32_sfloat, + b8g8r8a8_unorm, +}; + +template +class sampled_image { + public: + sampled_image(const void *hostPointer, image_format format, + image_sampler sampler, const range &rangeRef, + const property_list &propList = {}); + + /* Available only when: dimensions > 1 */ + sampled_image(const void *hostPointer, image_format format, + image_sampler sampler, const range &rangeRef, + const range &pitch, + const property_list &propList = {}); + + sampled_image(std::shared_ptr &hostPointer, image_format format, + image_sampler sampler, const range &rangeRef, + const property_list &propList = {}); + + /* Available only when: dimensions > 1 */ + sampled_image(std::shared_ptr &hostPointer, image_format format, + image_sampler sampler, const range &rangeRef, + const range &pitch, + const property_list &propList = {}); + + /* -- common interface members -- */ + + /* -- property interface members -- */ + + range get_range() const; + + /* Available only when: dimensions > 1 */ + range get_pitch() const; + + size_t byte_size() const; + + size_t size() const; + + template + auto get_access(Ts... args); + + template + auto get_host_access(Ts... args); +}; +} // namespace sycl diff --git a/adoc/headers/stream.h b/adoc/headers/stream.h new file mode 100644 index 00000000..7c62da63 --- /dev/null +++ b/adoc/headers/stream.h @@ -0,0 +1,79 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { + +enum class stream_manipulator { + flush, + dec, + hex, + oct, + noshowbase, + showbase, + noshowpos, + showpos, + endl, + fixed, + scientific, + hexfloat, + defaultfloat +}; + + +const stream_manipulator flush = stream_manipulator::flush; + +const stream_manipulator dec = stream_manipulator::dec; + +const stream_manipulator hex = stream_manipulator::hex; + +const stream_manipulator oct = stream_manipulator::oct; + +const stream_manipulator noshowbase = stream_manipulator::noshowbase; + +const stream_manipulator showbase = stream_manipulator::showbase; + +const stream_manipulator noshowpos = stream_manipulator::noshowpos; + +const stream_manipulator showpos = stream_manipulator::showpos; + +const stream_manipulator endl = stream_manipulator::endl; + +const stream_manipulator fixed = stream_manipulator::fixed; + +const stream_manipulator scientific = stream_manipulator::scientific; + +const stream_manipulator hexfloat = stream_manipulator::hexfloat; + +const stream_manipulator defaultfloat = stream_manipulator::defaultfloat; + +__precision_manipulator__ setprecision(int precision); + +__width_manipulator__ setw(int width); + +class stream { + public: + + stream(size_t totalBufferSize, size_t workItemBufferSize, handler& cgh + const property_list &propList = {}); + + /* -- common interface members -- */ + + /* -- property interface members -- */ + + size_t size() const noexcept; + + // Deprecated + size_t get_size() const; + + size_t get_work_item_buffer_size() const; + + /* get_max_statement_size() has the same functionality as get_work_item_buffer_size(), + and is provided for backward compatibility. get_max_statement_size() is a deprecated + query. */ + size_t get_max_statement_size() const; +}; + +template +const stream& operator<<(const stream& os, const T &rhs); + +} // namespace sycl diff --git a/adoc/headers/subgroup.h b/adoc/headers/subgroup.h new file mode 100644 index 00000000..2376e283 --- /dev/null +++ b/adoc/headers/subgroup.h @@ -0,0 +1,38 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { +class sub_group { +public: + + using id_type = id<1>; + using range_type = range<1>; + using linear_id_type = uint32_t; + static constexpr int dimensions = 1; + static constexpr memory_scope fence_scope = memory_scope::sub_group; + + /* -- common interface members -- */ + + id<1> get_group_id() const; + + id<1> get_local_id() const; + + range<1> get_local_range() const; + + range<1> get_group_range() const; + + range<1> get_max_local_range() const; + + uint32_t get_group_linear_id() const; + + uint32_t get_local_linear_id() const; + + uint32_t get_group_linear_range() const; + + uint32_t get_local_linear_range() const; + + bool leader() const; + +}; +} // sycl + diff --git a/adoc/headers/synchronization.h b/adoc/headers/synchronization.h new file mode 100644 index 00000000..8c96b4d3 --- /dev/null +++ b/adoc/headers/synchronization.h @@ -0,0 +1,8 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { + +void atomic_fence(memory_order order, memory_scope scope); + +} // namespace sycl diff --git a/adoc/headers/unsampledImage.h b/adoc/headers/unsampledImage.h new file mode 100644 index 00000000..5a784e19 --- /dev/null +++ b/adoc/headers/unsampledImage.h @@ -0,0 +1,104 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { +enum class image_format : unsigned int { + r8g8b8a8_unorm, + r16g16b16a16_unorm, + r8g8b8a8_sint, + r16g16b16a16_sint, + r32b32g32a32_sint, + r8g8b8a8_uint, + r16g16b16a16_uint, + r32b32g32a32_uint, + r16b16g16a16_sfloat, + r32g32b32a32_sfloat, + b8g8r8a8_unorm, +}; + +template +class unsampled_image { + public: + unsampled_image(image_format format, const range &rangeRef, + const property_list &propList = {}); + + unsampled_image(image_format format, const range &rangeRef, + AllocatorT allocator, const property_list &propList = {}); + + /* Available only when: dimensions > 1 */ + unsampled_image(image_format format, const range &rangeRef, + const range &pitch, + const property_list &propList = {}); + + /* Available only when: dimensions > 1 */ + unsampled_image(image_format format, const range &rangeRef, + const range &pitch, AllocatorT allocator, + const property_list &propList = {}); + + unsampled_image(void *hostPointer, image_format format, + const range &rangeRef, + const property_list &propList = {}); + + unsampled_image(void *hostPointer, image_format format, + const range &rangeRef, AllocatorT allocator, + const property_list &propList = {}); + + /* Available only when: dimensions > 1 */ + unsampled_image(void *hostPointer, image_format format, + const range &rangeRef, + const range &pitch, + const property_list &propList = {}); + + /* Available only when: dimensions > 1 */ + unsampled_image(void *hostPointer, image_format format, + const range &rangeRef, + const range &pitch, AllocatorT allocator, + const property_list &propList = {}); + + unsampled_image(std::shared_ptr &hostPointer, image_format format, + const range &rangeRef, + const property_list &propList = {}); + + unsampled_image(std::shared_ptr &hostPointer, image_format format, + const range &rangeRef, AllocatorT allocator, + const property_list &propList = {}); + + /* Available only when: dimensions > 1 */ + unsampled_image(std::shared_ptr &hostPointer, image_format format, + const range &rangeRef, + const range &pitch, + const property_list &propList = {}); + + /* Available only when: dimensions > 1 */ + unsampled_image(std::shared_ptr &hostPointer, image_format format, + const range &rangeRef, + const range &pitch, AllocatorT allocator, + const property_list &propList = {}); + + /* -- common interface members -- */ + + /* -- property interface members -- */ + + range get_range() const; + + /* Available only when: dimensions > 1 */ + range get_pitch() const; + + size_t byte_size() const noexcept; + + size_t size() const noexcept; + + AllocatorT get_allocator() const; + + template + auto get_access(Ts... args); + + template + auto get_host_access(Ts... args); + + template + void set_final_data(Destination finalData = std::nullptr); + + void set_write_back(bool flag = true); +}; +} // namespace sycl diff --git a/adoc/headers/vec.h b/adoc/headers/vec.h new file mode 100644 index 00000000..c76ebc19 --- /dev/null +++ b/adoc/headers/vec.h @@ -0,0 +1,222 @@ +// Copyright (c) 2011-2021 The Khronos Group, Inc. +// SPDX-License-Identifier: Apache-2.0 + +namespace sycl { + +enum class rounding_mode { + automatic, + rte, + rtz, + rtp, + rtn +}; + +struct elem { + static constexpr int x = 0; + static constexpr int y = 1; + static constexpr int z = 2; + static constexpr int w = 3; + static constexpr int r = 0; + static constexpr int g = 1; + static constexpr int b = 2; + static constexpr int a = 3; + static constexpr int s0 = 0; + static constexpr int s1 = 1; + static constexpr int s2 = 2; + static constexpr int s3 = 3; + static constexpr int s4 = 4; + static constexpr int s5 = 5; + static constexpr int s6 = 6; + static constexpr int s7 = 7; + static constexpr int s8 = 8; + static constexpr int s9 = 9; + static constexpr int sA = 10; + static constexpr int sB = 11; + static constexpr int sC = 12; + static constexpr int sD = 13; + static constexpr int sE = 14; + static constexpr int sF = 15; +}; + +template +class vec { + public: + using element_type = dataT; + +#ifdef __SYCL_DEVICE_ONLY__ + using vector_t = __unspecified__; +#endif + + vec(); + + explicit vec(const dataT &arg); + + template + vec(const argTN&... args); + + vec(const vec &rhs); + +#ifdef __SYCL_DEVICE_ONLY__ + vec(vector_t nativeVector); + + operator vector_t() const; +#endif + + // Available only when: numElements == 1 + operator dataT() const; + + static constexpr size_t byte_size() noexcept; + + static constexpr size_t size() noexcept; + + // Deprecated + size_t get_size() const; + + // Deprecated + size_t get_count() const; + + template + vec convert() const; + + template + asT as() const; + + template + __swizzled_vec__ swizzle() const; + + // Available only when numElements <= 4. + // XYZW_ACCESS is: x, y, z, w, subject to numElements. + __swizzled_vec__ XYZW_ACCESS() const; + + // Available only numElements == 4. + // RGBA_ACCESS is: r, g, b, a. + __swizzled_vec__ RGBA_ACCESS() const; + + // INDEX_ACCESS is: s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, + // sE, sF, subject to numElements. + __swizzled_vec__ INDEX_ACCESS() const; + +#ifdef SYCL_SIMPLE_SWIZZLES + // Available only when numElements <= 4. + // XYZW_SWIZZLE is all permutations with repetition of: x, y, z, w, subject to + // numElements. + __swizzled_vec__ XYZW_SWIZZLE() const; + + // Available only when numElements == 4. + // RGBA_SWIZZLE is all permutations with repetition of: r, g, b, a. + __swizzled_vec__ RGBA_SWIZZLE() const; + +#endif // #ifdef SYCL_SIMPLE_SWIZZLES + + // Available only when: numElements > 1. + __swizzled_vec__ lo() const; + __swizzled_vec__ hi() const; + __swizzled_vec__ odd() const; + __swizzled_vec__ even() const; + + // load and store member functions + template + void load(size_t offset, multi_ptr ptr); + template + void store(size_t offset, multi_ptr ptr) const; + + // subscript operator + dataT &operator[](int index); + const dataT &operator[](int index) const; + + // OP is: +, -, *, /, % + /* If OP is %, available only when: dataT != float && dataT != double + && dataT != half. */ + friend vec operatorOP(const vec &lhs, const vec &rhs) { /* ... */ } + friend vec operatorOP(const vec &lhs, const dataT &rhs) { /* ... */ } + + // OP is: +=, -=, *=, /=, %= + /* If OP is %=, available only when: dataT != float && dataT != double + && dataT != half. */ + friend vec &operatorOP(vec &lhs, const vec &rhs) { /* ... */ } + friend vec &operatorOP(vec &lhs, const dataT &rhs) { /* ... */ } + + // OP is prefix ++, -- + friend vec &operatorOP(vec &rhs) { /* ... */ } + + // OP is postfix ++, -- + friend vec operatorOP(vec& lhs, int) { /* ... */ } + + // OP is unary +, - + friend vec operatorOP(vec &rhs) const { /* ... */ } + + // OP is: &, |, ^ + /* Available only when: dataT != float && dataT != double + && dataT != half. */ + friend vec operatorOP(const vec &lhs, const vec &rhs) { /* ... */ } + friend vec operatorOP(const vec &lhs, const dataT &rhs) { /* ... */ } + + // OP is: &=, |=, ^= + /* Available only when: dataT != float && dataT != double + && dataT != half. */ + friend vec &operatorOP(vec &lhs, const vec &rhs) { /* ... */ } + friend vec &operatorOP(vec &lhs, const dataT &rhs) { /* ... */ } + + // OP is: &&, || + friend vec operatorOP(const vec &lhs, const vec &rhs) { + /* ... */ } + friend vec operatorOP(const vec& lhs, const dataT &rhs) { + /* ... */ } + + // OP is: <<, >> + /* Available only when: dataT != float && dataT != double + && dataT != half. */ + friend vec operatorOP(const vec &lhs, const vec &rhs) { /* ... */ } + friend vec operatorOP(const vec &lhs, const dataT &rhs) { /* ... */ } + + // OP is: <<=, >>= + /* Available only when: dataT != float && dataT != double + && dataT != half. */ + friend vec &operatorOP(vec &lhs, const vec &rhs) { /* ... */ } + friend vec &operatorOP(vec &lhs, const dataT &rhs) { /* ... */ } + + // OP is: ==, !=, <, >, <=, >= + friend vec operatorOP(const vec &lhs, const vec &rhs) { + /* ... */ } + friend vec operatorOP(const vec &lhs, const dataT &rhs) { + /* ... */ } + + vec &operator=(const vec &rhs); + vec &operator=(const dataT &rhs); + + /* Available only when: dataT != float && dataT != double + && dataT != half. */ + friend vec operator~(const vec &v) { /* ... */ } + friend vec operator!(const vec &v) { /* ... */ } + + // OP is: +, -, *, /, % + /* operator% is only available when: dataT != float && dataT != double && + dataT != half. */ + friend vec operatorOP(const dataT &lhs, const vec &rhs) { /* ... */ } + + // OP is: &, |, ^ + /* Available only when: dataT != float && dataT != double + && dataT != half. */ + friend vec operatorOP(const dataT &lhs, const vec &rhs) { /* ... */ } + + // OP is: &&, || + friend vec operatorOP(const dataT &lhs, const vec &rhs) { + /* ... */ } + + // OP is: <<, >> + /* Available only when: dataT != float && dataT != double + && dataT != half. */ + friend vec operatorOP(const dataT &lhs, const vec &rhs) { /* ... */ } + + // OP is: ==, !=, <, >, <=, >= + friend vec operatorOP(const dataT &lhs, const vec &rhs) { + /* ... */ } + +}; + +// Deduction guides +// Available only when: (std::is_same_v && ...) +template +vec(T, U...) -> vec; + +} // namespace sycl diff --git a/adoc/images/Makefile b/adoc/images/Makefile new file mode 100644 index 00000000..5211fd14 --- /dev/null +++ b/adoc/images/Makefile @@ -0,0 +1,26 @@ +# This only needs to be run if changing the .tikz files. +# Generated SVG are checked into the repository and need only be +# rebuilt if the TikZ markup changes. +# Building requires asciidoctor, asciidoctor-diagram, pdf2svg, +# and a LaTeX installation including pdflatex, tikz, +# and the 'arrows' tikzlibrary. + +TIKZ = \ + fig:three-cg-one-queue.tikz \ + fig:three-cg-three-queue.tikz \ + fig:device_to_device1.tikz \ + fig:device_to_device2.tikz \ + fig:overlap.tikz \ + fig:host-acc.tikz + +all: makesvg.html + +# The actual Makefile target is irrelevant. +# The side effect of running it is generating SVG files to be checked in. +makesvg.html: makesvg.adoc + asciidoctor --backend html5 --require asciidoctor-diagram \ + --out-file makesvg.html makesvg.adoc + -rm $@ + +clean: + -rm -f makesvg.html *.svg diff --git a/adoc/images/device_to_device1.svg b/adoc/images/device_to_device1.svg new file mode 100644 index 00000000..b8e889c5 --- /dev/null +++ b/adoc/images/device_to_device1.svg @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/adoc/images/device_to_device1.tikz b/adoc/images/device_to_device1.tikz new file mode 100644 index 00000000..4e858a54 --- /dev/null +++ b/adoc/images/device_to_device1.tikz @@ -0,0 +1,34 @@ +[tikz,"device_to_device1"] +---- +\usetikzlibrary{arrows} +\begin{tikzpicture}[auto] \small +\tikzset{Base/.style={align=center}, %, minimum height=2ex}, + Line/.style={draw, very thick, >=latex', black}, + LineHost/.style={draw, dashed, >=latex', black}, + MemoryObject/.style={draw, Base, black}, + CommandGroup/.style={draw, Base, rounded corners, black}, + Notice/.style = {draw, above, rounded corners, rectangle callout, text width=6cm, + callout absolute pointer={#1} }, + Action/.style = {very thick, solid, draw, rectangle callout, rounded corners, black, Base} + } + +\matrix (binmat) [ampersand replacement=\&, column sep=0.5em, row sep=2em] + {\node (empty) {}; \& + \node (empty) {}; \& + \node [MemoryObject] (Host) {Host memory}; \& + \node (empty) {}; \\ + \node (empty) {}; \& + \node [CommandGroup] (CGA) {$CG_a(b1_{RW})$}; \& + \node (empty) {}; \& + \node [CommandGroup, style=dotted] (CGB) {$CG_b(b2_{RW})$}; \\ + \node (empty) {}; \& + \& \node [CommandGroup] (CGC) {$CG_c(b1_{RW},b2_{RW})$}; \\ + \node (empty) {}; \& + \& \node (empty) {}; \\ +}; + \path [LineHost, ->] (Host) -- node[blue, left=0.2, near start] {$A(b1_{RW})$} (CGA); + \path [LineHost, ->] (Host) -- node[blue, right=0.2, near start] {$A(b2_{RW})$} (CGB); + \path [Line, ->] (CGA) -- node[blue, left=0.2, near end] {$A'(b1_{RW})$} (CGC); + \path [Line, ->] (CGB) -- node[blue, right=0.2, near end] {$A'(b2_{RW})$} (CGC); +\end{tikzpicture} +---- diff --git a/adoc/images/device_to_device2.svg b/adoc/images/device_to_device2.svg new file mode 100644 index 00000000..508fbd7e --- /dev/null +++ b/adoc/images/device_to_device2.svg @@ -0,0 +1,440 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/adoc/images/device_to_device2.tikz b/adoc/images/device_to_device2.tikz new file mode 100644 index 00000000..6290aee0 --- /dev/null +++ b/adoc/images/device_to_device2.tikz @@ -0,0 +1,34 @@ +[tikz,"device_to_device2"] +---- +\usetikzlibrary{arrows} +\begin{tikzpicture}[auto] \small +\tikzset{Base/.style={align=center}, %, minimum height=2ex}, + Line/.style={draw, very thick, >=latex', black}, + LineHost/.style={draw, dashed, >=latex', black}, + MemoryObject/.style={draw, Base, black}, + CommandGroup/.style={draw, Base, rounded corners, black}, + Notice/.style = {draw, above, rounded corners, rectangle callout, text width=6cm, + callout absolute pointer={#1} }, + Action/.style = {very thick, solid, draw, rectangle callout, rounded corners, black, Base} + } + +\matrix (binmat) [ampersand replacement=\&, column sep=0.5em, row sep=2em] + {\node (empty) {}; \& + \node (empty) {}; \& + \node [MemoryObject] (Host) {Host memory (ptr)}; \& + \node (empty) {}; \\ + \node (empty) {}; \& + \node [CommandGroup] (CGA) {$CG_a(b1_{RW})$}; \& + \node (empty) {}; \& + \node [CommandGroup, style=dotted] (CGB) {$CG_b(b2_{RW})$}; \\ + \node (empty) {}; \& + \& \node [CommandGroup] (CGC) {$CG_c(b1_{RW},b2_{RW})$}; \\ + \node (empty) {}; \& + \& \node (empty) {}; \\ +}; + \path [LineHost, ->] (Host) -- node[blue, left=0.3, near start] {clEnqueueWriteBuffer(q1, ptr, b1\_c1)} (CGA); + \path [LineHost, ->] (Host) -- node[blue, right=0.3, near start] {clEnqueueWriteBuffer(q2, ptr, b2\_c2)} (CGB); + \path [Line, ->] (CGA) -- node[blue, left=0.2, near end] {} (CGC); + \path [Line, ->] (CGB) -- node[blue, right=0.5, near end, align=left] {clEnqueueReadBuffer(q2, b2\_c2, ptr);\\ clEnqueueReadBuffer(q1, b2\_c1, ptr)} (CGC); +\end{tikzpicture} +---- diff --git a/adoc/images/host-acc.svg b/adoc/images/host-acc.svg new file mode 100644 index 00000000..c9bf0bf2 --- /dev/null +++ b/adoc/images/host-acc.svg @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/adoc/images/host-acc.tikz b/adoc/images/host-acc.tikz new file mode 100644 index 00000000..c71a2322 --- /dev/null +++ b/adoc/images/host-acc.tikz @@ -0,0 +1,31 @@ +[tikz,"host-acc"] +---- +\usetikzlibrary{arrows} +\begin{tikzpicture}[auto] \small +\tikzset{Base/.style={align=center}, %, minimum height=2ex}, + Line/.style={draw, very thick, >=latex', black}, + LineHost/.style={draw, dashed, >=latex', black}, + MemoryObject/.style={draw, Base, black}, + HostAcc/.style={draw, Base, black, cylinder}, + CommandGroup/.style={draw, Base, rounded corners, black}, + Notice/.style = {draw, above, rounded corners, rectangle callout, text width=6cm, + callout absolute pointer={#1} }, + } + +\matrix (binmat) [ampersand replacement=\&, column sep=0.5em, row sep=2em] +{ + \node [CommandGroup] (CGA) {$CG_a(b1_{RW})$}; \& + \node (empty) {}; \& + \node (empty) {}; \\ + \node [CommandGroup] (CGB) {$CG_b(b2_{RW})$}; \& + \node [MemoryObject] (HA) {$H(b1_{RW})$}; \\ + \& \node [CommandGroup] (CGC) {$CG_c(b1_{RW}, b2_{RW})$}; \\ + \node (empty) {}; \& + + \& \node (empty) {}; \\ +}; +\path [Line, ->] (CGA) -- (HA); +\path [Line, ->] (CGB) -- (CGC); +\path [Line, ->] (HA) -- (CGC); +\end{tikzpicture} +---- diff --git a/adoc/images/makesvg.adoc b/adoc/images/makesvg.adoc new file mode 100644 index 00000000..0bae5027 --- /dev/null +++ b/adoc/images/makesvg.adoc @@ -0,0 +1,12 @@ +// Shell used to convert TikZ images into SVG + +:tikz-format: svg + += Images + +include::three-cg-one-queue.tikz[] +include::three-cg-three-queue.tikz[] +include::device_to_device1.tikz[] +include::device_to_device2.tikz[] +include::overlap.tikz[] +include::host-acc.tikz[] diff --git a/adoc/images/overlap.svg b/adoc/images/overlap.svg new file mode 100644 index 00000000..6dbb55ec --- /dev/null +++ b/adoc/images/overlap.svg @@ -0,0 +1,214 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/adoc/images/overlap.tikz b/adoc/images/overlap.tikz new file mode 100644 index 00000000..3454411a --- /dev/null +++ b/adoc/images/overlap.tikz @@ -0,0 +1,28 @@ +[tikz,"overlap"] +---- +\usetikzlibrary{arrows} +\begin{tikzpicture}[auto] \small +\tikzset{Base/.style={align=center}, %, minimum height=2ex}, + Line/.style={draw, very thick, >=latex', black}, + LineHost/.style={draw, dashed, >=latex', black}, + MemoryObject/.style={draw, Base, black}, + CommandGroup/.style={draw, Base, rounded corners, black}, + Notice/.style = {draw, above, rounded corners, rectangle callout, text width=6cm, + callout absolute pointer={#1} }, + } + +\matrix (binmat) [ampersand replacement=\&, column sep=0.5em, row sep=2em] +{ + \node [CommandGroup] (CGA) {$CG_a(b1_{RW, [0,10)})$}; \& + \node (empty) {}; \& + \node [CommandGroup] (CGB) {$CG_b(b1_{RW, [10, 20)})$}; \\ + \node (empty) {}; \& + \& \node [CommandGroup] (CGC) {$CG_c(b1_{RW, [5, 15)})$}; \\ + \node (empty) {}; \& + + \& \node (empty) {}; \\ +}; +\path [Line, ->] (CGA) -- (CGC); +\path [Line, ->] (CGB) -- (CGC); +\end{tikzpicture} +---- diff --git a/adoc/images/three-cg-one-queue.svg b/adoc/images/three-cg-one-queue.svg new file mode 100644 index 00000000..eaf1911b --- /dev/null +++ b/adoc/images/three-cg-one-queue.svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/adoc/images/three-cg-one-queue.tikz b/adoc/images/three-cg-one-queue.tikz new file mode 100644 index 00000000..3ac2aefc --- /dev/null +++ b/adoc/images/three-cg-one-queue.tikz @@ -0,0 +1,26 @@ +[tikz,"three-cg-one-queue"] +---- +\usetikzlibrary{arrows} +\begin{tikzpicture}[auto] \small +\tikzset{ + Base/.style={align=center}, %, minimum height=2ex}, + Line/.style={draw, very thick, >=latex', black}, + CommandGroup/.style={draw, Base, rounded corners, black}, + Notice/.style = { draw, above, rounded corners, rectangle callout, text width=6cm, + callout absolute pointer={#1} }, + } + +\matrix (binmat) [ampersand replacement=\&, column sep=0.5em, row sep=2em] +{ + \node [CommandGroup] (CGA) {$CG_a(r_1)$}; \& + \node (empty) {}; \& + \node [CommandGroup] (CGB) {$CG_b(r_2)$}; \\ + + \& \node [CommandGroup] (CGC) {$CG_c(r_1,r_2)$}; \\ + \& \node (empty) {}; \\ +}; + +\path [Line, ->] (CGA) -- (CGC); +\path [Line, ->] (CGB) -- (CGC); +\end{tikzpicture} +---- diff --git a/adoc/images/three-cg-three-queue.svg b/adoc/images/three-cg-three-queue.svg new file mode 100644 index 00000000..eaf1911b --- /dev/null +++ b/adoc/images/three-cg-three-queue.svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/adoc/images/three-cg-three-queue.tikz b/adoc/images/three-cg-three-queue.tikz new file mode 100644 index 00000000..98c09bd7 --- /dev/null +++ b/adoc/images/three-cg-three-queue.tikz @@ -0,0 +1,26 @@ +[tikz,"three-cg-three-queue"] +---- +\usetikzlibrary{arrows} +\begin{tikzpicture}[auto] \small +\tikzset{ + Base/.style={align=center}, %, minimum height=2ex}, + Line/.style={draw, very thick, >=latex', black}, + CommandGroup/.style={draw, Base, rounded corners, black}, + Notice/.style = { draw, above, rounded corners, rectangle callout, text width=6cm, + callout absolute pointer={#1} }, + } + +\matrix (binmat) [ampersand replacement=\&, column sep=0.5em, row sep=2em] +{ + \node [CommandGroup] (CGA) {$CG_a(r_1)$}; \& + \node (empty) {}; \& + \node [CommandGroup] (CGB) {$CG_b(r_2)$}; \\ + + \& \node [CommandGroup] (CGC) {$CG_c(r_1,r_2)$}; \\ + \& \node (empty) {}; \\ +}; + +\path [Line, ->] (CGA) -- (CGC); +\path [Line, ->] (CGB) -- (CGC); +\end{tikzpicture} +---- diff --git a/adoc/katex/README.md b/adoc/katex/README.md new file mode 100644 index 00000000..5868416e --- /dev/null +++ b/adoc/katex/README.md @@ -0,0 +1,91 @@ +# [KaTeX](https://katex.org/) +[![npm](https://img.shields.io/npm/v/katex.svg)](https://www.npmjs.com/package/katex) +[![CircleCI](https://circleci.com/gh/KaTeX/KaTeX.svg?style=shield)](https://circleci.com/gh/KaTeX/KaTeX) +[![codecov](https://codecov.io/gh/KaTeX/KaTeX/branch/master/graph/badge.svg)](https://codecov.io/gh/KaTeX/KaTeX) +[![Join the chat at https://gitter.im/KaTeX/KaTeX](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/KaTeX/KaTeX?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +[![Dependabot Status](https://api.dependabot.com/badges/status?host=github&repo=KaTeX/KaTeX)](https://dependabot.com) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/katex/badge?style=rounded)](https://www.jsdelivr.com/package/npm/katex) +![](https://img.badgesize.io/KaTeX/KaTeX/v0.11.1/dist/katex.min.js?compression=gzip) + +KaTeX is a fast, easy-to-use JavaScript library for TeX math rendering on the web. + + * **Fast:** KaTeX renders its math synchronously and doesn't need to reflow the page. See how it compares to a competitor in [this speed test](http://www.intmath.com/cg5/katex-mathjax-comparison.php). + * **Print quality:** KaTeX's layout is based on Donald Knuth's TeX, the gold standard for math typesetting. + * **Self contained:** KaTeX has no dependencies and can easily be bundled with your website resources. + * **Server side rendering:** KaTeX produces the same output regardless of browser or environment, so you can pre-render expressions using Node.js and send them as plain HTML. + +KaTeX is compatible with all major browsers, including Chrome, Safari, Firefox, Opera, Edge, and IE 9–11. + +KaTeX supports much (but not all) of LaTeX and many LaTeX packages. See the [list of supported functions](https://katex.org/docs/supported.html). + +Try out KaTeX [on the demo page](https://katex.org/#demo)! + +## Getting started + +### Starter template + +```html + + + + + + + + + + + + + ... + +``` + +You can also [download KaTeX](https://github.com/KaTeX/KaTeX/releases) and host it yourself. + +For details on how to configure auto-render extension, refer to [the documentation](https://katex.org/docs/autorender.html). + +### API + +Call `katex.render` to render a TeX expression directly into a DOM element. +For example: + +```js +katex.render("c = \\pm\\sqrt{a^2 + b^2}", element, { + throwOnError: false +}); +``` + +Call `katex.renderToString` to generate an HTML string of the rendered math, +e.g., for server-side rendering. For example: + +```js +var html = katex.renderToString("c = \\pm\\sqrt{a^2 + b^2}", { + throwOnError: false +}); +// '...' +``` + +Make sure to include the CSS and font files in both cases. +If you are doing all rendering on the server, there is no need to include the +JavaScript on the client. + +The examples above use the `throwOnError: false` option, which renders invalid +inputs as the TeX source code in red (by default), with the error message as +hover text. For other available options, see the +[API documentation](https://katex.org/docs/api.html), +[options documentation](https://katex.org/docs/options.html), and +[handling errors documentation](https://katex.org/docs/error.html). + +## Demo and Documentation + +Learn more about using KaTeX [on the website](https://katex.org)! + +## Contributing + +See [CONTRIBUTING.md](CONTRIBUTING.md) + +## License + +KaTeX is licensed under the [MIT License](http://opensource.org/licenses/MIT). diff --git a/adoc/katex/contrib/auto-render.js b/adoc/katex/contrib/auto-render.js new file mode 100644 index 00000000..d31cc7cf --- /dev/null +++ b/adoc/katex/contrib/auto-render.js @@ -0,0 +1,339 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(require("katex")); + else if(typeof define === 'function' && define.amd) + define(["katex"], factory); + else if(typeof exports === 'object') + exports["renderMathInElement"] = factory(require("katex")); + else + root["renderMathInElement"] = factory(root["katex"]); +})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__0__) { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 1); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports) { + +module.exports = __WEBPACK_EXTERNAL_MODULE__0__; + +/***/ }), +/* 1 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); + +// EXTERNAL MODULE: external "katex" +var external_katex_ = __webpack_require__(0); +var external_katex_default = /*#__PURE__*/__webpack_require__.n(external_katex_); + +// CONCATENATED MODULE: ./contrib/auto-render/splitAtDelimiters.js +/* eslint no-constant-condition:0 */ +var findEndOfMath = function findEndOfMath(delimiter, text, startIndex) { + // Adapted from + // https://github.com/Khan/perseus/blob/master/src/perseus-markdown.jsx + var index = startIndex; + var braceLevel = 0; + var delimLength = delimiter.length; + + while (index < text.length) { + var character = text[index]; + + if (braceLevel <= 0 && text.slice(index, index + delimLength) === delimiter) { + return index; + } else if (character === "\\") { + index++; + } else if (character === "{") { + braceLevel++; + } else if (character === "}") { + braceLevel--; + } + + index++; + } + + return -1; +}; + +var splitAtDelimiters = function splitAtDelimiters(startData, leftDelim, rightDelim, display) { + var finalData = []; + + for (var i = 0; i < startData.length; i++) { + if (startData[i].type === "text") { + var text = startData[i].data; + var lookingForLeft = true; + var currIndex = 0; + var nextIndex = void 0; + nextIndex = text.indexOf(leftDelim); + + if (nextIndex !== -1) { + currIndex = nextIndex; + finalData.push({ + type: "text", + data: text.slice(0, currIndex) + }); + lookingForLeft = false; + } + + while (true) { + if (lookingForLeft) { + nextIndex = text.indexOf(leftDelim, currIndex); + + if (nextIndex === -1) { + break; + } + + finalData.push({ + type: "text", + data: text.slice(currIndex, nextIndex) + }); + currIndex = nextIndex; + } else { + nextIndex = findEndOfMath(rightDelim, text, currIndex + leftDelim.length); + + if (nextIndex === -1) { + break; + } + + finalData.push({ + type: "math", + data: text.slice(currIndex + leftDelim.length, nextIndex), + rawData: text.slice(currIndex, nextIndex + rightDelim.length), + display: display + }); + currIndex = nextIndex + rightDelim.length; + } + + lookingForLeft = !lookingForLeft; + } + + finalData.push({ + type: "text", + data: text.slice(currIndex) + }); + } else { + finalData.push(startData[i]); + } + } + + return finalData; +}; + +/* harmony default export */ var auto_render_splitAtDelimiters = (splitAtDelimiters); +// CONCATENATED MODULE: ./contrib/auto-render/auto-render.js +/* eslint no-console:0 */ + + + +var auto_render_splitWithDelimiters = function splitWithDelimiters(text, delimiters) { + var data = [{ + type: "text", + data: text + }]; + + for (var i = 0; i < delimiters.length; i++) { + var delimiter = delimiters[i]; + data = auto_render_splitAtDelimiters(data, delimiter.left, delimiter.right, delimiter.display || false); + } + + return data; +}; +/* Note: optionsCopy is mutated by this method. If it is ever exposed in the + * API, we should copy it before mutating. + */ + + +var auto_render_renderMathInText = function renderMathInText(text, optionsCopy) { + var data = auto_render_splitWithDelimiters(text, optionsCopy.delimiters); + var fragment = document.createDocumentFragment(); + + for (var i = 0; i < data.length; i++) { + if (data[i].type === "text") { + fragment.appendChild(document.createTextNode(data[i].data)); + } else { + var span = document.createElement("span"); + var math = data[i].data; // Override any display mode defined in the settings with that + // defined by the text itself + + optionsCopy.displayMode = data[i].display; + + try { + if (optionsCopy.preProcess) { + math = optionsCopy.preProcess(math); + } + + external_katex_default.a.render(math, span, optionsCopy); + } catch (e) { + if (!(e instanceof external_katex_default.a.ParseError)) { + throw e; + } + + optionsCopy.errorCallback("KaTeX auto-render: Failed to parse `" + data[i].data + "` with ", e); + fragment.appendChild(document.createTextNode(data[i].rawData)); + continue; + } + + fragment.appendChild(span); + } + } + + return fragment; +}; + +var renderElem = function renderElem(elem, optionsCopy) { + for (var i = 0; i < elem.childNodes.length; i++) { + var childNode = elem.childNodes[i]; + + if (childNode.nodeType === 3) { + // Text node + var frag = auto_render_renderMathInText(childNode.textContent, optionsCopy); + i += frag.childNodes.length - 1; + elem.replaceChild(frag, childNode); + } else if (childNode.nodeType === 1) { + (function () { + // Element node + var className = ' ' + childNode.className + ' '; + var shouldRender = optionsCopy.ignoredTags.indexOf(childNode.nodeName.toLowerCase()) === -1 && optionsCopy.ignoredClasses.every(function (x) { + return className.indexOf(' ' + x + ' ') === -1; + }); + + if (shouldRender) { + renderElem(childNode, optionsCopy); + } + })(); + } // Otherwise, it's something else, and ignore it. + + } +}; + +var renderMathInElement = function renderMathInElement(elem, options) { + if (!elem) { + throw new Error("No element provided to render"); + } + + var optionsCopy = {}; // Object.assign(optionsCopy, option) + + for (var option in options) { + if (options.hasOwnProperty(option)) { + optionsCopy[option] = options[option]; + } + } // default options + + + optionsCopy.delimiters = optionsCopy.delimiters || [{ + left: "$$", + right: "$$", + display: true + }, { + left: "\\(", + right: "\\)", + display: false + }, // LaTeX uses $…$, but it ruins the display of normal `$` in text: + // {left: "$", right: "$", display: false}, + // \[…\] must come last in this array. Otherwise, renderMathInElement + // will search for \[ before it searches for $$ or \( + // That makes it susceptible to finding a \\[0.3em] row delimiter and + // treating it as if it were the start of a KaTeX math zone. + { + left: "\\[", + right: "\\]", + display: true + }]; + optionsCopy.ignoredTags = optionsCopy.ignoredTags || ["script", "noscript", "style", "textarea", "pre", "code"]; + optionsCopy.ignoredClasses = optionsCopy.ignoredClasses || []; + optionsCopy.errorCallback = optionsCopy.errorCallback || console.error; // Enable sharing of global macros defined via `\gdef` between different + // math elements within a single call to `renderMathInElement`. + + optionsCopy.macros = optionsCopy.macros || {}; + renderElem(elem, optionsCopy); +}; + +/* harmony default export */ var auto_render = __webpack_exports__["default"] = (renderMathInElement); + +/***/ }) +/******/ ])["default"]; +}); \ No newline at end of file diff --git a/adoc/katex/contrib/auto-render.min.js b/adoc/katex/contrib/auto-render.min.js new file mode 100644 index 00000000..3a6d6639 --- /dev/null +++ b/adoc/katex/contrib/auto-render.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("katex")):"function"==typeof define&&define.amd?define(["katex"],t):"object"==typeof exports?exports.renderMathInElement=t(require("katex")):e.renderMathInElement=t(e.katex)}("undefined"!=typeof self?self:this,function(e){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=1)}([function(t,r){t.exports=e},function(e,t,r){"use strict";r.r(t);var n=r(0),o=r.n(n),a=function(e,t,r){for(var n=r,o=0,a=e.length;n className.indexOf(' ' + x + ' ') === -1); + + if (shouldRender) { + renderElem(childNode, optionsCopy); + } + } // Otherwise, it's something else, and ignore it. + + } +}; + +const renderMathInElement = function renderMathInElement(elem, options) { + if (!elem) { + throw new Error("No element provided to render"); + } + + const optionsCopy = {}; // Object.assign(optionsCopy, option) + + for (const option in options) { + if (options.hasOwnProperty(option)) { + optionsCopy[option] = options[option]; + } + } // default options + + + optionsCopy.delimiters = optionsCopy.delimiters || [{ + left: "$$", + right: "$$", + display: true + }, { + left: "\\(", + right: "\\)", + display: false + }, // LaTeX uses $…$, but it ruins the display of normal `$` in text: + // {left: "$", right: "$", display: false}, + // \[…\] must come last in this array. Otherwise, renderMathInElement + // will search for \[ before it searches for $$ or \( + // That makes it susceptible to finding a \\[0.3em] row delimiter and + // treating it as if it were the start of a KaTeX math zone. + { + left: "\\[", + right: "\\]", + display: true + }]; + optionsCopy.ignoredTags = optionsCopy.ignoredTags || ["script", "noscript", "style", "textarea", "pre", "code"]; + optionsCopy.ignoredClasses = optionsCopy.ignoredClasses || []; + optionsCopy.errorCallback = optionsCopy.errorCallback || console.error; // Enable sharing of global macros defined via `\gdef` between different + // math elements within a single call to `renderMathInElement`. + + optionsCopy.macros = optionsCopy.macros || {}; + renderElem(elem, optionsCopy); +}; + +export default renderMathInElement; diff --git a/adoc/katex/contrib/copy-tex.css b/adoc/katex/contrib/copy-tex.css new file mode 100644 index 00000000..90801d84 --- /dev/null +++ b/adoc/katex/contrib/copy-tex.css @@ -0,0 +1,14 @@ +/* Force selection of entire .katex/.katex-display blocks, so that we can + * copy/paste the entire source code. If you omit this CSS, partial + * selections of a formula will work, but will copy the ugly HTML + * representation instead of the LaTeX source code. (Full selections will + * still produce the LaTeX source code.) + */ +.katex, +.katex-display { + user-select: all; + -moz-user-select: all; + -webkit-user-select: all; + -ms-user-select: all; +} + diff --git a/adoc/katex/contrib/copy-tex.js b/adoc/katex/contrib/copy-tex.js new file mode 100644 index 00000000..4649f8f7 --- /dev/null +++ b/adoc/katex/contrib/copy-tex.js @@ -0,0 +1,213 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else { + var a = factory(); + for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; + } +})((typeof self !== 'undefined' ? self : this), function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 1); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + +// extracted by mini-css-extract-plugin + +/***/ }), +/* 1 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); + +// EXTERNAL MODULE: ./contrib/copy-tex/copy-tex.css +var copy_tex = __webpack_require__(0); + +// CONCATENATED MODULE: ./contrib/copy-tex/katex2tex.js +// Set these to how you want inline and display math to be delimited. +var defaultCopyDelimiters = { + inline: ['$', '$'], + // alternative: ['\(', '\)'] + display: ['$$', '$$'] // alternative: ['\[', '\]'] + +}; // Replace .katex elements with their TeX source ( element). +// Modifies fragment in-place. Useful for writing your own 'copy' handler, +// as in copy-tex.js. + +var katexReplaceWithTex = function katexReplaceWithTex(fragment, copyDelimiters) { + if (copyDelimiters === void 0) { + copyDelimiters = defaultCopyDelimiters; + } + + // Remove .katex-html blocks that are preceded by .katex-mathml blocks + // (which will get replaced below). + var katexHtml = fragment.querySelectorAll('.katex-mathml + .katex-html'); + + for (var i = 0; i < katexHtml.length; i++) { + var element = katexHtml[i]; + + if (element.remove) { + element.remove(null); + } else { + element.parentNode.removeChild(element); + } + } // Replace .katex-mathml elements with their annotation (TeX source) + // descendant, with inline delimiters. + + + var katexMathml = fragment.querySelectorAll('.katex-mathml'); + + for (var _i = 0; _i < katexMathml.length; _i++) { + var _element = katexMathml[_i]; + + var texSource = _element.querySelector('annotation'); + + if (texSource) { + if (_element.replaceWith) { + _element.replaceWith(texSource); + } else { + _element.parentNode.replaceChild(texSource, _element); + } + + texSource.innerHTML = copyDelimiters.inline[0] + texSource.innerHTML + copyDelimiters.inline[1]; + } + } // Switch display math to display delimiters. + + + var displays = fragment.querySelectorAll('.katex-display annotation'); + + for (var _i2 = 0; _i2 < displays.length; _i2++) { + var _element2 = displays[_i2]; + _element2.innerHTML = copyDelimiters.display[0] + _element2.innerHTML.substr(copyDelimiters.inline[0].length, _element2.innerHTML.length - copyDelimiters.inline[0].length - copyDelimiters.inline[1].length) + copyDelimiters.display[1]; + } + + return fragment; +}; +/* harmony default export */ var katex2tex = (katexReplaceWithTex); +// CONCATENATED MODULE: ./contrib/copy-tex/copy-tex.js + // Global copy handler to modify behavior on .katex elements. + +document.addEventListener('copy', function (event) { + var selection = window.getSelection(); + + if (selection.isCollapsed) { + return; // default action OK if selection is empty + } + + var fragment = selection.getRangeAt(0).cloneContents(); + + if (!fragment.querySelector('.katex-mathml')) { + return; // default action OK if no .katex-mathml elements + } // Preserve usual HTML copy/paste behavior. + + + var html = []; + + for (var i = 0; i < fragment.childNodes.length; i++) { + html.push(fragment.childNodes[i].outerHTML); + } + + event.clipboardData.setData('text/html', html.join('')); // Rewrite plain-text version. + + event.clipboardData.setData('text/plain', katex2tex(fragment).textContent); // Prevent normal copy handling. + + event.preventDefault(); +}); +// CONCATENATED MODULE: ./contrib/copy-tex/copy-tex.webpack.js +/** + * This is the webpack entry point for KaTeX. As ECMAScript doesn't support + * CSS modules natively, a separate entry point is used. + */ + + + +/***/ }) +/******/ ])["default"]; +}); \ No newline at end of file diff --git a/adoc/katex/contrib/copy-tex.min.css b/adoc/katex/contrib/copy-tex.min.css new file mode 100644 index 00000000..555ed115 --- /dev/null +++ b/adoc/katex/contrib/copy-tex.min.css @@ -0,0 +1 @@ +.katex,.katex-display{user-select:all;-moz-user-select:all;-webkit-user-select:all;-ms-user-select:all} diff --git a/adoc/katex/contrib/copy-tex.min.js b/adoc/katex/contrib/copy-tex.min.js new file mode 100644 index 00000000..e0354d6b --- /dev/null +++ b/adoc/katex/contrib/copy-tex.min.js @@ -0,0 +1 @@ +!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var r in n)("object"==typeof exports?exports:e)[r]=n[r]}}("undefined"!=typeof self?self:this,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e,t,n){},function(e,t,n){"use strict";n.r(t);n(0);var r={inline:["$","$"],display:["$$","$$"]},o=function(e,t){void 0===t&&(t=r);for(var n=e.querySelectorAll(".katex-mathml + .katex-html"),o=0;o element). +// Modifies fragment in-place. Useful for writing your own 'copy' handler, +// as in copy-tex.js. + +const katexReplaceWithTex = function katexReplaceWithTex(fragment, copyDelimiters) { + if (copyDelimiters === void 0) { + copyDelimiters = defaultCopyDelimiters; + } + + // Remove .katex-html blocks that are preceded by .katex-mathml blocks + // (which will get replaced below). + const katexHtml = fragment.querySelectorAll('.katex-mathml + .katex-html'); + + for (let i = 0; i < katexHtml.length; i++) { + const element = katexHtml[i]; + + if (element.remove) { + element.remove(null); + } else { + element.parentNode.removeChild(element); + } + } // Replace .katex-mathml elements with their annotation (TeX source) + // descendant, with inline delimiters. + + + const katexMathml = fragment.querySelectorAll('.katex-mathml'); + + for (let i = 0; i < katexMathml.length; i++) { + const element = katexMathml[i]; + const texSource = element.querySelector('annotation'); + + if (texSource) { + if (element.replaceWith) { + element.replaceWith(texSource); + } else { + element.parentNode.replaceChild(texSource, element); + } + + texSource.innerHTML = copyDelimiters.inline[0] + texSource.innerHTML + copyDelimiters.inline[1]; + } + } // Switch display math to display delimiters. + + + const displays = fragment.querySelectorAll('.katex-display annotation'); + + for (let i = 0; i < displays.length; i++) { + const element = displays[i]; + element.innerHTML = copyDelimiters.display[0] + element.innerHTML.substr(copyDelimiters.inline[0].length, element.innerHTML.length - copyDelimiters.inline[0].length - copyDelimiters.inline[1].length) + copyDelimiters.display[1]; + } + + return fragment; +}; + +document.addEventListener('copy', function (event) { + const selection = window.getSelection(); + + if (selection.isCollapsed) { + return; // default action OK if selection is empty + } + + const fragment = selection.getRangeAt(0).cloneContents(); + + if (!fragment.querySelector('.katex-mathml')) { + return; // default action OK if no .katex-mathml elements + } // Preserve usual HTML copy/paste behavior. + + + const html = []; + + for (let i = 0; i < fragment.childNodes.length; i++) { + html.push(fragment.childNodes[i].outerHTML); + } + + event.clipboardData.setData('text/html', html.join('')); // Rewrite plain-text version. + + event.clipboardData.setData('text/plain', katexReplaceWithTex(fragment).textContent); // Prevent normal copy handling. + + event.preventDefault(); +}); diff --git a/adoc/katex/contrib/mathtex-script-type.js b/adoc/katex/contrib/mathtex-script-type.js new file mode 100644 index 00000000..daa01a63 --- /dev/null +++ b/adoc/katex/contrib/mathtex-script-type.js @@ -0,0 +1,137 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(require("katex")); + else if(typeof define === 'function' && define.amd) + define(["katex"], factory); + else { + var a = typeof exports === 'object' ? factory(require("katex")) : factory(root["katex"]); + for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; + } +})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__0__) { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 1); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports) { + +module.exports = __WEBPACK_EXTERNAL_MODULE__0__; + +/***/ }), +/* 1 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0); +/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(katex__WEBPACK_IMPORTED_MODULE_0__); + +var scripts = document.body.getElementsByTagName("script"); +scripts = Array.prototype.slice.call(scripts); +scripts.forEach(function (script) { + if (!script.type || !script.type.match(/math\/tex/i)) { + return -1; + } + + var display = script.type.match(/mode\s*=\s*display(;|\s|\n|$)/) != null; + var katexElement = document.createElement(display ? "div" : "span"); + katexElement.setAttribute("class", display ? "equation" : "inline-equation"); + + try { + katex__WEBPACK_IMPORTED_MODULE_0___default.a.render(script.text, katexElement, { + displayMode: display + }); + } catch (err) { + //console.error(err); linter doesn't like this + katexElement.textContent = script.text; + } + + script.parentNode.replaceChild(katexElement, script); +}); + +/***/ }) +/******/ ])["default"]; +}); \ No newline at end of file diff --git a/adoc/katex/contrib/mathtex-script-type.min.js b/adoc/katex/contrib/mathtex-script-type.min.js new file mode 100644 index 00000000..ae9f5286 --- /dev/null +++ b/adoc/katex/contrib/mathtex-script-type.min.js @@ -0,0 +1 @@ +!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("katex"));else if("function"==typeof define&&define.amd)define(["katex"],t);else{var r="object"==typeof exports?t(require("katex")):t(e.katex);for(var n in r)("object"==typeof exports?exports:e)[n]=r[n]}}("undefined"!=typeof self?self:this,function(e){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=1)}([function(t,r){t.exports=e},function(e,t,r){"use strict";r.r(t);var n=r(0),o=r.n(n),u=document.body.getElementsByTagName("script");(u=Array.prototype.slice.call(u)).forEach(function(e){if(!e.type||!e.type.match(/math\/tex/i))return-1;var t=null!=e.type.match(/mode\s*=\s*display(;|\s|\n|$)/),r=document.createElement(t?"div":"span");r.setAttribute("class",t?"equation":"inline-equation");try{o.a.render(e.text,r,{displayMode:t})}catch(t){r.textContent=e.text}e.parentNode.replaceChild(r,e)})}]).default}); \ No newline at end of file diff --git a/adoc/katex/contrib/mathtex-script-type.mjs b/adoc/katex/contrib/mathtex-script-type.mjs new file mode 100644 index 00000000..7cfb90e9 --- /dev/null +++ b/adoc/katex/contrib/mathtex-script-type.mjs @@ -0,0 +1,24 @@ +import katex from '../katex.mjs'; + +let scripts = document.body.getElementsByTagName("script"); +scripts = Array.prototype.slice.call(scripts); +scripts.forEach(function (script) { + if (!script.type || !script.type.match(/math\/tex/i)) { + return -1; + } + + const display = script.type.match(/mode\s*=\s*display(;|\s|\n|$)/) != null; + const katexElement = document.createElement(display ? "div" : "span"); + katexElement.setAttribute("class", display ? "equation" : "inline-equation"); + + try { + katex.render(script.text, katexElement, { + displayMode: display + }); + } catch (err) { + //console.error(err); linter doesn't like this + katexElement.textContent = script.text; + } + + script.parentNode.replaceChild(katexElement, script); +}); diff --git a/adoc/katex/contrib/mhchem.js b/adoc/katex/contrib/mhchem.js new file mode 100644 index 00000000..f84566ef --- /dev/null +++ b/adoc/katex/contrib/mhchem.js @@ -0,0 +1,3241 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(require("katex")); + else if(typeof define === 'function' && define.amd) + define(["katex"], factory); + else { + var a = typeof exports === 'object' ? factory(require("katex")) : factory(root["katex"]); + for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; + } +})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__0__) { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 1); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports) { + +module.exports = __WEBPACK_EXTERNAL_MODULE__0__; + +/***/ }), +/* 1 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0); +/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(katex__WEBPACK_IMPORTED_MODULE_0__); +/* eslint-disable */ + +/* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */ + +/* vim: set ts=2 et sw=2 tw=80: */ + +/************************************************************* + * + * KaTeX mhchem.js + * + * This file implements a KaTeX version of mhchem version 3.3.0. + * It is adapted from MathJax/extensions/TeX/mhchem.js + * It differs from the MathJax version as follows: + * 1. The interface is changed so that it can be called from KaTeX, not MathJax. + * 2. \rlap and \llap are replaced with \mathrlap and \mathllap. + * 3. Four lines of code are edited in order to use \raisebox instead of \raise. + * 4. The reaction arrow code is simplified. All reaction arrows are rendered + * using KaTeX extensible arrows instead of building non-extensible arrows. + * 5. \tripledash vertical alignment is slightly adjusted. + * + * This code, as other KaTeX code, is released under the MIT license. + * + * /************************************************************* + * + * MathJax/extensions/TeX/mhchem.js + * + * Implements the \ce command for handling chemical formulas + * from the mhchem LaTeX package. + * + * --------------------------------------------------------------------- + * + * Copyright (c) 2011-2015 The MathJax Consortium + * Copyright (c) 2015-2018 Martin Hensel + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// +// Coding Style +// - use '' for identifiers that can by minified/uglified +// - use "" for strings that need to stay untouched +// version: "3.3.0" for MathJax and KaTeX +// Add \ce, \pu, and \tripledash to the KaTeX macros. +katex__WEBPACK_IMPORTED_MODULE_0___default.a.__defineMacro("\\ce", function (context) { + return chemParse(context.consumeArgs(1)[0], "ce"); +}); + +katex__WEBPACK_IMPORTED_MODULE_0___default.a.__defineMacro("\\pu", function (context) { + return chemParse(context.consumeArgs(1)[0], "pu"); +}); // Needed for \bond for the ~ forms +// Raise by 2.56mu, not 2mu. We're raising a hyphen-minus, U+002D, not +// a mathematical minus, U+2212. So we need that extra 0.56. + + +katex__WEBPACK_IMPORTED_MODULE_0___default.a.__defineMacro("\\tripledash", "{\\vphantom{-}\\raisebox{2.56mu}{$\\mkern2mu" + "\\tiny\\text{-}\\mkern1mu\\text{-}\\mkern1mu\\text{-}\\mkern2mu$}}"); + + // +// This is the main function for handing the \ce and \pu commands. +// It takes the argument to \ce or \pu and returns the corresponding TeX string. +// + +var chemParse = function chemParse(tokens, stateMachine) { + // Recreate the argument string from KaTeX's array of tokens. + var str = ""; + var expectedLoc = tokens[tokens.length - 1].loc.start; + + for (var i = tokens.length - 1; i >= 0; i--) { + if (tokens[i].loc.start > expectedLoc) { + // context.consumeArgs has eaten a space. + str += " "; + expectedLoc = tokens[i].loc.start; + } + + str += tokens[i].text; + expectedLoc += tokens[i].text.length; + } + + var tex = texify.go(mhchemParser.go(str, stateMachine)); + return tex; +}; // +// Core parser for mhchem syntax (recursive) +// + +/** @type {MhchemParser} */ + + +var mhchemParser = { + // + // Parses mchem \ce syntax + // + // Call like + // go("H2O"); + // + go: function go(input, stateMachine) { + if (!input) { + return []; + } + + if (stateMachine === undefined) { + stateMachine = 'ce'; + } + + var state = '0'; // + // String buffers for parsing: + // + // buffer.a == amount + // buffer.o == element + // buffer.b == left-side superscript + // buffer.p == left-side subscript + // buffer.q == right-side subscript + // buffer.d == right-side superscript + // + // buffer.r == arrow + // buffer.rdt == arrow, script above, type + // buffer.rd == arrow, script above, content + // buffer.rqt == arrow, script below, type + // buffer.rq == arrow, script below, content + // + // buffer.text_ + // buffer.rm + // etc. + // + // buffer.parenthesisLevel == int, starting at 0 + // buffer.sb == bool, space before + // buffer.beginsWithBond == bool + // + // These letters are also used as state names. + // + // Other states: + // 0 == begin of main part (arrow/operator unlikely) + // 1 == next entity + // 2 == next entity (arrow/operator unlikely) + // 3 == next atom + // c == macro + // + + /** @type {Buffer} */ + + var buffer = {}; + buffer['parenthesisLevel'] = 0; + input = input.replace(/\n/g, " "); + input = input.replace(/[\u2212\u2013\u2014\u2010]/g, "-"); + input = input.replace(/[\u2026]/g, "..."); // + // Looks through mhchemParser.transitions, to execute a matching action + // (recursive) + // + + var lastInput; + var watchdog = 10; + /** @type {ParserOutput[]} */ + + var output = []; + + while (true) { + if (lastInput !== input) { + watchdog = 10; + lastInput = input; + } else { + watchdog--; + } // + // Find actions in transition table + // + + + var machine = mhchemParser.stateMachines[stateMachine]; + var t = machine.transitions[state] || machine.transitions['*']; + + iterateTransitions: for (var i = 0; i < t.length; i++) { + var matches = mhchemParser.patterns.match_(t[i].pattern, input); + + if (matches) { + // + // Execute actions + // + var task = t[i].task; + + for (var iA = 0; iA < task.action_.length; iA++) { + var o; // + // Find and execute action + // + + if (machine.actions[task.action_[iA].type_]) { + o = machine.actions[task.action_[iA].type_](buffer, matches.match_, task.action_[iA].option); + } else if (mhchemParser.actions[task.action_[iA].type_]) { + o = mhchemParser.actions[task.action_[iA].type_](buffer, matches.match_, task.action_[iA].option); + } else { + throw ["MhchemBugA", "mhchem bug A. Please report. (" + task.action_[iA].type_ + ")"]; // Trying to use non-existing action + } // + // Add output + // + + + mhchemParser.concatArray(output, o); + } // + // Set next state, + // Shorten input, + // Continue with next character + // (= apply only one transition per position) + // + + + state = task.nextState || state; + + if (input.length > 0) { + if (!task.revisit) { + input = matches.remainder; + } + + if (!task.toContinue) { + break iterateTransitions; + } + } else { + return output; + } + } + } // + // Prevent infinite loop + // + + + if (watchdog <= 0) { + throw ["MhchemBugU", "mhchem bug U. Please report."]; // Unexpected character + } + } + }, + concatArray: function concatArray(a, b) { + if (b) { + if (Array.isArray(b)) { + for (var iB = 0; iB < b.length; iB++) { + a.push(b[iB]); + } + } else { + a.push(b); + } + } + }, + patterns: { + // + // Matching patterns + // either regexps or function that return null or {match_:"a", remainder:"bc"} + // + patterns: { + // property names must not look like integers ("2") for correct property traversal order, later on + 'empty': /^$/, + 'else': /^./, + 'else2': /^./, + 'space': /^\s/, + 'space A': /^\s(?=[A-Z\\$])/, + 'space$': /^\s$/, + 'a-z': /^[a-z]/, + 'x': /^x/, + 'x$': /^x$/, + 'i$': /^i$/, + 'letters': /^(?:[a-zA-Z\u03B1-\u03C9\u0391-\u03A9?@]|(?:\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))))+/, + '\\greek': /^\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))/, + 'one lowercase latin letter $': /^(?:([a-z])(?:$|[^a-zA-Z]))$/, + '$one lowercase latin letter$ $': /^\$(?:([a-z])(?:$|[^a-zA-Z]))\$$/, + 'one lowercase greek letter $': /^(?:\$?[\u03B1-\u03C9]\$?|\$?\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)\s*\$?)(?:\s+|\{\}|(?![a-zA-Z]))$/, + 'digits': /^[0-9]+/, + '-9.,9': /^[+\-]?(?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))/, + '-9.,9 no missing 0': /^[+\-]?[0-9]+(?:[.,][0-9]+)?/, + '(-)(9.,9)(e)(99)': function e99(input) { + var m = input.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))?(\((?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))\))?(?:([eE]|\s*(\*|x|\\times|\u00D7)\s*10\^)([+\-]?[0-9]+|\{[+\-]?[0-9]+\}))?/); + + if (m && m[0]) { + return { + match_: m.splice(1), + remainder: input.substr(m[0].length) + }; + } + + return null; + }, + '(-)(9)^(-9)': function _(input) { + var m = input.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+)?)\^([+\-]?[0-9]+|\{[+\-]?[0-9]+\})/); + + if (m && m[0]) { + return { + match_: m.splice(1), + remainder: input.substr(m[0].length) + }; + } + + return null; + }, + 'state of aggregation $': function stateOfAggregation$(input) { + // ... or crystal system + var a = mhchemParser.patterns.findObserveGroups(input, "", /^\([a-z]{1,3}(?=[\),])/, ")", ""); // (aq), (aq,$\infty$), (aq, sat) + + if (a && a.remainder.match(/^($|[\s,;\)\]\}])/)) { + return a; + } // AND end of 'phrase' + + + var m = input.match(/^(?:\((?:\\ca\s?)?\$[amothc]\$\))/); // OR crystal system ($o$) (\ca$c$) + + if (m) { + return { + match_: m[0], + remainder: input.substr(m[0].length) + }; + } + + return null; + }, + '_{(state of aggregation)}$': /^_\{(\([a-z]{1,3}\))\}/, + '{[(': /^(?:\\\{|\[|\()/, + ')]}': /^(?:\)|\]|\\\})/, + ', ': /^[,;]\s*/, + ',': /^[,;]/, + '.': /^[.]/, + '. ': /^([.\u22C5\u00B7\u2022])\s*/, + '...': /^\.\.\.(?=$|[^.])/, + '* ': /^([*])\s*/, + '^{(...)}': function _(input) { + return mhchemParser.patterns.findObserveGroups(input, "^{", "", "", "}"); + }, + '^($...$)': function $$(input) { + return mhchemParser.patterns.findObserveGroups(input, "^", "$", "$", ""); + }, + '^a': /^\^([0-9]+|[^\\_])/, + '^\\x{}{}': function x(input) { + return mhchemParser.patterns.findObserveGroups(input, "^", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true); + }, + '^\\x{}': function x(input) { + return mhchemParser.patterns.findObserveGroups(input, "^", /^\\[a-zA-Z]+\{/, "}", ""); + }, + '^\\x': /^\^(\\[a-zA-Z]+)\s*/, + '^(-1)': /^\^(-?\d+)/, + '\'': /^'/, + '_{(...)}': function _(input) { + return mhchemParser.patterns.findObserveGroups(input, "_{", "", "", "}"); + }, + '_($...$)': function _$$(input) { + return mhchemParser.patterns.findObserveGroups(input, "_", "$", "$", ""); + }, + '_9': /^_([+\-]?[0-9]+|[^\\])/, + '_\\x{}{}': function _X(input) { + return mhchemParser.patterns.findObserveGroups(input, "_", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true); + }, + '_\\x{}': function _X(input) { + return mhchemParser.patterns.findObserveGroups(input, "_", /^\\[a-zA-Z]+\{/, "}", ""); + }, + '_\\x': /^_(\\[a-zA-Z]+)\s*/, + '^_': /^(?:\^(?=_)|\_(?=\^)|[\^_]$)/, + '{}': /^\{\}/, + '{...}': function _(input) { + return mhchemParser.patterns.findObserveGroups(input, "", "{", "}", ""); + }, + '{(...)}': function _(input) { + return mhchemParser.patterns.findObserveGroups(input, "{", "", "", "}"); + }, + '$...$': function $$(input) { + return mhchemParser.patterns.findObserveGroups(input, "", "$", "$", ""); + }, + '${(...)}$': function $$(input) { + return mhchemParser.patterns.findObserveGroups(input, "${", "", "", "}$"); + }, + '$(...)$': function $$(input) { + return mhchemParser.patterns.findObserveGroups(input, "$", "", "", "$"); + }, + '=<>': /^[=<>]/, + '#': /^[#\u2261]/, + '+': /^\+/, + '-$': /^-(?=[\s_},;\]/]|$|\([a-z]+\))/, + // -space -, -; -] -/ -$ -state-of-aggregation + '-9': /^-(?=[0-9])/, + '- orbital overlap': /^-(?=(?:[spd]|sp)(?:$|[\s,;\)\]\}]))/, + '-': /^-/, + 'pm-operator': /^(?:\\pm|\$\\pm\$|\+-|\+\/-)/, + 'operator': /^(?:\+|(?:[\-=<>]|<<|>>|\\approx|\$\\approx\$)(?=\s|$|-?[0-9]))/, + 'arrowUpDown': /^(?:v|\(v\)|\^|\(\^\))(?=$|[\s,;\)\]\}])/, + '\\bond{(...)}': function bond(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\bond{", "", "", "}"); + }, + '->': /^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\u2192\u27F6\u21CC])/, + 'CMT': /^[CMT](?=\[)/, + '[(...)]': function _(input) { + return mhchemParser.patterns.findObserveGroups(input, "[", "", "", "]"); + }, + '1st-level escape': /^(&|\\\\|\\hline)\s*/, + '\\,': /^(?:\\[,\ ;:])/, + // \\x - but output no space before + '\\x{}{}': function x(input) { + return mhchemParser.patterns.findObserveGroups(input, "", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true); + }, + '\\x{}': function x(input) { + return mhchemParser.patterns.findObserveGroups(input, "", /^\\[a-zA-Z]+\{/, "}", ""); + }, + '\\ca': /^\\ca(?:\s+|(?![a-zA-Z]))/, + '\\x': /^(?:\\[a-zA-Z]+\s*|\\[_&{}%])/, + 'orbital': /^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/, + // only those with numbers in front, because the others will be formatted correctly anyway + 'others': /^[\/~|]/, + '\\frac{(...)}': function frac(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\frac{", "", "", "}", "{", "", "", "}"); + }, + '\\overset{(...)}': function overset(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\overset{", "", "", "}", "{", "", "", "}"); + }, + "\\underset{(...)}": function underset(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\underset{", "", "", "}", "{", "", "", "}"); + }, + "\\underbrace{(...)}": function underbrace(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\underbrace{", "", "", "}_", "{", "", "", "}"); + }, + '\\color{(...)}0': function color0(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\color{", "", "", "}"); + }, + '\\color{(...)}{(...)}1': function color1(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\color{", "", "", "}", "{", "", "", "}"); + }, + '\\color(...){(...)}2': function color2(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\color", "\\", "", /^(?=\{)/, "{", "", "", "}"); + }, + '\\ce{(...)}': function ce(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\ce{", "", "", "}"); + }, + 'oxidation$': /^(?:[+-][IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/, + 'd-oxidation$': /^(?:[+-]?\s?[IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/, + // 0 could be oxidation or charge + 'roman numeral': /^[IVX]+/, + '1/2$': /^[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+(?:\$[a-z]\$|[a-z])?$/, + 'amount': function amount(input) { + var match; // e.g. 2, 0.5, 1/2, -2, n/2, +; $a$ could be added later in parsing + + match = input.match(/^(?:(?:(?:\([+\-]?[0-9]+\/[0-9]+\)|[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+|[+\-]?[0-9]+[.,][0-9]+|[+\-]?\.[0-9]+|[+\-]?[0-9]+)(?:[a-z](?=\s*[A-Z]))?)|[+\-]?[a-z](?=\s*[A-Z])|\+(?!\s))/); + + if (match) { + return { + match_: match[0], + remainder: input.substr(match[0].length) + }; + } + + var a = mhchemParser.patterns.findObserveGroups(input, "", "$", "$", ""); + + if (a) { + // e.g. $2n-1$, $-$ + match = a.match_.match(/^\$(?:\(?[+\-]?(?:[0-9]*[a-z]?[+\-])?[0-9]*[a-z](?:[+\-][0-9]*[a-z]?)?\)?|\+|-)\$$/); + + if (match) { + return { + match_: match[0], + remainder: input.substr(match[0].length) + }; + } + } + + return null; + }, + 'amount2': function amount2(input) { + return this['amount'](input); + }, + '(KV letters),': /^(?:[A-Z][a-z]{0,2}|i)(?=,)/, + 'formula$': function formula$(input) { + if (input.match(/^\([a-z]+\)$/)) { + return null; + } // state of aggregation = no formula + + + var match = input.match(/^(?:[a-z]|(?:[0-9\ \+\-\,\.\(\)]+[a-z])+[0-9\ \+\-\,\.\(\)]*|(?:[a-z][0-9\ \+\-\,\.\(\)]+)+[a-z]?)$/); + + if (match) { + return { + match_: match[0], + remainder: input.substr(match[0].length) + }; + } + + return null; + }, + 'uprightEntities': /^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/, + '/': /^\s*(\/)\s*/, + '//': /^\s*(\/\/)\s*/, + '*': /^\s*[*.]\s*/ + }, + findObserveGroups: function findObserveGroups(input, begExcl, begIncl, endIncl, endExcl, beg2Excl, beg2Incl, end2Incl, end2Excl, combine) { + /** @type {{(input: string, pattern: string | RegExp): string | string[] | null;}} */ + var _match = function _match(input, pattern) { + if (typeof pattern === "string") { + if (input.indexOf(pattern) !== 0) { + return null; + } + + return pattern; + } else { + var match = input.match(pattern); + + if (!match) { + return null; + } + + return match[0]; + } + }; + /** @type {{(input: string, i: number, endChars: string | RegExp): {endMatchBegin: number, endMatchEnd: number} | null;}} */ + + + var _findObserveGroups = function _findObserveGroups(input, i, endChars) { + var braces = 0; + + while (i < input.length) { + var a = input.charAt(i); + + var match = _match(input.substr(i), endChars); + + if (match !== null && braces === 0) { + return { + endMatchBegin: i, + endMatchEnd: i + match.length + }; + } else if (a === "{") { + braces++; + } else if (a === "}") { + if (braces === 0) { + throw ["ExtraCloseMissingOpen", "Extra close brace or missing open brace"]; + } else { + braces--; + } + } + + i++; + } + + if (braces > 0) { + return null; + } + + return null; + }; + + var match = _match(input, begExcl); + + if (match === null) { + return null; + } + + input = input.substr(match.length); + match = _match(input, begIncl); + + if (match === null) { + return null; + } + + var e = _findObserveGroups(input, match.length, endIncl || endExcl); + + if (e === null) { + return null; + } + + var match1 = input.substring(0, endIncl ? e.endMatchEnd : e.endMatchBegin); + + if (!(beg2Excl || beg2Incl)) { + return { + match_: match1, + remainder: input.substr(e.endMatchEnd) + }; + } else { + var group2 = this.findObserveGroups(input.substr(e.endMatchEnd), beg2Excl, beg2Incl, end2Incl, end2Excl); + + if (group2 === null) { + return null; + } + /** @type {string[]} */ + + + var matchRet = [match1, group2.match_]; + return { + match_: combine ? matchRet.join("") : matchRet, + remainder: group2.remainder + }; + } + }, + // + // Matching function + // e.g. match("a", input) will look for the regexp called "a" and see if it matches + // returns null or {match_:"a", remainder:"bc"} + // + match_: function match_(m, input) { + var pattern = mhchemParser.patterns.patterns[m]; + + if (pattern === undefined) { + throw ["MhchemBugP", "mhchem bug P. Please report. (" + m + ")"]; // Trying to use non-existing pattern + } else if (typeof pattern === "function") { + return mhchemParser.patterns.patterns[m](input); // cannot use cached var pattern here, because some pattern functions need this===mhchemParser + } else { + // RegExp + var match = input.match(pattern); + + if (match) { + var mm; + + if (match[2]) { + mm = [match[1], match[2]]; + } else if (match[1]) { + mm = match[1]; + } else { + mm = match[0]; + } + + return { + match_: mm, + remainder: input.substr(match[0].length) + }; + } + + return null; + } + } + }, + // + // Generic state machine actions + // + actions: { + 'a=': function a(buffer, m) { + buffer.a = (buffer.a || "") + m; + }, + 'b=': function b(buffer, m) { + buffer.b = (buffer.b || "") + m; + }, + 'p=': function p(buffer, m) { + buffer.p = (buffer.p || "") + m; + }, + 'o=': function o(buffer, m) { + buffer.o = (buffer.o || "") + m; + }, + 'q=': function q(buffer, m) { + buffer.q = (buffer.q || "") + m; + }, + 'd=': function d(buffer, m) { + buffer.d = (buffer.d || "") + m; + }, + 'rm=': function rm(buffer, m) { + buffer.rm = (buffer.rm || "") + m; + }, + 'text=': function text(buffer, m) { + buffer.text_ = (buffer.text_ || "") + m; + }, + 'insert': function insert(buffer, m, a) { + return { + type_: a + }; + }, + 'insert+p1': function insertP1(buffer, m, a) { + return { + type_: a, + p1: m + }; + }, + 'insert+p1+p2': function insertP1P2(buffer, m, a) { + return { + type_: a, + p1: m[0], + p2: m[1] + }; + }, + 'copy': function copy(buffer, m) { + return m; + }, + 'rm': function rm(buffer, m) { + return { + type_: 'rm', + p1: m || "" + }; + }, + 'text': function text(buffer, m) { + return mhchemParser.go(m, 'text'); + }, + '{text}': function text(buffer, m) { + var ret = ["{"]; + mhchemParser.concatArray(ret, mhchemParser.go(m, 'text')); + ret.push("}"); + return ret; + }, + 'tex-math': function texMath(buffer, m) { + return mhchemParser.go(m, 'tex-math'); + }, + 'tex-math tight': function texMathTight(buffer, m) { + return mhchemParser.go(m, 'tex-math tight'); + }, + 'bond': function bond(buffer, m, k) { + return { + type_: 'bond', + kind_: k || m + }; + }, + 'color0-output': function color0Output(buffer, m) { + return { + type_: 'color0', + color: m[0] + }; + }, + 'ce': function ce(buffer, m) { + return mhchemParser.go(m); + }, + '1/2': function _(buffer, m) { + /** @type {ParserOutput[]} */ + var ret = []; + + if (m.match(/^[+\-]/)) { + ret.push(m.substr(0, 1)); + m = m.substr(1); + } + + var n = m.match(/^([0-9]+|\$[a-z]\$|[a-z])\/([0-9]+)(\$[a-z]\$|[a-z])?$/); + n[1] = n[1].replace(/\$/g, ""); + ret.push({ + type_: 'frac', + p1: n[1], + p2: n[2] + }); + + if (n[3]) { + n[3] = n[3].replace(/\$/g, ""); + ret.push({ + type_: 'tex-math', + p1: n[3] + }); + } + + return ret; + }, + '9,9': function _(buffer, m) { + return mhchemParser.go(m, '9,9'); + } + }, + // + // createTransitions + // convert { 'letter': { 'state': { action_: 'output' } } } to { 'state' => [ { pattern: 'letter', task: { action_: [{type_: 'output'}] } } ] } + // with expansion of 'a|b' to 'a' and 'b' (at 2 places) + // + createTransitions: function createTransitions(o) { + var pattern, state; + /** @type {string[]} */ + + var stateArray; + var i; // + // 1. Collect all states + // + + /** @type {Transitions} */ + + var transitions = {}; + + for (pattern in o) { + for (state in o[pattern]) { + stateArray = state.split("|"); + o[pattern][state].stateArray = stateArray; + + for (i = 0; i < stateArray.length; i++) { + transitions[stateArray[i]] = []; + } + } + } // + // 2. Fill states + // + + + for (pattern in o) { + for (state in o[pattern]) { + stateArray = o[pattern][state].stateArray || []; + + for (i = 0; i < stateArray.length; i++) { + // + // 2a. Normalize actions into array: 'text=' ==> [{type_:'text='}] + // (Note to myself: Resolving the function here would be problematic. It would need .bind (for *this*) and currying (for *option*).) + // + + /** @type {any} */ + var p = o[pattern][state]; + + if (p.action_) { + p.action_ = [].concat(p.action_); + + for (var k = 0; k < p.action_.length; k++) { + if (typeof p.action_[k] === "string") { + p.action_[k] = { + type_: p.action_[k] + }; + } + } + } else { + p.action_ = []; + } // + // 2.b Multi-insert + // + + + var patternArray = pattern.split("|"); + + for (var j = 0; j < patternArray.length; j++) { + if (stateArray[i] === '*') { + // insert into all + for (var t in transitions) { + transitions[t].push({ + pattern: patternArray[j], + task: p + }); + } + } else { + transitions[stateArray[i]].push({ + pattern: patternArray[j], + task: p + }); + } + } + } + } + } + + return transitions; + }, + stateMachines: {} +}; // +// Definition of state machines +// + +mhchemParser.stateMachines = { + // + // \ce state machines + // + //#region ce + 'ce': { + // main parser + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + 'else': { + '0|1|2': { + action_: 'beginsWithBond=false', + revisit: true, + toContinue: true + } + }, + 'oxidation$': { + '0': { + action_: 'oxidation-output' + } + }, + 'CMT': { + 'r': { + action_: 'rdt=', + nextState: 'rt' + }, + 'rd': { + action_: 'rqt=', + nextState: 'rdt' + } + }, + 'arrowUpDown': { + '0|1|2|as': { + action_: ['sb=false', 'output', 'operator'], + nextState: '1' + } + }, + 'uprightEntities': { + '0|1|2': { + action_: ['o=', 'output'], + nextState: '1' + } + }, + 'orbital': { + '0|1|2|3': { + action_: 'o=', + nextState: 'o' + } + }, + '->': { + '0|1|2|3': { + action_: 'r=', + nextState: 'r' + }, + 'a|as': { + action_: ['output', 'r='], + nextState: 'r' + }, + '*': { + action_: ['output', 'r='], + nextState: 'r' + } + }, + '+': { + 'o': { + action_: 'd= kv', + nextState: 'd' + }, + 'd|D': { + action_: 'd=', + nextState: 'd' + }, + 'q': { + action_: 'd=', + nextState: 'qd' + }, + 'qd|qD': { + action_: 'd=', + nextState: 'qd' + }, + 'dq': { + action_: ['output', 'd='], + nextState: 'd' + }, + '3': { + action_: ['sb=false', 'output', 'operator'], + nextState: '0' + } + }, + 'amount': { + '0|2': { + action_: 'a=', + nextState: 'a' + } + }, + 'pm-operator': { + '0|1|2|a|as': { + action_: ['sb=false', 'output', { + type_: 'operator', + option: '\\pm' + }], + nextState: '0' + } + }, + 'operator': { + '0|1|2|a|as': { + action_: ['sb=false', 'output', 'operator'], + nextState: '0' + } + }, + '-$': { + 'o|q': { + action_: ['charge or bond', 'output'], + nextState: 'qd' + }, + 'd': { + action_: 'd=', + nextState: 'd' + }, + 'D': { + action_: ['output', { + type_: 'bond', + option: "-" + }], + nextState: '3' + }, + 'q': { + action_: 'd=', + nextState: 'qd' + }, + 'qd': { + action_: 'd=', + nextState: 'qd' + }, + 'qD|dq': { + action_: ['output', { + type_: 'bond', + option: "-" + }], + nextState: '3' + } + }, + '-9': { + '3|o': { + action_: ['output', { + type_: 'insert', + option: 'hyphen' + }], + nextState: '3' + } + }, + '- orbital overlap': { + 'o': { + action_: ['output', { + type_: 'insert', + option: 'hyphen' + }], + nextState: '2' + }, + 'd': { + action_: ['output', { + type_: 'insert', + option: 'hyphen' + }], + nextState: '2' + } + }, + '-': { + '0|1|2': { + action_: [{ + type_: 'output', + option: 1 + }, 'beginsWithBond=true', { + type_: 'bond', + option: "-" + }], + nextState: '3' + }, + '3': { + action_: { + type_: 'bond', + option: "-" + } + }, + 'a': { + action_: ['output', { + type_: 'insert', + option: 'hyphen' + }], + nextState: '2' + }, + 'as': { + action_: [{ + type_: 'output', + option: 2 + }, { + type_: 'bond', + option: "-" + }], + nextState: '3' + }, + 'b': { + action_: 'b=' + }, + 'o': { + action_: { + type_: '- after o/d', + option: false + }, + nextState: '2' + }, + 'q': { + action_: { + type_: '- after o/d', + option: false + }, + nextState: '2' + }, + 'd|qd|dq': { + action_: { + type_: '- after o/d', + option: true + }, + nextState: '2' + }, + 'D|qD|p': { + action_: ['output', { + type_: 'bond', + option: "-" + }], + nextState: '3' + } + }, + 'amount2': { + '1|3': { + action_: 'a=', + nextState: 'a' + } + }, + 'letters': { + '0|1|2|3|a|as|b|p|bp|o': { + action_: 'o=', + nextState: 'o' + }, + 'q|dq': { + action_: ['output', 'o='], + nextState: 'o' + }, + 'd|D|qd|qD': { + action_: 'o after d', + nextState: 'o' + } + }, + 'digits': { + 'o': { + action_: 'q=', + nextState: 'q' + }, + 'd|D': { + action_: 'q=', + nextState: 'dq' + }, + 'q': { + action_: ['output', 'o='], + nextState: 'o' + }, + 'a': { + action_: 'o=', + nextState: 'o' + } + }, + 'space A': { + 'b|p|bp': {} + }, + 'space': { + 'a': { + nextState: 'as' + }, + '0': { + action_: 'sb=false' + }, + '1|2': { + action_: 'sb=true' + }, + 'r|rt|rd|rdt|rdq': { + action_: 'output', + nextState: '0' + }, + '*': { + action_: ['output', 'sb=true'], + nextState: '1' + } + }, + '1st-level escape': { + '1|2': { + action_: ['output', { + type_: 'insert+p1', + option: '1st-level escape' + }] + }, + '*': { + action_: ['output', { + type_: 'insert+p1', + option: '1st-level escape' + }], + nextState: '0' + } + }, + '[(...)]': { + 'r|rt': { + action_: 'rd=', + nextState: 'rd' + }, + 'rd|rdt': { + action_: 'rq=', + nextState: 'rdq' + } + }, + '...': { + 'o|d|D|dq|qd|qD': { + action_: ['output', { + type_: 'bond', + option: "..." + }], + nextState: '3' + }, + '*': { + action_: [{ + type_: 'output', + option: 1 + }, { + type_: 'insert', + option: 'ellipsis' + }], + nextState: '1' + } + }, + '. |* ': { + '*': { + action_: ['output', { + type_: 'insert', + option: 'addition compound' + }], + nextState: '1' + } + }, + 'state of aggregation $': { + '*': { + action_: ['output', 'state of aggregation'], + nextState: '1' + } + }, + '{[(': { + 'a|as|o': { + action_: ['o=', 'output', 'parenthesisLevel++'], + nextState: '2' + }, + '0|1|2|3': { + action_: ['o=', 'output', 'parenthesisLevel++'], + nextState: '2' + }, + '*': { + action_: ['output', 'o=', 'output', 'parenthesisLevel++'], + nextState: '2' + } + }, + ')]}': { + '0|1|2|3|b|p|bp|o': { + action_: ['o=', 'parenthesisLevel--'], + nextState: 'o' + }, + 'a|as|d|D|q|qd|qD|dq': { + action_: ['output', 'o=', 'parenthesisLevel--'], + nextState: 'o' + } + }, + ', ': { + '*': { + action_: ['output', 'comma'], + nextState: '0' + } + }, + '^_': { + // ^ and _ without a sensible argument + '*': {} + }, + '^{(...)}|^($...$)': { + '0|1|2|as': { + action_: 'b=', + nextState: 'b' + }, + 'p': { + action_: 'b=', + nextState: 'bp' + }, + '3|o': { + action_: 'd= kv', + nextState: 'D' + }, + 'q': { + action_: 'd=', + nextState: 'qD' + }, + 'd|D|qd|qD|dq': { + action_: ['output', 'd='], + nextState: 'D' + } + }, + '^a|^\\x{}{}|^\\x{}|^\\x|\'': { + '0|1|2|as': { + action_: 'b=', + nextState: 'b' + }, + 'p': { + action_: 'b=', + nextState: 'bp' + }, + '3|o': { + action_: 'd= kv', + nextState: 'd' + }, + 'q': { + action_: 'd=', + nextState: 'qd' + }, + 'd|qd|D|qD': { + action_: 'd=' + }, + 'dq': { + action_: ['output', 'd='], + nextState: 'd' + } + }, + '_{(state of aggregation)}$': { + 'd|D|q|qd|qD|dq': { + action_: ['output', 'q='], + nextState: 'q' + } + }, + '_{(...)}|_($...$)|_9|_\\x{}{}|_\\x{}|_\\x': { + '0|1|2|as': { + action_: 'p=', + nextState: 'p' + }, + 'b': { + action_: 'p=', + nextState: 'bp' + }, + '3|o': { + action_: 'q=', + nextState: 'q' + }, + 'd|D': { + action_: 'q=', + nextState: 'dq' + }, + 'q|qd|qD|dq': { + action_: ['output', 'q='], + nextState: 'q' + } + }, + '=<>': { + '0|1|2|3|a|as|o|q|d|D|qd|qD|dq': { + action_: [{ + type_: 'output', + option: 2 + }, 'bond'], + nextState: '3' + } + }, + '#': { + '0|1|2|3|a|as|o': { + action_: [{ + type_: 'output', + option: 2 + }, { + type_: 'bond', + option: "#" + }], + nextState: '3' + } + }, + '{}': { + '*': { + action_: { + type_: 'output', + option: 1 + }, + nextState: '1' + } + }, + '{...}': { + '0|1|2|3|a|as|b|p|bp': { + action_: 'o=', + nextState: 'o' + }, + 'o|d|D|q|qd|qD|dq': { + action_: ['output', 'o='], + nextState: 'o' + } + }, + '$...$': { + 'a': { + action_: 'a=' + }, + // 2$n$ + '0|1|2|3|as|b|p|bp|o': { + action_: 'o=', + nextState: 'o' + }, + // not 'amount' + 'as|o': { + action_: 'o=' + }, + 'q|d|D|qd|qD|dq': { + action_: ['output', 'o='], + nextState: 'o' + } + }, + '\\bond{(...)}': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'bond'], + nextState: "3" + } + }, + '\\frac{(...)}': { + '*': { + action_: [{ + type_: 'output', + option: 1 + }, 'frac-output'], + nextState: '3' + } + }, + '\\overset{(...)}': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'overset-output'], + nextState: '3' + } + }, + "\\underset{(...)}": { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'underset-output'], + nextState: '3' + } + }, + "\\underbrace{(...)}": { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'underbrace-output'], + nextState: '3' + } + }, + '\\color{(...)}{(...)}1|\\color(...){(...)}2': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'color-output'], + nextState: '3' + } + }, + '\\color{(...)}0': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'color0-output'] + } + }, + '\\ce{(...)}': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'ce'], + nextState: '3' + } + }, + '\\,': { + '*': { + action_: [{ + type_: 'output', + option: 1 + }, 'copy'], + nextState: '1' + } + }, + '\\x{}{}|\\x{}|\\x': { + '0|1|2|3|a|as|b|p|bp|o|c0': { + action_: ['o=', 'output'], + nextState: '3' + }, + '*': { + action_: ['output', 'o=', 'output'], + nextState: '3' + } + }, + 'others': { + '*': { + action_: [{ + type_: 'output', + option: 1 + }, 'copy'], + nextState: '3' + } + }, + 'else2': { + 'a': { + action_: 'a to o', + nextState: 'o', + revisit: true + }, + 'as': { + action_: ['output', 'sb=true'], + nextState: '1', + revisit: true + }, + 'r|rt|rd|rdt|rdq': { + action_: ['output'], + nextState: '0', + revisit: true + }, + '*': { + action_: ['output', 'copy'], + nextState: '3' + } + } + }), + actions: { + 'o after d': function oAfterD(buffer, m) { + var ret; + + if ((buffer.d || "").match(/^[0-9]+$/)) { + var tmp = buffer.d; + buffer.d = undefined; + ret = this['output'](buffer); + buffer.b = tmp; + } else { + ret = this['output'](buffer); + } + + mhchemParser.actions['o='](buffer, m); + return ret; + }, + 'd= kv': function dKv(buffer, m) { + buffer.d = m; + buffer.dType = 'kv'; + }, + 'charge or bond': function chargeOrBond(buffer, m) { + if (buffer['beginsWithBond']) { + /** @type {ParserOutput[]} */ + var ret = []; + mhchemParser.concatArray(ret, this['output'](buffer)); + mhchemParser.concatArray(ret, mhchemParser.actions['bond'](buffer, m, "-")); + return ret; + } else { + buffer.d = m; + } + }, + '- after o/d': function afterOD(buffer, m, isAfterD) { + var c1 = mhchemParser.patterns.match_('orbital', buffer.o || ""); + var c2 = mhchemParser.patterns.match_('one lowercase greek letter $', buffer.o || ""); + var c3 = mhchemParser.patterns.match_('one lowercase latin letter $', buffer.o || ""); + var c4 = mhchemParser.patterns.match_('$one lowercase latin letter$ $', buffer.o || ""); + var hyphenFollows = m === "-" && (c1 && c1.remainder === "" || c2 || c3 || c4); + + if (hyphenFollows && !buffer.a && !buffer.b && !buffer.p && !buffer.d && !buffer.q && !c1 && c3) { + buffer.o = '$' + buffer.o + '$'; + } + /** @type {ParserOutput[]} */ + + + var ret = []; + + if (hyphenFollows) { + mhchemParser.concatArray(ret, this['output'](buffer)); + ret.push({ + type_: 'hyphen' + }); + } else { + c1 = mhchemParser.patterns.match_('digits', buffer.d || ""); + + if (isAfterD && c1 && c1.remainder === '') { + mhchemParser.concatArray(ret, mhchemParser.actions['d='](buffer, m)); + mhchemParser.concatArray(ret, this['output'](buffer)); + } else { + mhchemParser.concatArray(ret, this['output'](buffer)); + mhchemParser.concatArray(ret, mhchemParser.actions['bond'](buffer, m, "-")); + } + } + + return ret; + }, + 'a to o': function aToO(buffer) { + buffer.o = buffer.a; + buffer.a = undefined; + }, + 'sb=true': function sbTrue(buffer) { + buffer.sb = true; + }, + 'sb=false': function sbFalse(buffer) { + buffer.sb = false; + }, + 'beginsWithBond=true': function beginsWithBondTrue(buffer) { + buffer['beginsWithBond'] = true; + }, + 'beginsWithBond=false': function beginsWithBondFalse(buffer) { + buffer['beginsWithBond'] = false; + }, + 'parenthesisLevel++': function parenthesisLevel(buffer) { + buffer['parenthesisLevel']++; + }, + 'parenthesisLevel--': function parenthesisLevel(buffer) { + buffer['parenthesisLevel']--; + }, + 'state of aggregation': function stateOfAggregation(buffer, m) { + return { + type_: 'state of aggregation', + p1: mhchemParser.go(m, 'o') + }; + }, + 'comma': function comma(buffer, m) { + var a = m.replace(/\s*$/, ''); + var withSpace = a !== m; + + if (withSpace && buffer['parenthesisLevel'] === 0) { + return { + type_: 'comma enumeration L', + p1: a + }; + } else { + return { + type_: 'comma enumeration M', + p1: a + }; + } + }, + 'output': function output(buffer, m, entityFollows) { + // entityFollows: + // undefined = if we have nothing else to output, also ignore the just read space (buffer.sb) + // 1 = an entity follows, never omit the space if there was one just read before (can only apply to state 1) + // 2 = 1 + the entity can have an amount, so output a\, instead of converting it to o (can only apply to states a|as) + + /** @type {ParserOutput | ParserOutput[]} */ + var ret; + + if (!buffer.r) { + ret = []; + + if (!buffer.a && !buffer.b && !buffer.p && !buffer.o && !buffer.q && !buffer.d && !entityFollows) {//ret = []; + } else { + if (buffer.sb) { + ret.push({ + type_: 'entitySkip' + }); + } + + if (!buffer.o && !buffer.q && !buffer.d && !buffer.b && !buffer.p && entityFollows !== 2) { + buffer.o = buffer.a; + buffer.a = undefined; + } else if (!buffer.o && !buffer.q && !buffer.d && (buffer.b || buffer.p)) { + buffer.o = buffer.a; + buffer.d = buffer.b; + buffer.q = buffer.p; + buffer.a = buffer.b = buffer.p = undefined; + } else { + if (buffer.o && buffer.dType === 'kv' && mhchemParser.patterns.match_('d-oxidation$', buffer.d || "")) { + buffer.dType = 'oxidation'; + } else if (buffer.o && buffer.dType === 'kv' && !buffer.q) { + buffer.dType = undefined; + } + } + + ret.push({ + type_: 'chemfive', + a: mhchemParser.go(buffer.a, 'a'), + b: mhchemParser.go(buffer.b, 'bd'), + p: mhchemParser.go(buffer.p, 'pq'), + o: mhchemParser.go(buffer.o, 'o'), + q: mhchemParser.go(buffer.q, 'pq'), + d: mhchemParser.go(buffer.d, buffer.dType === 'oxidation' ? 'oxidation' : 'bd'), + dType: buffer.dType + }); + } + } else { + // r + + /** @type {ParserOutput[]} */ + var rd; + + if (buffer.rdt === 'M') { + rd = mhchemParser.go(buffer.rd, 'tex-math'); + } else if (buffer.rdt === 'T') { + rd = [{ + type_: 'text', + p1: buffer.rd || "" + }]; + } else { + rd = mhchemParser.go(buffer.rd); + } + /** @type {ParserOutput[]} */ + + + var rq; + + if (buffer.rqt === 'M') { + rq = mhchemParser.go(buffer.rq, 'tex-math'); + } else if (buffer.rqt === 'T') { + rq = [{ + type_: 'text', + p1: buffer.rq || "" + }]; + } else { + rq = mhchemParser.go(buffer.rq); + } + + ret = { + type_: 'arrow', + r: buffer.r, + rd: rd, + rq: rq + }; + } + + for (var p in buffer) { + if (p !== 'parenthesisLevel' && p !== 'beginsWithBond') { + delete buffer[p]; + } + } + + return ret; + }, + 'oxidation-output': function oxidationOutput(buffer, m) { + var ret = ["{"]; + mhchemParser.concatArray(ret, mhchemParser.go(m, 'oxidation')); + ret.push("}"); + return ret; + }, + 'frac-output': function fracOutput(buffer, m) { + return { + type_: 'frac-ce', + p1: mhchemParser.go(m[0]), + p2: mhchemParser.go(m[1]) + }; + }, + 'overset-output': function oversetOutput(buffer, m) { + return { + type_: 'overset', + p1: mhchemParser.go(m[0]), + p2: mhchemParser.go(m[1]) + }; + }, + 'underset-output': function undersetOutput(buffer, m) { + return { + type_: 'underset', + p1: mhchemParser.go(m[0]), + p2: mhchemParser.go(m[1]) + }; + }, + 'underbrace-output': function underbraceOutput(buffer, m) { + return { + type_: 'underbrace', + p1: mhchemParser.go(m[0]), + p2: mhchemParser.go(m[1]) + }; + }, + 'color-output': function colorOutput(buffer, m) { + return { + type_: 'color', + color1: m[0], + color2: mhchemParser.go(m[1]) + }; + }, + 'r=': function r(buffer, m) { + buffer.r = m; + }, + 'rdt=': function rdt(buffer, m) { + buffer.rdt = m; + }, + 'rd=': function rd(buffer, m) { + buffer.rd = m; + }, + 'rqt=': function rqt(buffer, m) { + buffer.rqt = m; + }, + 'rq=': function rq(buffer, m) { + buffer.rq = m; + }, + 'operator': function operator(buffer, m, p1) { + return { + type_: 'operator', + kind_: p1 || m + }; + } + } + }, + 'a': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + '1/2$': { + '0': { + action_: '1/2' + } + }, + 'else': { + '0': { + nextState: '1', + revisit: true + } + }, + '$(...)$': { + '*': { + action_: 'tex-math tight', + nextState: '1' + } + }, + ',': { + '*': { + action_: { + type_: 'insert', + option: 'commaDecimal' + } + } + }, + 'else2': { + '*': { + action_: 'copy' + } + } + }), + actions: {} + }, + 'o': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + '1/2$': { + '0': { + action_: '1/2' + } + }, + 'else': { + '0': { + nextState: '1', + revisit: true + } + }, + 'letters': { + '*': { + action_: 'rm' + } + }, + '\\ca': { + '*': { + action_: { + type_: 'insert', + option: 'circa' + } + } + }, + '\\x{}{}|\\x{}|\\x': { + '*': { + action_: 'copy' + } + }, + '${(...)}$|$(...)$': { + '*': { + action_: 'tex-math' + } + }, + '{(...)}': { + '*': { + action_: '{text}' + } + }, + 'else2': { + '*': { + action_: 'copy' + } + } + }), + actions: {} + }, + 'text': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + '{...}': { + '*': { + action_: 'text=' + } + }, + '${(...)}$|$(...)$': { + '*': { + action_: 'tex-math' + } + }, + '\\greek': { + '*': { + action_: ['output', 'rm'] + } + }, + '\\,|\\x{}{}|\\x{}|\\x': { + '*': { + action_: ['output', 'copy'] + } + }, + 'else': { + '*': { + action_: 'text=' + } + } + }), + actions: { + 'output': function output(buffer) { + if (buffer.text_) { + /** @type {ParserOutput} */ + var ret = { + type_: 'text', + p1: buffer.text_ + }; + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + } + }, + 'pq': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + 'state of aggregation $': { + '*': { + action_: 'state of aggregation' + } + }, + 'i$': { + '0': { + nextState: '!f', + revisit: true + } + }, + '(KV letters),': { + '0': { + action_: 'rm', + nextState: '0' + } + }, + 'formula$': { + '0': { + nextState: 'f', + revisit: true + } + }, + '1/2$': { + '0': { + action_: '1/2' + } + }, + 'else': { + '0': { + nextState: '!f', + revisit: true + } + }, + '${(...)}$|$(...)$': { + '*': { + action_: 'tex-math' + } + }, + '{(...)}': { + '*': { + action_: 'text' + } + }, + 'a-z': { + 'f': { + action_: 'tex-math' + } + }, + 'letters': { + '*': { + action_: 'rm' + } + }, + '-9.,9': { + '*': { + action_: '9,9' + } + }, + ',': { + '*': { + action_: { + type_: 'insert+p1', + option: 'comma enumeration S' + } + } + }, + '\\color{(...)}{(...)}1|\\color(...){(...)}2': { + '*': { + action_: 'color-output' + } + }, + '\\color{(...)}0': { + '*': { + action_: 'color0-output' + } + }, + '\\ce{(...)}': { + '*': { + action_: 'ce' + } + }, + '\\,|\\x{}{}|\\x{}|\\x': { + '*': { + action_: 'copy' + } + }, + 'else2': { + '*': { + action_: 'copy' + } + } + }), + actions: { + 'state of aggregation': function stateOfAggregation(buffer, m) { + return { + type_: 'state of aggregation subscript', + p1: mhchemParser.go(m, 'o') + }; + }, + 'color-output': function colorOutput(buffer, m) { + return { + type_: 'color', + color1: m[0], + color2: mhchemParser.go(m[1], 'pq') + }; + } + } + }, + 'bd': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + 'x$': { + '0': { + nextState: '!f', + revisit: true + } + }, + 'formula$': { + '0': { + nextState: 'f', + revisit: true + } + }, + 'else': { + '0': { + nextState: '!f', + revisit: true + } + }, + '-9.,9 no missing 0': { + '*': { + action_: '9,9' + } + }, + '.': { + '*': { + action_: { + type_: 'insert', + option: 'electron dot' + } + } + }, + 'a-z': { + 'f': { + action_: 'tex-math' + } + }, + 'x': { + '*': { + action_: { + type_: 'insert', + option: 'KV x' + } + } + }, + 'letters': { + '*': { + action_: 'rm' + } + }, + '\'': { + '*': { + action_: { + type_: 'insert', + option: 'prime' + } + } + }, + '${(...)}$|$(...)$': { + '*': { + action_: 'tex-math' + } + }, + '{(...)}': { + '*': { + action_: 'text' + } + }, + '\\color{(...)}{(...)}1|\\color(...){(...)}2': { + '*': { + action_: 'color-output' + } + }, + '\\color{(...)}0': { + '*': { + action_: 'color0-output' + } + }, + '\\ce{(...)}': { + '*': { + action_: 'ce' + } + }, + '\\,|\\x{}{}|\\x{}|\\x': { + '*': { + action_: 'copy' + } + }, + 'else2': { + '*': { + action_: 'copy' + } + } + }), + actions: { + 'color-output': function colorOutput(buffer, m) { + return { + type_: 'color', + color1: m[0], + color2: mhchemParser.go(m[1], 'bd') + }; + } + } + }, + 'oxidation': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + 'roman numeral': { + '*': { + action_: 'roman-numeral' + } + }, + '${(...)}$|$(...)$': { + '*': { + action_: 'tex-math' + } + }, + 'else': { + '*': { + action_: 'copy' + } + } + }), + actions: { + 'roman-numeral': function romanNumeral(buffer, m) { + return { + type_: 'roman numeral', + p1: m || "" + }; + } + } + }, + 'tex-math': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + '\\ce{(...)}': { + '*': { + action_: ['output', 'ce'] + } + }, + '{...}|\\,|\\x{}{}|\\x{}|\\x': { + '*': { + action_: 'o=' + } + }, + 'else': { + '*': { + action_: 'o=' + } + } + }), + actions: { + 'output': function output(buffer) { + if (buffer.o) { + /** @type {ParserOutput} */ + var ret = { + type_: 'tex-math', + p1: buffer.o + }; + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + } + }, + 'tex-math tight': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + '\\ce{(...)}': { + '*': { + action_: ['output', 'ce'] + } + }, + '{...}|\\,|\\x{}{}|\\x{}|\\x': { + '*': { + action_: 'o=' + } + }, + '-|+': { + '*': { + action_: 'tight operator' + } + }, + 'else': { + '*': { + action_: 'o=' + } + } + }), + actions: { + 'tight operator': function tightOperator(buffer, m) { + buffer.o = (buffer.o || "") + "{" + m + "}"; + }, + 'output': function output(buffer) { + if (buffer.o) { + /** @type {ParserOutput} */ + var ret = { + type_: 'tex-math', + p1: buffer.o + }; + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + } + }, + '9,9': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + ',': { + '*': { + action_: 'comma' + } + }, + 'else': { + '*': { + action_: 'copy' + } + } + }), + actions: { + 'comma': function comma() { + return { + type_: 'commaDecimal' + }; + } + } + }, + //#endregion + // + // \pu state machines + // + //#region pu + 'pu': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + 'space$': { + '*': { + action_: ['output', 'space'] + } + }, + '{[(|)]}': { + '0|a': { + action_: 'copy' + } + }, + '(-)(9)^(-9)': { + '0': { + action_: 'number^', + nextState: 'a' + } + }, + '(-)(9.,9)(e)(99)': { + '0': { + action_: 'enumber', + nextState: 'a' + } + }, + 'space': { + '0|a': {} + }, + 'pm-operator': { + '0|a': { + action_: { + type_: 'operator', + option: '\\pm' + }, + nextState: '0' + } + }, + 'operator': { + '0|a': { + action_: 'copy', + nextState: '0' + } + }, + '//': { + 'd': { + action_: 'o=', + nextState: '/' + } + }, + '/': { + 'd': { + action_: 'o=', + nextState: '/' + } + }, + '{...}|else': { + '0|d': { + action_: 'd=', + nextState: 'd' + }, + 'a': { + action_: ['space', 'd='], + nextState: 'd' + }, + '/|q': { + action_: 'q=', + nextState: 'q' + } + } + }), + actions: { + 'enumber': function enumber(buffer, m) { + /** @type {ParserOutput[]} */ + var ret = []; + + if (m[0] === "+-" || m[0] === "+/-") { + ret.push("\\pm "); + } else if (m[0]) { + ret.push(m[0]); + } + + if (m[1]) { + mhchemParser.concatArray(ret, mhchemParser.go(m[1], 'pu-9,9')); + + if (m[2]) { + if (m[2].match(/[,.]/)) { + mhchemParser.concatArray(ret, mhchemParser.go(m[2], 'pu-9,9')); + } else { + ret.push(m[2]); + } + } + + m[3] = m[4] || m[3]; + + if (m[3]) { + m[3] = m[3].trim(); + + if (m[3] === "e" || m[3].substr(0, 1) === "*") { + ret.push({ + type_: 'cdot' + }); + } else { + ret.push({ + type_: 'times' + }); + } + } + } + + if (m[3]) { + ret.push("10^{" + m[5] + "}"); + } + + return ret; + }, + 'number^': function number(buffer, m) { + /** @type {ParserOutput[]} */ + var ret = []; + + if (m[0] === "+-" || m[0] === "+/-") { + ret.push("\\pm "); + } else if (m[0]) { + ret.push(m[0]); + } + + mhchemParser.concatArray(ret, mhchemParser.go(m[1], 'pu-9,9')); + ret.push("^{" + m[2] + "}"); + return ret; + }, + 'operator': function operator(buffer, m, p1) { + return { + type_: 'operator', + kind_: p1 || m + }; + }, + 'space': function space() { + return { + type_: 'pu-space-1' + }; + }, + 'output': function output(buffer) { + /** @type {ParserOutput | ParserOutput[]} */ + var ret; + var md = mhchemParser.patterns.match_('{(...)}', buffer.d || ""); + + if (md && md.remainder === '') { + buffer.d = md.match_; + } + + var mq = mhchemParser.patterns.match_('{(...)}', buffer.q || ""); + + if (mq && mq.remainder === '') { + buffer.q = mq.match_; + } + + if (buffer.d) { + buffer.d = buffer.d.replace(/\u00B0C|\^oC|\^{o}C/g, "{}^{\\circ}C"); + buffer.d = buffer.d.replace(/\u00B0F|\^oF|\^{o}F/g, "{}^{\\circ}F"); + } + + if (buffer.q) { + // fraction + buffer.q = buffer.q.replace(/\u00B0C|\^oC|\^{o}C/g, "{}^{\\circ}C"); + buffer.q = buffer.q.replace(/\u00B0F|\^oF|\^{o}F/g, "{}^{\\circ}F"); + var b5 = { + d: mhchemParser.go(buffer.d, 'pu'), + q: mhchemParser.go(buffer.q, 'pu') + }; + + if (buffer.o === '//') { + ret = { + type_: 'pu-frac', + p1: b5.d, + p2: b5.q + }; + } else { + ret = b5.d; + + if (b5.d.length > 1 || b5.q.length > 1) { + ret.push({ + type_: ' / ' + }); + } else { + ret.push({ + type_: '/' + }); + } + + mhchemParser.concatArray(ret, b5.q); + } + } else { + // no fraction + ret = mhchemParser.go(buffer.d, 'pu-2'); + } + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + }, + 'pu-2': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + '*': { + '*': { + action_: ['output', 'cdot'], + nextState: '0' + } + }, + '\\x': { + '*': { + action_: 'rm=' + } + }, + 'space': { + '*': { + action_: ['output', 'space'], + nextState: '0' + } + }, + '^{(...)}|^(-1)': { + '1': { + action_: '^(-1)' + } + }, + '-9.,9': { + '0': { + action_: 'rm=', + nextState: '0' + }, + '1': { + action_: '^(-1)', + nextState: '0' + } + }, + '{...}|else': { + '*': { + action_: 'rm=', + nextState: '1' + } + } + }), + actions: { + 'cdot': function cdot() { + return { + type_: 'tight cdot' + }; + }, + '^(-1)': function _(buffer, m) { + buffer.rm += "^{" + m + "}"; + }, + 'space': function space() { + return { + type_: 'pu-space-2' + }; + }, + 'output': function output(buffer) { + /** @type {ParserOutput | ParserOutput[]} */ + var ret = []; + + if (buffer.rm) { + var mrm = mhchemParser.patterns.match_('{(...)}', buffer.rm || ""); + + if (mrm && mrm.remainder === '') { + ret = mhchemParser.go(mrm.match_, 'pu'); + } else { + ret = { + type_: 'rm', + p1: buffer.rm + }; + } + } + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + }, + 'pu-9,9': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '0': { + action_: 'output-0' + }, + 'o': { + action_: 'output-o' + } + }, + ',': { + '0': { + action_: ['output-0', 'comma'], + nextState: 'o' + } + }, + '.': { + '0': { + action_: ['output-0', 'copy'], + nextState: 'o' + } + }, + 'else': { + '*': { + action_: 'text=' + } + } + }), + actions: { + 'comma': function comma() { + return { + type_: 'commaDecimal' + }; + }, + 'output-0': function output0(buffer) { + /** @type {ParserOutput[]} */ + var ret = []; + buffer.text_ = buffer.text_ || ""; + + if (buffer.text_.length > 4) { + var a = buffer.text_.length % 3; + + if (a === 0) { + a = 3; + } + + for (var i = buffer.text_.length - 3; i > 0; i -= 3) { + ret.push(buffer.text_.substr(i, 3)); + ret.push({ + type_: '1000 separator' + }); + } + + ret.push(buffer.text_.substr(0, a)); + ret.reverse(); + } else { + ret.push(buffer.text_); + } + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + }, + 'output-o': function outputO(buffer) { + /** @type {ParserOutput[]} */ + var ret = []; + buffer.text_ = buffer.text_ || ""; + + if (buffer.text_.length > 4) { + var a = buffer.text_.length - 3; + + for (var i = 0; i < a; i += 3) { + ret.push(buffer.text_.substr(i, 3)); + ret.push({ + type_: '1000 separator' + }); + } + + ret.push(buffer.text_.substr(i)); + } else { + ret.push(buffer.text_); + } + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } //#endregion + + } +}; // +// texify: Take MhchemParser output and convert it to TeX +// + +/** @type {Texify} */ + +var texify = { + go: function go(input, isInner) { + // (recursive, max 4 levels) + if (!input) { + return ""; + } + + var res = ""; + var cee = false; + + for (var i = 0; i < input.length; i++) { + var inputi = input[i]; + + if (typeof inputi === "string") { + res += inputi; + } else { + res += texify._go2(inputi); + + if (inputi.type_ === '1st-level escape') { + cee = true; + } + } + } + + if (!isInner && !cee && res) { + res = "{" + res + "}"; + } + + return res; + }, + _goInner: function _goInner(input) { + if (!input) { + return input; + } + + return texify.go(input, true); + }, + _go2: function _go2(buf) { + /** @type {undefined | string} */ + var res; + + switch (buf.type_) { + case 'chemfive': + res = ""; + var b5 = { + a: texify._goInner(buf.a), + b: texify._goInner(buf.b), + p: texify._goInner(buf.p), + o: texify._goInner(buf.o), + q: texify._goInner(buf.q), + d: texify._goInner(buf.d) + }; // + // a + // + + if (b5.a) { + if (b5.a.match(/^[+\-]/)) { + b5.a = "{" + b5.a + "}"; + } + + res += b5.a + "\\,"; + } // + // b and p + // + + + if (b5.b || b5.p) { + res += "{\\vphantom{X}}"; + res += "^{\\hphantom{" + (b5.b || "") + "}}_{\\hphantom{" + (b5.p || "") + "}}"; + res += "{\\vphantom{X}}"; + res += "^{\\smash[t]{\\vphantom{2}}\\mathllap{" + (b5.b || "") + "}}"; + res += "_{\\vphantom{2}\\mathllap{\\smash[t]{" + (b5.p || "") + "}}}"; + } // + // o + // + + + if (b5.o) { + if (b5.o.match(/^[+\-]/)) { + b5.o = "{" + b5.o + "}"; + } + + res += b5.o; + } // + // q and d + // + + + if (buf.dType === 'kv') { + if (b5.d || b5.q) { + res += "{\\vphantom{X}}"; + } + + if (b5.d) { + res += "^{" + b5.d + "}"; + } + + if (b5.q) { + res += "_{\\smash[t]{" + b5.q + "}}"; + } + } else if (buf.dType === 'oxidation') { + if (b5.d) { + res += "{\\vphantom{X}}"; + res += "^{" + b5.d + "}"; + } + + if (b5.q) { + res += "{\\vphantom{X}}"; + res += "_{\\smash[t]{" + b5.q + "}}"; + } + } else { + if (b5.q) { + res += "{\\vphantom{X}}"; + res += "_{\\smash[t]{" + b5.q + "}}"; + } + + if (b5.d) { + res += "{\\vphantom{X}}"; + res += "^{" + b5.d + "}"; + } + } + + break; + + case 'rm': + res = "\\mathrm{" + buf.p1 + "}"; + break; + + case 'text': + if (buf.p1.match(/[\^_]/)) { + buf.p1 = buf.p1.replace(" ", "~").replace("-", "\\text{-}"); + res = "\\mathrm{" + buf.p1 + "}"; + } else { + res = "\\text{" + buf.p1 + "}"; + } + + break; + + case 'roman numeral': + res = "\\mathrm{" + buf.p1 + "}"; + break; + + case 'state of aggregation': + res = "\\mskip2mu " + texify._goInner(buf.p1); + break; + + case 'state of aggregation subscript': + res = "\\mskip1mu " + texify._goInner(buf.p1); + break; + + case 'bond': + res = texify._getBond(buf.kind_); + + if (!res) { + throw ["MhchemErrorBond", "mhchem Error. Unknown bond type (" + buf.kind_ + ")"]; + } + + break; + + case 'frac': + var c = "\\frac{" + buf.p1 + "}{" + buf.p2 + "}"; + res = "\\mathchoice{\\textstyle" + c + "}{" + c + "}{" + c + "}{" + c + "}"; + break; + + case 'pu-frac': + var d = "\\frac{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; + res = "\\mathchoice{\\textstyle" + d + "}{" + d + "}{" + d + "}{" + d + "}"; + break; + + case 'tex-math': + res = buf.p1 + " "; + break; + + case 'frac-ce': + res = "\\frac{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; + break; + + case 'overset': + res = "\\overset{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; + break; + + case 'underset': + res = "\\underset{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; + break; + + case 'underbrace': + res = "\\underbrace{" + texify._goInner(buf.p1) + "}_{" + texify._goInner(buf.p2) + "}"; + break; + + case 'color': + res = "{\\color{" + buf.color1 + "}{" + texify._goInner(buf.color2) + "}}"; + break; + + case 'color0': + res = "\\color{" + buf.color + "}"; + break; + + case 'arrow': + var b6 = { + rd: texify._goInner(buf.rd), + rq: texify._goInner(buf.rq) + }; + + var arrow = "\\x" + texify._getArrow(buf.r); + + if (b6.rq) { + arrow += "[{" + b6.rq + "}]"; + } + + if (b6.rd) { + arrow += "{" + b6.rd + "}"; + } else { + arrow += "{}"; + } + + res = arrow; + break; + + case 'operator': + res = texify._getOperator(buf.kind_); + break; + + case '1st-level escape': + res = buf.p1 + " "; // &, \\\\, \\hlin + + break; + + case 'space': + res = " "; + break; + + case 'entitySkip': + res = "~"; + break; + + case 'pu-space-1': + res = "~"; + break; + + case 'pu-space-2': + res = "\\mkern3mu "; + break; + + case '1000 separator': + res = "\\mkern2mu "; + break; + + case 'commaDecimal': + res = "{,}"; + break; + + case 'comma enumeration L': + res = "{" + buf.p1 + "}\\mkern6mu "; + break; + + case 'comma enumeration M': + res = "{" + buf.p1 + "}\\mkern3mu "; + break; + + case 'comma enumeration S': + res = "{" + buf.p1 + "}\\mkern1mu "; + break; + + case 'hyphen': + res = "\\text{-}"; + break; + + case 'addition compound': + res = "\\,{\\cdot}\\,"; + break; + + case 'electron dot': + res = "\\mkern1mu \\bullet\\mkern1mu "; + break; + + case 'KV x': + res = "{\\times}"; + break; + + case 'prime': + res = "\\prime "; + break; + + case 'cdot': + res = "\\cdot "; + break; + + case 'tight cdot': + res = "\\mkern1mu{\\cdot}\\mkern1mu "; + break; + + case 'times': + res = "\\times "; + break; + + case 'circa': + res = "{\\sim}"; + break; + + case '^': + res = "uparrow"; + break; + + case 'v': + res = "downarrow"; + break; + + case 'ellipsis': + res = "\\ldots "; + break; + + case '/': + res = "/"; + break; + + case ' / ': + res = "\\,/\\,"; + break; + + default: + assertNever(buf); + throw ["MhchemBugT", "mhchem bug T. Please report."]; + // Missing texify rule or unknown MhchemParser output + } + + assertString(res); + return res; + }, + _getArrow: function _getArrow(a) { + switch (a) { + case "->": + return "rightarrow"; + + case "\u2192": + return "rightarrow"; + + case "\u27F6": + return "rightarrow"; + + case "<-": + return "leftarrow"; + + case "<->": + return "leftrightarrow"; + + case "<-->": + return "rightleftarrows"; + + case "<=>": + return "rightleftharpoons"; + + case "\u21CC": + return "rightleftharpoons"; + + case "<=>>": + return "rightequilibrium"; + + case "<<=>": + return "leftequilibrium"; + + default: + assertNever(a); + throw ["MhchemBugT", "mhchem bug T. Please report."]; + } + }, + _getBond: function _getBond(a) { + switch (a) { + case "-": + return "{-}"; + + case "1": + return "{-}"; + + case "=": + return "{=}"; + + case "2": + return "{=}"; + + case "#": + return "{\\equiv}"; + + case "3": + return "{\\equiv}"; + + case "~": + return "{\\tripledash}"; + + case "~-": + return "{\\mathrlap{\\raisebox{-.1em}{$-$}}\\raisebox{.1em}{$\\tripledash$}}"; + + case "~=": + return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}"; + + case "~--": + return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}"; + + case "-~-": + return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$-$}}\\tripledash}"; + + case "...": + return "{{\\cdot}{\\cdot}{\\cdot}}"; + + case "....": + return "{{\\cdot}{\\cdot}{\\cdot}{\\cdot}}"; + + case "->": + return "{\\rightarrow}"; + + case "<-": + return "{\\leftarrow}"; + + case "<": + return "{<}"; + + case ">": + return "{>}"; + + default: + assertNever(a); + throw ["MhchemBugT", "mhchem bug T. Please report."]; + } + }, + _getOperator: function _getOperator(a) { + switch (a) { + case "+": + return " {}+{} "; + + case "-": + return " {}-{} "; + + case "=": + return " {}={} "; + + case "<": + return " {}<{} "; + + case ">": + return " {}>{} "; + + case "<<": + return " {}\\ll{} "; + + case ">>": + return " {}\\gg{} "; + + case "\\pm": + return " {}\\pm{} "; + + case "\\approx": + return " {}\\approx{} "; + + case "$\\approx$": + return " {}\\approx{} "; + + case "v": + return " \\downarrow{} "; + + case "(v)": + return " \\downarrow{} "; + + case "^": + return " \\uparrow{} "; + + case "(^)": + return " \\uparrow{} "; + + default: + assertNever(a); + throw ["MhchemBugT", "mhchem bug T. Please report."]; + } + } +}; // +// Helpers for code anaylsis +// Will show type error at calling position +// + +/** @param {number} a */ + +function assertNever(a) {} +/** @param {string} a */ + + +function assertString(a) {} + +/***/ }) +/******/ ])["default"]; +}); \ No newline at end of file diff --git a/adoc/katex/contrib/mhchem.min.js b/adoc/katex/contrib/mhchem.min.js new file mode 100644 index 00000000..8fd9cca8 --- /dev/null +++ b/adoc/katex/contrib/mhchem.min.js @@ -0,0 +1 @@ +!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e(require("katex"));else if("function"==typeof define&&define.amd)define(["katex"],e);else{var n="object"==typeof exports?e(require("katex")):e(t.katex);for(var o in n)("object"==typeof exports?exports:t)[o]=n[o]}}("undefined"!=typeof self?self:this,function(t){return function(t){var e={};function n(o){if(e[o])return e[o].exports;var a=e[o]={i:o,l:!1,exports:{}};return t[o].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return n.m=t,n.c=e,n.d=function(t,e,o){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:o})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var a in t)n.d(o,a,function(e){return t[e]}.bind(null,a));return o},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=1)}([function(e,n){e.exports=t},function(t,e,n){"use strict";n.r(e);var o=n(0),a=n.n(o);a.a.__defineMacro("\\ce",function(t){return r(t.consumeArgs(1)[0],"ce")}),a.a.__defineMacro("\\pu",function(t){return r(t.consumeArgs(1)[0],"pu")}),a.a.__defineMacro("\\tripledash","{\\vphantom{-}\\raisebox{2.56mu}{$\\mkern2mu\\tiny\\text{-}\\mkern1mu\\text{-}\\mkern1mu\\text{-}\\mkern2mu$}}");var r=function(t,e){for(var n="",o=t[t.length-1].loc.start,a=t.length-1;a>=0;a--)t[a].loc.start>o&&(n+=" ",o=t[a].loc.start),n+=t[a].text,o+=t[a].text.length;return c.go(i.go(n,e))},i={go:function(t,e){if(!t)return[];void 0===e&&(e="ce");var n,o="0",a={};a.parenthesisLevel=0,t=(t=(t=t.replace(/\n/g," ")).replace(/[\u2212\u2013\u2014\u2010]/g,"-")).replace(/[\u2026]/g,"...");for(var r=10,c=[];;){n!==t?(r=10,n=t):r--;var u=i.stateMachines[e],p=u.transitions[o]||u.transitions["*"];t:for(var s=0;s0))return c;if(d.revisit||(t=_.remainder),!d.toContinue)break t}}if(r<=0)throw["MhchemBugU","mhchem bug U. Please report."]}},concatArray:function(t,e){if(e)if(Array.isArray(e))for(var n=0;n":/^[=<>]/,"#":/^[#\u2261]/,"+":/^\+/,"-$":/^-(?=[\s_},;\]\/]|$|\([a-z]+\))/,"-9":/^-(?=[0-9])/,"- orbital overlap":/^-(?=(?:[spd]|sp)(?:$|[\s,;\)\]\}]))/,"-":/^-/,"pm-operator":/^(?:\\pm|\$\\pm\$|\+-|\+\/-)/,operator:/^(?:\+|(?:[\-=<>]|<<|>>|\\approx|\$\\approx\$)(?=\s|$|-?[0-9]))/,arrowUpDown:/^(?:v|\(v\)|\^|\(\^\))(?=$|[\s,;\)\]\}])/,"\\bond{(...)}":function(t){return i.patterns.findObserveGroups(t,"\\bond{","","","}")},"->":/^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\u2192\u27F6\u21CC])/,CMT:/^[CMT](?=\[)/,"[(...)]":function(t){return i.patterns.findObserveGroups(t,"[","","","]")},"1st-level escape":/^(&|\\\\|\\hline)\s*/,"\\,":/^(?:\\[,\ ;:])/,"\\x{}{}":function(t){return i.patterns.findObserveGroups(t,"",/^\\[a-zA-Z]+\{/,"}","","","{","}","",!0)},"\\x{}":function(t){return i.patterns.findObserveGroups(t,"",/^\\[a-zA-Z]+\{/,"}","")},"\\ca":/^\\ca(?:\s+|(?![a-zA-Z]))/,"\\x":/^(?:\\[a-zA-Z]+\s*|\\[_&{}%])/,orbital:/^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/,others:/^[\/~|]/,"\\frac{(...)}":function(t){return i.patterns.findObserveGroups(t,"\\frac{","","","}","{","","","}")},"\\overset{(...)}":function(t){return i.patterns.findObserveGroups(t,"\\overset{","","","}","{","","","}")},"\\underset{(...)}":function(t){return i.patterns.findObserveGroups(t,"\\underset{","","","}","{","","","}")},"\\underbrace{(...)}":function(t){return i.patterns.findObserveGroups(t,"\\underbrace{","","","}_","{","","","}")},"\\color{(...)}0":function(t){return i.patterns.findObserveGroups(t,"\\color{","","","}")},"\\color{(...)}{(...)}1":function(t){return i.patterns.findObserveGroups(t,"\\color{","","","}","{","","","}")},"\\color(...){(...)}2":function(t){return i.patterns.findObserveGroups(t,"\\color","\\","",/^(?=\{)/,"{","","","}")},"\\ce{(...)}":function(t){return i.patterns.findObserveGroups(t,"\\ce{","","","}")},oxidation$:/^(?:[+-][IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,"d-oxidation$":/^(?:[+-]?\s?[IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,"roman numeral":/^[IVX]+/,"1/2$":/^[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+(?:\$[a-z]\$|[a-z])?$/,amount:function(t){var e;if(e=t.match(/^(?:(?:(?:\([+\-]?[0-9]+\/[0-9]+\)|[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+|[+\-]?[0-9]+[.,][0-9]+|[+\-]?\.[0-9]+|[+\-]?[0-9]+)(?:[a-z](?=\s*[A-Z]))?)|[+\-]?[a-z](?=\s*[A-Z])|\+(?!\s))/))return{match_:e[0],remainder:t.substr(e[0].length)};var n=i.patterns.findObserveGroups(t,"","$","$","");return n&&(e=n.match_.match(/^\$(?:\(?[+\-]?(?:[0-9]*[a-z]?[+\-])?[0-9]*[a-z](?:[+\-][0-9]*[a-z]?)?\)?|\+|-)\$$/))?{match_:e[0],remainder:t.substr(e[0].length)}:null},amount2:function(t){return this.amount(t)},"(KV letters),":/^(?:[A-Z][a-z]{0,2}|i)(?=,)/,formula$:function(t){if(t.match(/^\([a-z]+\)$/))return null;var e=t.match(/^(?:[a-z]|(?:[0-9\ \+\-\,\.\(\)]+[a-z])+[0-9\ \+\-\,\.\(\)]*|(?:[a-z][0-9\ \+\-\,\.\(\)]+)+[a-z]?)$/);return e?{match_:e[0],remainder:t.substr(e[0].length)}:null},uprightEntities:/^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/,"/":/^\s*(\/)\s*/,"//":/^\s*(\/\/)\s*/,"*":/^\s*[*.]\s*/},findObserveGroups:function(t,e,n,o,a,r,i,c,u,p){var s=function(t,e){if("string"==typeof e)return 0!==t.indexOf(e)?null:e;var n=t.match(e);return n?n[0]:null},_=s(t,e);if(null===_)return null;if(t=t.substr(_.length),null===(_=s(t,n)))return null;var d=function(t,e,n){for(var o=0;e":{"0|1|2|3":{action_:"r=",nextState:"r"},"a|as":{action_:["output","r="],nextState:"r"},"*":{action_:["output","r="],nextState:"r"}},"+":{o:{action_:"d= kv",nextState:"d"},"d|D":{action_:"d=",nextState:"d"},q:{action_:"d=",nextState:"qd"},"qd|qD":{action_:"d=",nextState:"qd"},dq:{action_:["output","d="],nextState:"d"},3:{action_:["sb=false","output","operator"],nextState:"0"}},amount:{"0|2":{action_:"a=",nextState:"a"}},"pm-operator":{"0|1|2|a|as":{action_:["sb=false","output",{type_:"operator",option:"\\pm"}],nextState:"0"}},operator:{"0|1|2|a|as":{action_:["sb=false","output","operator"],nextState:"0"}},"-$":{"o|q":{action_:["charge or bond","output"],nextState:"qd"},d:{action_:"d=",nextState:"d"},D:{action_:["output",{type_:"bond",option:"-"}],nextState:"3"},q:{action_:"d=",nextState:"qd"},qd:{action_:"d=",nextState:"qd"},"qD|dq":{action_:["output",{type_:"bond",option:"-"}],nextState:"3"}},"-9":{"3|o":{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"3"}},"- orbital overlap":{o:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"},d:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"}},"-":{"0|1|2":{action_:[{type_:"output",option:1},"beginsWithBond=true",{type_:"bond",option:"-"}],nextState:"3"},3:{action_:{type_:"bond",option:"-"}},a:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"},as:{action_:[{type_:"output",option:2},{type_:"bond",option:"-"}],nextState:"3"},b:{action_:"b="},o:{action_:{type_:"- after o/d",option:!1},nextState:"2"},q:{action_:{type_:"- after o/d",option:!1},nextState:"2"},"d|qd|dq":{action_:{type_:"- after o/d",option:!0},nextState:"2"},"D|qD|p":{action_:["output",{type_:"bond",option:"-"}],nextState:"3"}},amount2:{"1|3":{action_:"a=",nextState:"a"}},letters:{"0|1|2|3|a|as|b|p|bp|o":{action_:"o=",nextState:"o"},"q|dq":{action_:["output","o="],nextState:"o"},"d|D|qd|qD":{action_:"o after d",nextState:"o"}},digits:{o:{action_:"q=",nextState:"q"},"d|D":{action_:"q=",nextState:"dq"},q:{action_:["output","o="],nextState:"o"},a:{action_:"o=",nextState:"o"}},"space A":{"b|p|bp":{}},space:{a:{nextState:"as"},0:{action_:"sb=false"},"1|2":{action_:"sb=true"},"r|rt|rd|rdt|rdq":{action_:"output",nextState:"0"},"*":{action_:["output","sb=true"],nextState:"1"}},"1st-level escape":{"1|2":{action_:["output",{type_:"insert+p1",option:"1st-level escape"}]},"*":{action_:["output",{type_:"insert+p1",option:"1st-level escape"}],nextState:"0"}},"[(...)]":{"r|rt":{action_:"rd=",nextState:"rd"},"rd|rdt":{action_:"rq=",nextState:"rdq"}},"...":{"o|d|D|dq|qd|qD":{action_:["output",{type_:"bond",option:"..."}],nextState:"3"},"*":{action_:[{type_:"output",option:1},{type_:"insert",option:"ellipsis"}],nextState:"1"}},". |* ":{"*":{action_:["output",{type_:"insert",option:"addition compound"}],nextState:"1"}},"state of aggregation $":{"*":{action_:["output","state of aggregation"],nextState:"1"}},"{[(":{"a|as|o":{action_:["o=","output","parenthesisLevel++"],nextState:"2"},"0|1|2|3":{action_:["o=","output","parenthesisLevel++"],nextState:"2"},"*":{action_:["output","o=","output","parenthesisLevel++"],nextState:"2"}},")]}":{"0|1|2|3|b|p|bp|o":{action_:["o=","parenthesisLevel--"],nextState:"o"},"a|as|d|D|q|qd|qD|dq":{action_:["output","o=","parenthesisLevel--"],nextState:"o"}},", ":{"*":{action_:["output","comma"],nextState:"0"}},"^_":{"*":{}},"^{(...)}|^($...$)":{"0|1|2|as":{action_:"b=",nextState:"b"},p:{action_:"b=",nextState:"bp"},"3|o":{action_:"d= kv",nextState:"D"},q:{action_:"d=",nextState:"qD"},"d|D|qd|qD|dq":{action_:["output","d="],nextState:"D"}},"^a|^\\x{}{}|^\\x{}|^\\x|'":{"0|1|2|as":{action_:"b=",nextState:"b"},p:{action_:"b=",nextState:"bp"},"3|o":{action_:"d= kv",nextState:"d"},q:{action_:"d=",nextState:"qd"},"d|qd|D|qD":{action_:"d="},dq:{action_:["output","d="],nextState:"d"}},"_{(state of aggregation)}$":{"d|D|q|qd|qD|dq":{action_:["output","q="],nextState:"q"}},"_{(...)}|_($...$)|_9|_\\x{}{}|_\\x{}|_\\x":{"0|1|2|as":{action_:"p=",nextState:"p"},b:{action_:"p=",nextState:"bp"},"3|o":{action_:"q=",nextState:"q"},"d|D":{action_:"q=",nextState:"dq"},"q|qd|qD|dq":{action_:["output","q="],nextState:"q"}},"=<>":{"0|1|2|3|a|as|o|q|d|D|qd|qD|dq":{action_:[{type_:"output",option:2},"bond"],nextState:"3"}},"#":{"0|1|2|3|a|as|o":{action_:[{type_:"output",option:2},{type_:"bond",option:"#"}],nextState:"3"}},"{}":{"*":{action_:{type_:"output",option:1},nextState:"1"}},"{...}":{"0|1|2|3|a|as|b|p|bp":{action_:"o=",nextState:"o"},"o|d|D|q|qd|qD|dq":{action_:["output","o="],nextState:"o"}},"$...$":{a:{action_:"a="},"0|1|2|3|as|b|p|bp|o":{action_:"o=",nextState:"o"},"as|o":{action_:"o="},"q|d|D|qd|qD|dq":{action_:["output","o="],nextState:"o"}},"\\bond{(...)}":{"*":{action_:[{type_:"output",option:2},"bond"],nextState:"3"}},"\\frac{(...)}":{"*":{action_:[{type_:"output",option:1},"frac-output"],nextState:"3"}},"\\overset{(...)}":{"*":{action_:[{type_:"output",option:2},"overset-output"],nextState:"3"}},"\\underset{(...)}":{"*":{action_:[{type_:"output",option:2},"underset-output"],nextState:"3"}},"\\underbrace{(...)}":{"*":{action_:[{type_:"output",option:2},"underbrace-output"],nextState:"3"}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:[{type_:"output",option:2},"color-output"],nextState:"3"}},"\\color{(...)}0":{"*":{action_:[{type_:"output",option:2},"color0-output"]}},"\\ce{(...)}":{"*":{action_:[{type_:"output",option:2},"ce"],nextState:"3"}},"\\,":{"*":{action_:[{type_:"output",option:1},"copy"],nextState:"1"}},"\\x{}{}|\\x{}|\\x":{"0|1|2|3|a|as|b|p|bp|o|c0":{action_:["o=","output"],nextState:"3"},"*":{action_:["output","o=","output"],nextState:"3"}},others:{"*":{action_:[{type_:"output",option:1},"copy"],nextState:"3"}},else2:{a:{action_:"a to o",nextState:"o",revisit:!0},as:{action_:["output","sb=true"],nextState:"1",revisit:!0},"r|rt|rd|rdt|rdq":{action_:["output"],nextState:"0",revisit:!0},"*":{action_:["output","copy"],nextState:"3"}}}),actions:{"o after d":function(t,e){var n;if((t.d||"").match(/^[0-9]+$/)){var o=t.d;t.d=void 0,n=this.output(t),t.b=o}else n=this.output(t);return i.actions["o="](t,e),n},"d= kv":function(t,e){t.d=e,t.dType="kv"},"charge or bond":function(t,e){if(t.beginsWithBond){var n=[];return i.concatArray(n,this.output(t)),i.concatArray(n,i.actions.bond(t,e,"-")),n}t.d=e},"- after o/d":function(t,e,n){var o=i.patterns.match_("orbital",t.o||""),a=i.patterns.match_("one lowercase greek letter $",t.o||""),r=i.patterns.match_("one lowercase latin letter $",t.o||""),c=i.patterns.match_("$one lowercase latin letter$ $",t.o||""),u="-"===e&&(o&&""===o.remainder||a||r||c);!u||t.a||t.b||t.p||t.d||t.q||o||!r||(t.o="$"+t.o+"$");var p=[];return u?(i.concatArray(p,this.output(t)),p.push({type_:"hyphen"})):(o=i.patterns.match_("digits",t.d||""),n&&o&&""===o.remainder?(i.concatArray(p,i.actions["d="](t,e)),i.concatArray(p,this.output(t))):(i.concatArray(p,this.output(t)),i.concatArray(p,i.actions.bond(t,e,"-")))),p},"a to o":function(t){t.o=t.a,t.a=void 0},"sb=true":function(t){t.sb=!0},"sb=false":function(t){t.sb=!1},"beginsWithBond=true":function(t){t.beginsWithBond=!0},"beginsWithBond=false":function(t){t.beginsWithBond=!1},"parenthesisLevel++":function(t){t.parenthesisLevel++},"parenthesisLevel--":function(t){t.parenthesisLevel--},"state of aggregation":function(t,e){return{type_:"state of aggregation",p1:i.go(e,"o")}},comma:function(t,e){var n=e.replace(/\s*$/,"");return n!==e&&0===t.parenthesisLevel?{type_:"comma enumeration L",p1:n}:{type_:"comma enumeration M",p1:n}},output:function(t,e,n){var o,a,r;t.r?(a="M"===t.rdt?i.go(t.rd,"tex-math"):"T"===t.rdt?[{type_:"text",p1:t.rd||""}]:i.go(t.rd),r="M"===t.rqt?i.go(t.rq,"tex-math"):"T"===t.rqt?[{type_:"text",p1:t.rq||""}]:i.go(t.rq),o={type_:"arrow",r:t.r,rd:a,rq:r}):(o=[],(t.a||t.b||t.p||t.o||t.q||t.d||n)&&(t.sb&&o.push({type_:"entitySkip"}),t.o||t.q||t.d||t.b||t.p||2===n?t.o||t.q||t.d||!t.b&&!t.p?t.o&&"kv"===t.dType&&i.patterns.match_("d-oxidation$",t.d||"")?t.dType="oxidation":t.o&&"kv"===t.dType&&!t.q&&(t.dType=void 0):(t.o=t.a,t.d=t.b,t.q=t.p,t.a=t.b=t.p=void 0):(t.o=t.a,t.a=void 0),o.push({type_:"chemfive",a:i.go(t.a,"a"),b:i.go(t.b,"bd"),p:i.go(t.p,"pq"),o:i.go(t.o,"o"),q:i.go(t.q,"pq"),d:i.go(t.d,"oxidation"===t.dType?"oxidation":"bd"),dType:t.dType})));for(var c in t)"parenthesisLevel"!==c&&"beginsWithBond"!==c&&delete t[c];return o},"oxidation-output":function(t,e){var n=["{"];return i.concatArray(n,i.go(e,"oxidation")),n.push("}"),n},"frac-output":function(t,e){return{type_:"frac-ce",p1:i.go(e[0]),p2:i.go(e[1])}},"overset-output":function(t,e){return{type_:"overset",p1:i.go(e[0]),p2:i.go(e[1])}},"underset-output":function(t,e){return{type_:"underset",p1:i.go(e[0]),p2:i.go(e[1])}},"underbrace-output":function(t,e){return{type_:"underbrace",p1:i.go(e[0]),p2:i.go(e[1])}},"color-output":function(t,e){return{type_:"color",color1:e[0],color2:i.go(e[1])}},"r=":function(t,e){t.r=e},"rdt=":function(t,e){t.rdt=e},"rd=":function(t,e){t.rd=e},"rqt=":function(t,e){t.rqt=e},"rq=":function(t,e){t.rq=e},operator:function(t,e,n){return{type_:"operator",kind_:n||e}}}},a:{transitions:i.createTransitions({empty:{"*":{}},"1/2$":{0:{action_:"1/2"}},else:{0:{nextState:"1",revisit:!0}},"$(...)$":{"*":{action_:"tex-math tight",nextState:"1"}},",":{"*":{action_:{type_:"insert",option:"commaDecimal"}}},else2:{"*":{action_:"copy"}}}),actions:{}},o:{transitions:i.createTransitions({empty:{"*":{}},"1/2$":{0:{action_:"1/2"}},else:{0:{nextState:"1",revisit:!0}},letters:{"*":{action_:"rm"}},"\\ca":{"*":{action_:{type_:"insert",option:"circa"}}},"\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"{text}"}},else2:{"*":{action_:"copy"}}}),actions:{}},text:{transitions:i.createTransitions({empty:{"*":{action_:"output"}},"{...}":{"*":{action_:"text="}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"\\greek":{"*":{action_:["output","rm"]}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:["output","copy"]}},else:{"*":{action_:"text="}}}),actions:{output:function(t){if(t.text_){var e={type_:"text",p1:t.text_};for(var n in t)delete t[n];return e}}}},pq:{transitions:i.createTransitions({empty:{"*":{}},"state of aggregation $":{"*":{action_:"state of aggregation"}},i$:{0:{nextState:"!f",revisit:!0}},"(KV letters),":{0:{action_:"rm",nextState:"0"}},formula$:{0:{nextState:"f",revisit:!0}},"1/2$":{0:{action_:"1/2"}},else:{0:{nextState:"!f",revisit:!0}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"text"}},"a-z":{f:{action_:"tex-math"}},letters:{"*":{action_:"rm"}},"-9.,9":{"*":{action_:"9,9"}},",":{"*":{action_:{type_:"insert+p1",option:"comma enumeration S"}}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:"color-output"}},"\\color{(...)}0":{"*":{action_:"color0-output"}},"\\ce{(...)}":{"*":{action_:"ce"}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},else2:{"*":{action_:"copy"}}}),actions:{"state of aggregation":function(t,e){return{type_:"state of aggregation subscript",p1:i.go(e,"o")}},"color-output":function(t,e){return{type_:"color",color1:e[0],color2:i.go(e[1],"pq")}}}},bd:{transitions:i.createTransitions({empty:{"*":{}},x$:{0:{nextState:"!f",revisit:!0}},formula$:{0:{nextState:"f",revisit:!0}},else:{0:{nextState:"!f",revisit:!0}},"-9.,9 no missing 0":{"*":{action_:"9,9"}},".":{"*":{action_:{type_:"insert",option:"electron dot"}}},"a-z":{f:{action_:"tex-math"}},x:{"*":{action_:{type_:"insert",option:"KV x"}}},letters:{"*":{action_:"rm"}},"'":{"*":{action_:{type_:"insert",option:"prime"}}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"text"}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:"color-output"}},"\\color{(...)}0":{"*":{action_:"color0-output"}},"\\ce{(...)}":{"*":{action_:"ce"}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},else2:{"*":{action_:"copy"}}}),actions:{"color-output":function(t,e){return{type_:"color",color1:e[0],color2:i.go(e[1],"bd")}}}},oxidation:{transitions:i.createTransitions({empty:{"*":{}},"roman numeral":{"*":{action_:"roman-numeral"}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},else:{"*":{action_:"copy"}}}),actions:{"roman-numeral":function(t,e){return{type_:"roman numeral",p1:e||""}}}},"tex-math":{transitions:i.createTransitions({empty:{"*":{action_:"output"}},"\\ce{(...)}":{"*":{action_:["output","ce"]}},"{...}|\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"o="}},else:{"*":{action_:"o="}}}),actions:{output:function(t){if(t.o){var e={type_:"tex-math",p1:t.o};for(var n in t)delete t[n];return e}}}},"tex-math tight":{transitions:i.createTransitions({empty:{"*":{action_:"output"}},"\\ce{(...)}":{"*":{action_:["output","ce"]}},"{...}|\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"o="}},"-|+":{"*":{action_:"tight operator"}},else:{"*":{action_:"o="}}}),actions:{"tight operator":function(t,e){t.o=(t.o||"")+"{"+e+"}"},output:function(t){if(t.o){var e={type_:"tex-math",p1:t.o};for(var n in t)delete t[n];return e}}}},"9,9":{transitions:i.createTransitions({empty:{"*":{}},",":{"*":{action_:"comma"}},else:{"*":{action_:"copy"}}}),actions:{comma:function(){return{type_:"commaDecimal"}}}},pu:{transitions:i.createTransitions({empty:{"*":{action_:"output"}},space$:{"*":{action_:["output","space"]}},"{[(|)]}":{"0|a":{action_:"copy"}},"(-)(9)^(-9)":{0:{action_:"number^",nextState:"a"}},"(-)(9.,9)(e)(99)":{0:{action_:"enumber",nextState:"a"}},space:{"0|a":{}},"pm-operator":{"0|a":{action_:{type_:"operator",option:"\\pm"},nextState:"0"}},operator:{"0|a":{action_:"copy",nextState:"0"}},"//":{d:{action_:"o=",nextState:"/"}},"/":{d:{action_:"o=",nextState:"/"}},"{...}|else":{"0|d":{action_:"d=",nextState:"d"},a:{action_:["space","d="],nextState:"d"},"/|q":{action_:"q=",nextState:"q"}}}),actions:{enumber:function(t,e){var n=[];return"+-"===e[0]||"+/-"===e[0]?n.push("\\pm "):e[0]&&n.push(e[0]),e[1]&&(i.concatArray(n,i.go(e[1],"pu-9,9")),e[2]&&(e[2].match(/[,.]/)?i.concatArray(n,i.go(e[2],"pu-9,9")):n.push(e[2])),e[3]=e[4]||e[3],e[3]&&(e[3]=e[3].trim(),"e"===e[3]||"*"===e[3].substr(0,1)?n.push({type_:"cdot"}):n.push({type_:"times"}))),e[3]&&n.push("10^{"+e[5]+"}"),n},"number^":function(t,e){var n=[];return"+-"===e[0]||"+/-"===e[0]?n.push("\\pm "):e[0]&&n.push(e[0]),i.concatArray(n,i.go(e[1],"pu-9,9")),n.push("^{"+e[2]+"}"),n},operator:function(t,e,n){return{type_:"operator",kind_:n||e}},space:function(){return{type_:"pu-space-1"}},output:function(t){var e,n=i.patterns.match_("{(...)}",t.d||"");n&&""===n.remainder&&(t.d=n.match_);var o=i.patterns.match_("{(...)}",t.q||"");if(o&&""===o.remainder&&(t.q=o.match_),t.d&&(t.d=t.d.replace(/\u00B0C|\^oC|\^{o}C/g,"{}^{\\circ}C"),t.d=t.d.replace(/\u00B0F|\^oF|\^{o}F/g,"{}^{\\circ}F")),t.q){t.q=t.q.replace(/\u00B0C|\^oC|\^{o}C/g,"{}^{\\circ}C"),t.q=t.q.replace(/\u00B0F|\^oF|\^{o}F/g,"{}^{\\circ}F");var a={d:i.go(t.d,"pu"),q:i.go(t.q,"pu")};"//"===t.o?e={type_:"pu-frac",p1:a.d,p2:a.q}:(e=a.d,a.d.length>1||a.q.length>1?e.push({type_:" / "}):e.push({type_:"/"}),i.concatArray(e,a.q))}else e=i.go(t.d,"pu-2");for(var r in t)delete t[r];return e}}},"pu-2":{transitions:i.createTransitions({empty:{"*":{action_:"output"}},"*":{"*":{action_:["output","cdot"],nextState:"0"}},"\\x":{"*":{action_:"rm="}},space:{"*":{action_:["output","space"],nextState:"0"}},"^{(...)}|^(-1)":{1:{action_:"^(-1)"}},"-9.,9":{0:{action_:"rm=",nextState:"0"},1:{action_:"^(-1)",nextState:"0"}},"{...}|else":{"*":{action_:"rm=",nextState:"1"}}}),actions:{cdot:function(){return{type_:"tight cdot"}},"^(-1)":function(t,e){t.rm+="^{"+e+"}"},space:function(){return{type_:"pu-space-2"}},output:function(t){var e=[];if(t.rm){var n=i.patterns.match_("{(...)}",t.rm||"");e=n&&""===n.remainder?i.go(n.match_,"pu"):{type_:"rm",p1:t.rm}}for(var o in t)delete t[o];return e}}},"pu-9,9":{transitions:i.createTransitions({empty:{0:{action_:"output-0"},o:{action_:"output-o"}},",":{0:{action_:["output-0","comma"],nextState:"o"}},".":{0:{action_:["output-0","copy"],nextState:"o"}},else:{"*":{action_:"text="}}}),actions:{comma:function(){return{type_:"commaDecimal"}},"output-0":function(t){var e=[];if(t.text_=t.text_||"",t.text_.length>4){var n=t.text_.length%3;0===n&&(n=3);for(var o=t.text_.length-3;o>0;o-=3)e.push(t.text_.substr(o,3)),e.push({type_:"1000 separator"});e.push(t.text_.substr(0,n)),e.reverse()}else e.push(t.text_);for(var a in t)delete t[a];return e},"output-o":function(t){var e=[];if(t.text_=t.text_||"",t.text_.length>4){for(var n=t.text_.length-3,o=0;o":case"\u2192":case"\u27f6":return"rightarrow";case"<-":return"leftarrow";case"<->":return"leftrightarrow";case"<--\x3e":return"rightleftarrows";case"<=>":case"\u21cc":return"rightleftharpoons";case"<=>>":return"rightequilibrium";case"<<=>":return"leftequilibrium";default:throw["MhchemBugT","mhchem bug T. Please report."]}},_getBond:function(t){switch(t){case"-":case"1":return"{-}";case"=":case"2":return"{=}";case"#":case"3":return"{\\equiv}";case"~":return"{\\tripledash}";case"~-":return"{\\mathrlap{\\raisebox{-.1em}{$-$}}\\raisebox{.1em}{$\\tripledash$}}";case"~=":case"~--":return"{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}";case"-~-":return"{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$-$}}\\tripledash}";case"...":return"{{\\cdot}{\\cdot}{\\cdot}}";case"....":return"{{\\cdot}{\\cdot}{\\cdot}{\\cdot}}";case"->":return"{\\rightarrow}";case"<-":return"{\\leftarrow}";case"<":return"{<}";case">":return"{>}";default:throw["MhchemBugT","mhchem bug T. Please report."]}},_getOperator:function(t){switch(t){case"+":return" {}+{} ";case"-":return" {}-{} ";case"=":return" {}={} ";case"<":return" {}<{} ";case">":return" {}>{} ";case"<<":return" {}\\ll{} ";case">>":return" {}\\gg{} ";case"\\pm":return" {}\\pm{} ";case"\\approx":case"$\\approx$":return" {}\\approx{} ";case"v":case"(v)":return" \\downarrow{} ";case"^":case"(^)":return" \\uparrow{} ";default:throw["MhchemBugT","mhchem bug T. Please report."]}}}}]).default}); \ No newline at end of file diff --git a/adoc/katex/contrib/mhchem.mjs b/adoc/katex/contrib/mhchem.mjs new file mode 100644 index 00000000..46241b5f --- /dev/null +++ b/adoc/katex/contrib/mhchem.mjs @@ -0,0 +1,3109 @@ +import katex from '../katex.mjs'; + +/* eslint-disable */ + +/* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */ + +/* vim: set ts=2 et sw=2 tw=80: */ + +/************************************************************* + * + * KaTeX mhchem.js + * + * This file implements a KaTeX version of mhchem version 3.3.0. + * It is adapted from MathJax/extensions/TeX/mhchem.js + * It differs from the MathJax version as follows: + * 1. The interface is changed so that it can be called from KaTeX, not MathJax. + * 2. \rlap and \llap are replaced with \mathrlap and \mathllap. + * 3. Four lines of code are edited in order to use \raisebox instead of \raise. + * 4. The reaction arrow code is simplified. All reaction arrows are rendered + * using KaTeX extensible arrows instead of building non-extensible arrows. + * 5. \tripledash vertical alignment is slightly adjusted. + * + * This code, as other KaTeX code, is released under the MIT license. + * + * /************************************************************* + * + * MathJax/extensions/TeX/mhchem.js + * + * Implements the \ce command for handling chemical formulas + * from the mhchem LaTeX package. + * + * --------------------------------------------------------------------- + * + * Copyright (c) 2011-2015 The MathJax Consortium + * Copyright (c) 2015-2018 Martin Hensel + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// +// Coding Style +// - use '' for identifiers that can by minified/uglified +// - use "" for strings that need to stay untouched +// version: "3.3.0" for MathJax and KaTeX +// Add \ce, \pu, and \tripledash to the KaTeX macros. +katex.__defineMacro("\\ce", function (context) { + return chemParse(context.consumeArgs(1)[0], "ce"); +}); + +katex.__defineMacro("\\pu", function (context) { + return chemParse(context.consumeArgs(1)[0], "pu"); +}); // Needed for \bond for the ~ forms +// Raise by 2.56mu, not 2mu. We're raising a hyphen-minus, U+002D, not +// a mathematical minus, U+2212. So we need that extra 0.56. + + +katex.__defineMacro("\\tripledash", "{\\vphantom{-}\\raisebox{2.56mu}{$\\mkern2mu" + "\\tiny\\text{-}\\mkern1mu\\text{-}\\mkern1mu\\text{-}\\mkern2mu$}}"); +// This is the main function for handing the \ce and \pu commands. +// It takes the argument to \ce or \pu and returns the corresponding TeX string. +// + +var chemParse = function chemParse(tokens, stateMachine) { + // Recreate the argument string from KaTeX's array of tokens. + var str = ""; + var expectedLoc = tokens[tokens.length - 1].loc.start; + + for (var i = tokens.length - 1; i >= 0; i--) { + if (tokens[i].loc.start > expectedLoc) { + // context.consumeArgs has eaten a space. + str += " "; + expectedLoc = tokens[i].loc.start; + } + + str += tokens[i].text; + expectedLoc += tokens[i].text.length; + } + + var tex = texify.go(mhchemParser.go(str, stateMachine)); + return tex; +}; // +// Core parser for mhchem syntax (recursive) +// + +/** @type {MhchemParser} */ + + +var mhchemParser = { + // + // Parses mchem \ce syntax + // + // Call like + // go("H2O"); + // + go: function go(input, stateMachine) { + if (!input) { + return []; + } + + if (stateMachine === undefined) { + stateMachine = 'ce'; + } + + var state = '0'; // + // String buffers for parsing: + // + // buffer.a == amount + // buffer.o == element + // buffer.b == left-side superscript + // buffer.p == left-side subscript + // buffer.q == right-side subscript + // buffer.d == right-side superscript + // + // buffer.r == arrow + // buffer.rdt == arrow, script above, type + // buffer.rd == arrow, script above, content + // buffer.rqt == arrow, script below, type + // buffer.rq == arrow, script below, content + // + // buffer.text_ + // buffer.rm + // etc. + // + // buffer.parenthesisLevel == int, starting at 0 + // buffer.sb == bool, space before + // buffer.beginsWithBond == bool + // + // These letters are also used as state names. + // + // Other states: + // 0 == begin of main part (arrow/operator unlikely) + // 1 == next entity + // 2 == next entity (arrow/operator unlikely) + // 3 == next atom + // c == macro + // + + /** @type {Buffer} */ + + var buffer = {}; + buffer['parenthesisLevel'] = 0; + input = input.replace(/\n/g, " "); + input = input.replace(/[\u2212\u2013\u2014\u2010]/g, "-"); + input = input.replace(/[\u2026]/g, "..."); // + // Looks through mhchemParser.transitions, to execute a matching action + // (recursive) + // + + var lastInput; + var watchdog = 10; + /** @type {ParserOutput[]} */ + + var output = []; + + while (true) { + if (lastInput !== input) { + watchdog = 10; + lastInput = input; + } else { + watchdog--; + } // + // Find actions in transition table + // + + + var machine = mhchemParser.stateMachines[stateMachine]; + var t = machine.transitions[state] || machine.transitions['*']; + + iterateTransitions: for (var i = 0; i < t.length; i++) { + var matches = mhchemParser.patterns.match_(t[i].pattern, input); + + if (matches) { + // + // Execute actions + // + var task = t[i].task; + + for (var iA = 0; iA < task.action_.length; iA++) { + var o; // + // Find and execute action + // + + if (machine.actions[task.action_[iA].type_]) { + o = machine.actions[task.action_[iA].type_](buffer, matches.match_, task.action_[iA].option); + } else if (mhchemParser.actions[task.action_[iA].type_]) { + o = mhchemParser.actions[task.action_[iA].type_](buffer, matches.match_, task.action_[iA].option); + } else { + throw ["MhchemBugA", "mhchem bug A. Please report. (" + task.action_[iA].type_ + ")"]; // Trying to use non-existing action + } // + // Add output + // + + + mhchemParser.concatArray(output, o); + } // + // Set next state, + // Shorten input, + // Continue with next character + // (= apply only one transition per position) + // + + + state = task.nextState || state; + + if (input.length > 0) { + if (!task.revisit) { + input = matches.remainder; + } + + if (!task.toContinue) { + break iterateTransitions; + } + } else { + return output; + } + } + } // + // Prevent infinite loop + // + + + if (watchdog <= 0) { + throw ["MhchemBugU", "mhchem bug U. Please report."]; // Unexpected character + } + } + }, + concatArray: function concatArray(a, b) { + if (b) { + if (Array.isArray(b)) { + for (var iB = 0; iB < b.length; iB++) { + a.push(b[iB]); + } + } else { + a.push(b); + } + } + }, + patterns: { + // + // Matching patterns + // either regexps or function that return null or {match_:"a", remainder:"bc"} + // + patterns: { + // property names must not look like integers ("2") for correct property traversal order, later on + 'empty': /^$/, + 'else': /^./, + 'else2': /^./, + 'space': /^\s/, + 'space A': /^\s(?=[A-Z\\$])/, + 'space$': /^\s$/, + 'a-z': /^[a-z]/, + 'x': /^x/, + 'x$': /^x$/, + 'i$': /^i$/, + 'letters': /^(?:[a-zA-Z\u03B1-\u03C9\u0391-\u03A9?@]|(?:\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))))+/, + '\\greek': /^\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))/, + 'one lowercase latin letter $': /^(?:([a-z])(?:$|[^a-zA-Z]))$/, + '$one lowercase latin letter$ $': /^\$(?:([a-z])(?:$|[^a-zA-Z]))\$$/, + 'one lowercase greek letter $': /^(?:\$?[\u03B1-\u03C9]\$?|\$?\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)\s*\$?)(?:\s+|\{\}|(?![a-zA-Z]))$/, + 'digits': /^[0-9]+/, + '-9.,9': /^[+\-]?(?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))/, + '-9.,9 no missing 0': /^[+\-]?[0-9]+(?:[.,][0-9]+)?/, + '(-)(9.,9)(e)(99)': function e99(input) { + var m = input.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))?(\((?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))\))?(?:([eE]|\s*(\*|x|\\times|\u00D7)\s*10\^)([+\-]?[0-9]+|\{[+\-]?[0-9]+\}))?/); + + if (m && m[0]) { + return { + match_: m.splice(1), + remainder: input.substr(m[0].length) + }; + } + + return null; + }, + '(-)(9)^(-9)': function _(input) { + var m = input.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+)?)\^([+\-]?[0-9]+|\{[+\-]?[0-9]+\})/); + + if (m && m[0]) { + return { + match_: m.splice(1), + remainder: input.substr(m[0].length) + }; + } + + return null; + }, + 'state of aggregation $': function stateOfAggregation$(input) { + // ... or crystal system + var a = mhchemParser.patterns.findObserveGroups(input, "", /^\([a-z]{1,3}(?=[\),])/, ")", ""); // (aq), (aq,$\infty$), (aq, sat) + + if (a && a.remainder.match(/^($|[\s,;\)\]\}])/)) { + return a; + } // AND end of 'phrase' + + + var m = input.match(/^(?:\((?:\\ca\s?)?\$[amothc]\$\))/); // OR crystal system ($o$) (\ca$c$) + + if (m) { + return { + match_: m[0], + remainder: input.substr(m[0].length) + }; + } + + return null; + }, + '_{(state of aggregation)}$': /^_\{(\([a-z]{1,3}\))\}/, + '{[(': /^(?:\\\{|\[|\()/, + ')]}': /^(?:\)|\]|\\\})/, + ', ': /^[,;]\s*/, + ',': /^[,;]/, + '.': /^[.]/, + '. ': /^([.\u22C5\u00B7\u2022])\s*/, + '...': /^\.\.\.(?=$|[^.])/, + '* ': /^([*])\s*/, + '^{(...)}': function _(input) { + return mhchemParser.patterns.findObserveGroups(input, "^{", "", "", "}"); + }, + '^($...$)': function $$(input) { + return mhchemParser.patterns.findObserveGroups(input, "^", "$", "$", ""); + }, + '^a': /^\^([0-9]+|[^\\_])/, + '^\\x{}{}': function x(input) { + return mhchemParser.patterns.findObserveGroups(input, "^", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true); + }, + '^\\x{}': function x(input) { + return mhchemParser.patterns.findObserveGroups(input, "^", /^\\[a-zA-Z]+\{/, "}", ""); + }, + '^\\x': /^\^(\\[a-zA-Z]+)\s*/, + '^(-1)': /^\^(-?\d+)/, + '\'': /^'/, + '_{(...)}': function _(input) { + return mhchemParser.patterns.findObserveGroups(input, "_{", "", "", "}"); + }, + '_($...$)': function _$$(input) { + return mhchemParser.patterns.findObserveGroups(input, "_", "$", "$", ""); + }, + '_9': /^_([+\-]?[0-9]+|[^\\])/, + '_\\x{}{}': function _X(input) { + return mhchemParser.patterns.findObserveGroups(input, "_", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true); + }, + '_\\x{}': function _X(input) { + return mhchemParser.patterns.findObserveGroups(input, "_", /^\\[a-zA-Z]+\{/, "}", ""); + }, + '_\\x': /^_(\\[a-zA-Z]+)\s*/, + '^_': /^(?:\^(?=_)|\_(?=\^)|[\^_]$)/, + '{}': /^\{\}/, + '{...}': function _(input) { + return mhchemParser.patterns.findObserveGroups(input, "", "{", "}", ""); + }, + '{(...)}': function _(input) { + return mhchemParser.patterns.findObserveGroups(input, "{", "", "", "}"); + }, + '$...$': function $$(input) { + return mhchemParser.patterns.findObserveGroups(input, "", "$", "$", ""); + }, + '${(...)}$': function $$(input) { + return mhchemParser.patterns.findObserveGroups(input, "${", "", "", "}$"); + }, + '$(...)$': function $$(input) { + return mhchemParser.patterns.findObserveGroups(input, "$", "", "", "$"); + }, + '=<>': /^[=<>]/, + '#': /^[#\u2261]/, + '+': /^\+/, + '-$': /^-(?=[\s_},;\]/]|$|\([a-z]+\))/, + // -space -, -; -] -/ -$ -state-of-aggregation + '-9': /^-(?=[0-9])/, + '- orbital overlap': /^-(?=(?:[spd]|sp)(?:$|[\s,;\)\]\}]))/, + '-': /^-/, + 'pm-operator': /^(?:\\pm|\$\\pm\$|\+-|\+\/-)/, + 'operator': /^(?:\+|(?:[\-=<>]|<<|>>|\\approx|\$\\approx\$)(?=\s|$|-?[0-9]))/, + 'arrowUpDown': /^(?:v|\(v\)|\^|\(\^\))(?=$|[\s,;\)\]\}])/, + '\\bond{(...)}': function bond(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\bond{", "", "", "}"); + }, + '->': /^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\u2192\u27F6\u21CC])/, + 'CMT': /^[CMT](?=\[)/, + '[(...)]': function _(input) { + return mhchemParser.patterns.findObserveGroups(input, "[", "", "", "]"); + }, + '1st-level escape': /^(&|\\\\|\\hline)\s*/, + '\\,': /^(?:\\[,\ ;:])/, + // \\x - but output no space before + '\\x{}{}': function x(input) { + return mhchemParser.patterns.findObserveGroups(input, "", /^\\[a-zA-Z]+\{/, "}", "", "", "{", "}", "", true); + }, + '\\x{}': function x(input) { + return mhchemParser.patterns.findObserveGroups(input, "", /^\\[a-zA-Z]+\{/, "}", ""); + }, + '\\ca': /^\\ca(?:\s+|(?![a-zA-Z]))/, + '\\x': /^(?:\\[a-zA-Z]+\s*|\\[_&{}%])/, + 'orbital': /^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/, + // only those with numbers in front, because the others will be formatted correctly anyway + 'others': /^[\/~|]/, + '\\frac{(...)}': function frac(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\frac{", "", "", "}", "{", "", "", "}"); + }, + '\\overset{(...)}': function overset(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\overset{", "", "", "}", "{", "", "", "}"); + }, + '\\underset{(...)}': function underset(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\underset{", "", "", "}", "{", "", "", "}"); + }, + '\\underbrace{(...)}': function underbrace(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\underbrace{", "", "", "}_", "{", "", "", "}"); + }, + '\\color{(...)}0': function color0(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\color{", "", "", "}"); + }, + '\\color{(...)}{(...)}1': function color1(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\color{", "", "", "}", "{", "", "", "}"); + }, + '\\color(...){(...)}2': function color2(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\color", "\\", "", /^(?=\{)/, "{", "", "", "}"); + }, + '\\ce{(...)}': function ce(input) { + return mhchemParser.patterns.findObserveGroups(input, "\\ce{", "", "", "}"); + }, + 'oxidation$': /^(?:[+-][IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/, + 'd-oxidation$': /^(?:[+-]?\s?[IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/, + // 0 could be oxidation or charge + 'roman numeral': /^[IVX]+/, + '1/2$': /^[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+(?:\$[a-z]\$|[a-z])?$/, + 'amount': function amount(input) { + var match; // e.g. 2, 0.5, 1/2, -2, n/2, +; $a$ could be added later in parsing + + match = input.match(/^(?:(?:(?:\([+\-]?[0-9]+\/[0-9]+\)|[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+|[+\-]?[0-9]+[.,][0-9]+|[+\-]?\.[0-9]+|[+\-]?[0-9]+)(?:[a-z](?=\s*[A-Z]))?)|[+\-]?[a-z](?=\s*[A-Z])|\+(?!\s))/); + + if (match) { + return { + match_: match[0], + remainder: input.substr(match[0].length) + }; + } + + var a = mhchemParser.patterns.findObserveGroups(input, "", "$", "$", ""); + + if (a) { + // e.g. $2n-1$, $-$ + match = a.match_.match(/^\$(?:\(?[+\-]?(?:[0-9]*[a-z]?[+\-])?[0-9]*[a-z](?:[+\-][0-9]*[a-z]?)?\)?|\+|-)\$$/); + + if (match) { + return { + match_: match[0], + remainder: input.substr(match[0].length) + }; + } + } + + return null; + }, + 'amount2': function amount2(input) { + return this['amount'](input); + }, + '(KV letters),': /^(?:[A-Z][a-z]{0,2}|i)(?=,)/, + 'formula$': function formula$(input) { + if (input.match(/^\([a-z]+\)$/)) { + return null; + } // state of aggregation = no formula + + + var match = input.match(/^(?:[a-z]|(?:[0-9\ \+\-\,\.\(\)]+[a-z])+[0-9\ \+\-\,\.\(\)]*|(?:[a-z][0-9\ \+\-\,\.\(\)]+)+[a-z]?)$/); + + if (match) { + return { + match_: match[0], + remainder: input.substr(match[0].length) + }; + } + + return null; + }, + 'uprightEntities': /^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/, + '/': /^\s*(\/)\s*/, + '//': /^\s*(\/\/)\s*/, + '*': /^\s*[*.]\s*/ + }, + findObserveGroups: function findObserveGroups(input, begExcl, begIncl, endIncl, endExcl, beg2Excl, beg2Incl, end2Incl, end2Excl, combine) { + /** @type {{(input: string, pattern: string | RegExp): string | string[] | null;}} */ + var _match = function _match(input, pattern) { + if (typeof pattern === "string") { + if (input.indexOf(pattern) !== 0) { + return null; + } + + return pattern; + } else { + var match = input.match(pattern); + + if (!match) { + return null; + } + + return match[0]; + } + }; + /** @type {{(input: string, i: number, endChars: string | RegExp): {endMatchBegin: number, endMatchEnd: number} | null;}} */ + + + var _findObserveGroups = function _findObserveGroups(input, i, endChars) { + var braces = 0; + + while (i < input.length) { + var a = input.charAt(i); + + var match = _match(input.substr(i), endChars); + + if (match !== null && braces === 0) { + return { + endMatchBegin: i, + endMatchEnd: i + match.length + }; + } else if (a === "{") { + braces++; + } else if (a === "}") { + if (braces === 0) { + throw ["ExtraCloseMissingOpen", "Extra close brace or missing open brace"]; + } else { + braces--; + } + } + + i++; + } + + if (braces > 0) { + return null; + } + + return null; + }; + + var match = _match(input, begExcl); + + if (match === null) { + return null; + } + + input = input.substr(match.length); + match = _match(input, begIncl); + + if (match === null) { + return null; + } + + var e = _findObserveGroups(input, match.length, endIncl || endExcl); + + if (e === null) { + return null; + } + + var match1 = input.substring(0, endIncl ? e.endMatchEnd : e.endMatchBegin); + + if (!(beg2Excl || beg2Incl)) { + return { + match_: match1, + remainder: input.substr(e.endMatchEnd) + }; + } else { + var group2 = this.findObserveGroups(input.substr(e.endMatchEnd), beg2Excl, beg2Incl, end2Incl, end2Excl); + + if (group2 === null) { + return null; + } + /** @type {string[]} */ + + + var matchRet = [match1, group2.match_]; + return { + match_: combine ? matchRet.join("") : matchRet, + remainder: group2.remainder + }; + } + }, + // + // Matching function + // e.g. match("a", input) will look for the regexp called "a" and see if it matches + // returns null or {match_:"a", remainder:"bc"} + // + match_: function match_(m, input) { + var pattern = mhchemParser.patterns.patterns[m]; + + if (pattern === undefined) { + throw ["MhchemBugP", "mhchem bug P. Please report. (" + m + ")"]; // Trying to use non-existing pattern + } else if (typeof pattern === "function") { + return mhchemParser.patterns.patterns[m](input); // cannot use cached var pattern here, because some pattern functions need this===mhchemParser + } else { + // RegExp + var match = input.match(pattern); + + if (match) { + var mm; + + if (match[2]) { + mm = [match[1], match[2]]; + } else if (match[1]) { + mm = match[1]; + } else { + mm = match[0]; + } + + return { + match_: mm, + remainder: input.substr(match[0].length) + }; + } + + return null; + } + } + }, + // + // Generic state machine actions + // + actions: { + 'a=': function a(buffer, m) { + buffer.a = (buffer.a || "") + m; + }, + 'b=': function b(buffer, m) { + buffer.b = (buffer.b || "") + m; + }, + 'p=': function p(buffer, m) { + buffer.p = (buffer.p || "") + m; + }, + 'o=': function o(buffer, m) { + buffer.o = (buffer.o || "") + m; + }, + 'q=': function q(buffer, m) { + buffer.q = (buffer.q || "") + m; + }, + 'd=': function d(buffer, m) { + buffer.d = (buffer.d || "") + m; + }, + 'rm=': function rm(buffer, m) { + buffer.rm = (buffer.rm || "") + m; + }, + 'text=': function text(buffer, m) { + buffer.text_ = (buffer.text_ || "") + m; + }, + 'insert': function insert(buffer, m, a) { + return { + type_: a + }; + }, + 'insert+p1': function insertP1(buffer, m, a) { + return { + type_: a, + p1: m + }; + }, + 'insert+p1+p2': function insertP1P2(buffer, m, a) { + return { + type_: a, + p1: m[0], + p2: m[1] + }; + }, + 'copy': function copy(buffer, m) { + return m; + }, + 'rm': function rm(buffer, m) { + return { + type_: 'rm', + p1: m || "" + }; + }, + 'text': function text(buffer, m) { + return mhchemParser.go(m, 'text'); + }, + '{text}': function text(buffer, m) { + var ret = ["{"]; + mhchemParser.concatArray(ret, mhchemParser.go(m, 'text')); + ret.push("}"); + return ret; + }, + 'tex-math': function texMath(buffer, m) { + return mhchemParser.go(m, 'tex-math'); + }, + 'tex-math tight': function texMathTight(buffer, m) { + return mhchemParser.go(m, 'tex-math tight'); + }, + 'bond': function bond(buffer, m, k) { + return { + type_: 'bond', + kind_: k || m + }; + }, + 'color0-output': function color0Output(buffer, m) { + return { + type_: 'color0', + color: m[0] + }; + }, + 'ce': function ce(buffer, m) { + return mhchemParser.go(m); + }, + '1/2': function _(buffer, m) { + /** @type {ParserOutput[]} */ + var ret = []; + + if (m.match(/^[+\-]/)) { + ret.push(m.substr(0, 1)); + m = m.substr(1); + } + + var n = m.match(/^([0-9]+|\$[a-z]\$|[a-z])\/([0-9]+)(\$[a-z]\$|[a-z])?$/); + n[1] = n[1].replace(/\$/g, ""); + ret.push({ + type_: 'frac', + p1: n[1], + p2: n[2] + }); + + if (n[3]) { + n[3] = n[3].replace(/\$/g, ""); + ret.push({ + type_: 'tex-math', + p1: n[3] + }); + } + + return ret; + }, + '9,9': function _(buffer, m) { + return mhchemParser.go(m, '9,9'); + } + }, + // + // createTransitions + // convert { 'letter': { 'state': { action_: 'output' } } } to { 'state' => [ { pattern: 'letter', task: { action_: [{type_: 'output'}] } } ] } + // with expansion of 'a|b' to 'a' and 'b' (at 2 places) + // + createTransitions: function createTransitions(o) { + var pattern, state; + /** @type {string[]} */ + + var stateArray; + var i; // + // 1. Collect all states + // + + /** @type {Transitions} */ + + var transitions = {}; + + for (pattern in o) { + for (state in o[pattern]) { + stateArray = state.split("|"); + o[pattern][state].stateArray = stateArray; + + for (i = 0; i < stateArray.length; i++) { + transitions[stateArray[i]] = []; + } + } + } // + // 2. Fill states + // + + + for (pattern in o) { + for (state in o[pattern]) { + stateArray = o[pattern][state].stateArray || []; + + for (i = 0; i < stateArray.length; i++) { + // + // 2a. Normalize actions into array: 'text=' ==> [{type_:'text='}] + // (Note to myself: Resolving the function here would be problematic. It would need .bind (for *this*) and currying (for *option*).) + // + + /** @type {any} */ + var p = o[pattern][state]; + + if (p.action_) { + p.action_ = [].concat(p.action_); + + for (var k = 0; k < p.action_.length; k++) { + if (typeof p.action_[k] === "string") { + p.action_[k] = { + type_: p.action_[k] + }; + } + } + } else { + p.action_ = []; + } // + // 2.b Multi-insert + // + + + var patternArray = pattern.split("|"); + + for (var j = 0; j < patternArray.length; j++) { + if (stateArray[i] === '*') { + // insert into all + for (var t in transitions) { + transitions[t].push({ + pattern: patternArray[j], + task: p + }); + } + } else { + transitions[stateArray[i]].push({ + pattern: patternArray[j], + task: p + }); + } + } + } + } + } + + return transitions; + }, + stateMachines: {} +}; // +// Definition of state machines +// + +mhchemParser.stateMachines = { + // + // \ce state machines + // + //#region ce + 'ce': { + // main parser + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + 'else': { + '0|1|2': { + action_: 'beginsWithBond=false', + revisit: true, + toContinue: true + } + }, + 'oxidation$': { + '0': { + action_: 'oxidation-output' + } + }, + 'CMT': { + 'r': { + action_: 'rdt=', + nextState: 'rt' + }, + 'rd': { + action_: 'rqt=', + nextState: 'rdt' + } + }, + 'arrowUpDown': { + '0|1|2|as': { + action_: ['sb=false', 'output', 'operator'], + nextState: '1' + } + }, + 'uprightEntities': { + '0|1|2': { + action_: ['o=', 'output'], + nextState: '1' + } + }, + 'orbital': { + '0|1|2|3': { + action_: 'o=', + nextState: 'o' + } + }, + '->': { + '0|1|2|3': { + action_: 'r=', + nextState: 'r' + }, + 'a|as': { + action_: ['output', 'r='], + nextState: 'r' + }, + '*': { + action_: ['output', 'r='], + nextState: 'r' + } + }, + '+': { + 'o': { + action_: 'd= kv', + nextState: 'd' + }, + 'd|D': { + action_: 'd=', + nextState: 'd' + }, + 'q': { + action_: 'd=', + nextState: 'qd' + }, + 'qd|qD': { + action_: 'd=', + nextState: 'qd' + }, + 'dq': { + action_: ['output', 'd='], + nextState: 'd' + }, + '3': { + action_: ['sb=false', 'output', 'operator'], + nextState: '0' + } + }, + 'amount': { + '0|2': { + action_: 'a=', + nextState: 'a' + } + }, + 'pm-operator': { + '0|1|2|a|as': { + action_: ['sb=false', 'output', { + type_: 'operator', + option: '\\pm' + }], + nextState: '0' + } + }, + 'operator': { + '0|1|2|a|as': { + action_: ['sb=false', 'output', 'operator'], + nextState: '0' + } + }, + '-$': { + 'o|q': { + action_: ['charge or bond', 'output'], + nextState: 'qd' + }, + 'd': { + action_: 'd=', + nextState: 'd' + }, + 'D': { + action_: ['output', { + type_: 'bond', + option: "-" + }], + nextState: '3' + }, + 'q': { + action_: 'd=', + nextState: 'qd' + }, + 'qd': { + action_: 'd=', + nextState: 'qd' + }, + 'qD|dq': { + action_: ['output', { + type_: 'bond', + option: "-" + }], + nextState: '3' + } + }, + '-9': { + '3|o': { + action_: ['output', { + type_: 'insert', + option: 'hyphen' + }], + nextState: '3' + } + }, + '- orbital overlap': { + 'o': { + action_: ['output', { + type_: 'insert', + option: 'hyphen' + }], + nextState: '2' + }, + 'd': { + action_: ['output', { + type_: 'insert', + option: 'hyphen' + }], + nextState: '2' + } + }, + '-': { + '0|1|2': { + action_: [{ + type_: 'output', + option: 1 + }, 'beginsWithBond=true', { + type_: 'bond', + option: "-" + }], + nextState: '3' + }, + '3': { + action_: { + type_: 'bond', + option: "-" + } + }, + 'a': { + action_: ['output', { + type_: 'insert', + option: 'hyphen' + }], + nextState: '2' + }, + 'as': { + action_: [{ + type_: 'output', + option: 2 + }, { + type_: 'bond', + option: "-" + }], + nextState: '3' + }, + 'b': { + action_: 'b=' + }, + 'o': { + action_: { + type_: '- after o/d', + option: false + }, + nextState: '2' + }, + 'q': { + action_: { + type_: '- after o/d', + option: false + }, + nextState: '2' + }, + 'd|qd|dq': { + action_: { + type_: '- after o/d', + option: true + }, + nextState: '2' + }, + 'D|qD|p': { + action_: ['output', { + type_: 'bond', + option: "-" + }], + nextState: '3' + } + }, + 'amount2': { + '1|3': { + action_: 'a=', + nextState: 'a' + } + }, + 'letters': { + '0|1|2|3|a|as|b|p|bp|o': { + action_: 'o=', + nextState: 'o' + }, + 'q|dq': { + action_: ['output', 'o='], + nextState: 'o' + }, + 'd|D|qd|qD': { + action_: 'o after d', + nextState: 'o' + } + }, + 'digits': { + 'o': { + action_: 'q=', + nextState: 'q' + }, + 'd|D': { + action_: 'q=', + nextState: 'dq' + }, + 'q': { + action_: ['output', 'o='], + nextState: 'o' + }, + 'a': { + action_: 'o=', + nextState: 'o' + } + }, + 'space A': { + 'b|p|bp': {} + }, + 'space': { + 'a': { + nextState: 'as' + }, + '0': { + action_: 'sb=false' + }, + '1|2': { + action_: 'sb=true' + }, + 'r|rt|rd|rdt|rdq': { + action_: 'output', + nextState: '0' + }, + '*': { + action_: ['output', 'sb=true'], + nextState: '1' + } + }, + '1st-level escape': { + '1|2': { + action_: ['output', { + type_: 'insert+p1', + option: '1st-level escape' + }] + }, + '*': { + action_: ['output', { + type_: 'insert+p1', + option: '1st-level escape' + }], + nextState: '0' + } + }, + '[(...)]': { + 'r|rt': { + action_: 'rd=', + nextState: 'rd' + }, + 'rd|rdt': { + action_: 'rq=', + nextState: 'rdq' + } + }, + '...': { + 'o|d|D|dq|qd|qD': { + action_: ['output', { + type_: 'bond', + option: "..." + }], + nextState: '3' + }, + '*': { + action_: [{ + type_: 'output', + option: 1 + }, { + type_: 'insert', + option: 'ellipsis' + }], + nextState: '1' + } + }, + '. |* ': { + '*': { + action_: ['output', { + type_: 'insert', + option: 'addition compound' + }], + nextState: '1' + } + }, + 'state of aggregation $': { + '*': { + action_: ['output', 'state of aggregation'], + nextState: '1' + } + }, + '{[(': { + 'a|as|o': { + action_: ['o=', 'output', 'parenthesisLevel++'], + nextState: '2' + }, + '0|1|2|3': { + action_: ['o=', 'output', 'parenthesisLevel++'], + nextState: '2' + }, + '*': { + action_: ['output', 'o=', 'output', 'parenthesisLevel++'], + nextState: '2' + } + }, + ')]}': { + '0|1|2|3|b|p|bp|o': { + action_: ['o=', 'parenthesisLevel--'], + nextState: 'o' + }, + 'a|as|d|D|q|qd|qD|dq': { + action_: ['output', 'o=', 'parenthesisLevel--'], + nextState: 'o' + } + }, + ', ': { + '*': { + action_: ['output', 'comma'], + nextState: '0' + } + }, + '^_': { + // ^ and _ without a sensible argument + '*': {} + }, + '^{(...)}|^($...$)': { + '0|1|2|as': { + action_: 'b=', + nextState: 'b' + }, + 'p': { + action_: 'b=', + nextState: 'bp' + }, + '3|o': { + action_: 'd= kv', + nextState: 'D' + }, + 'q': { + action_: 'd=', + nextState: 'qD' + }, + 'd|D|qd|qD|dq': { + action_: ['output', 'd='], + nextState: 'D' + } + }, + '^a|^\\x{}{}|^\\x{}|^\\x|\'': { + '0|1|2|as': { + action_: 'b=', + nextState: 'b' + }, + 'p': { + action_: 'b=', + nextState: 'bp' + }, + '3|o': { + action_: 'd= kv', + nextState: 'd' + }, + 'q': { + action_: 'd=', + nextState: 'qd' + }, + 'd|qd|D|qD': { + action_: 'd=' + }, + 'dq': { + action_: ['output', 'd='], + nextState: 'd' + } + }, + '_{(state of aggregation)}$': { + 'd|D|q|qd|qD|dq': { + action_: ['output', 'q='], + nextState: 'q' + } + }, + '_{(...)}|_($...$)|_9|_\\x{}{}|_\\x{}|_\\x': { + '0|1|2|as': { + action_: 'p=', + nextState: 'p' + }, + 'b': { + action_: 'p=', + nextState: 'bp' + }, + '3|o': { + action_: 'q=', + nextState: 'q' + }, + 'd|D': { + action_: 'q=', + nextState: 'dq' + }, + 'q|qd|qD|dq': { + action_: ['output', 'q='], + nextState: 'q' + } + }, + '=<>': { + '0|1|2|3|a|as|o|q|d|D|qd|qD|dq': { + action_: [{ + type_: 'output', + option: 2 + }, 'bond'], + nextState: '3' + } + }, + '#': { + '0|1|2|3|a|as|o': { + action_: [{ + type_: 'output', + option: 2 + }, { + type_: 'bond', + option: "#" + }], + nextState: '3' + } + }, + '{}': { + '*': { + action_: { + type_: 'output', + option: 1 + }, + nextState: '1' + } + }, + '{...}': { + '0|1|2|3|a|as|b|p|bp': { + action_: 'o=', + nextState: 'o' + }, + 'o|d|D|q|qd|qD|dq': { + action_: ['output', 'o='], + nextState: 'o' + } + }, + '$...$': { + 'a': { + action_: 'a=' + }, + // 2$n$ + '0|1|2|3|as|b|p|bp|o': { + action_: 'o=', + nextState: 'o' + }, + // not 'amount' + 'as|o': { + action_: 'o=' + }, + 'q|d|D|qd|qD|dq': { + action_: ['output', 'o='], + nextState: 'o' + } + }, + '\\bond{(...)}': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'bond'], + nextState: "3" + } + }, + '\\frac{(...)}': { + '*': { + action_: [{ + type_: 'output', + option: 1 + }, 'frac-output'], + nextState: '3' + } + }, + '\\overset{(...)}': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'overset-output'], + nextState: '3' + } + }, + '\\underset{(...)}': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'underset-output'], + nextState: '3' + } + }, + '\\underbrace{(...)}': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'underbrace-output'], + nextState: '3' + } + }, + '\\color{(...)}{(...)}1|\\color(...){(...)}2': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'color-output'], + nextState: '3' + } + }, + '\\color{(...)}0': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'color0-output'] + } + }, + '\\ce{(...)}': { + '*': { + action_: [{ + type_: 'output', + option: 2 + }, 'ce'], + nextState: '3' + } + }, + '\\,': { + '*': { + action_: [{ + type_: 'output', + option: 1 + }, 'copy'], + nextState: '1' + } + }, + '\\x{}{}|\\x{}|\\x': { + '0|1|2|3|a|as|b|p|bp|o|c0': { + action_: ['o=', 'output'], + nextState: '3' + }, + '*': { + action_: ['output', 'o=', 'output'], + nextState: '3' + } + }, + 'others': { + '*': { + action_: [{ + type_: 'output', + option: 1 + }, 'copy'], + nextState: '3' + } + }, + 'else2': { + 'a': { + action_: 'a to o', + nextState: 'o', + revisit: true + }, + 'as': { + action_: ['output', 'sb=true'], + nextState: '1', + revisit: true + }, + 'r|rt|rd|rdt|rdq': { + action_: ['output'], + nextState: '0', + revisit: true + }, + '*': { + action_: ['output', 'copy'], + nextState: '3' + } + } + }), + actions: { + 'o after d': function oAfterD(buffer, m) { + var ret; + + if ((buffer.d || "").match(/^[0-9]+$/)) { + var tmp = buffer.d; + buffer.d = undefined; + ret = this['output'](buffer); + buffer.b = tmp; + } else { + ret = this['output'](buffer); + } + + mhchemParser.actions['o='](buffer, m); + return ret; + }, + 'd= kv': function dKv(buffer, m) { + buffer.d = m; + buffer.dType = 'kv'; + }, + 'charge or bond': function chargeOrBond(buffer, m) { + if (buffer['beginsWithBond']) { + /** @type {ParserOutput[]} */ + var ret = []; + mhchemParser.concatArray(ret, this['output'](buffer)); + mhchemParser.concatArray(ret, mhchemParser.actions['bond'](buffer, m, "-")); + return ret; + } else { + buffer.d = m; + } + }, + '- after o/d': function afterOD(buffer, m, isAfterD) { + var c1 = mhchemParser.patterns.match_('orbital', buffer.o || ""); + var c2 = mhchemParser.patterns.match_('one lowercase greek letter $', buffer.o || ""); + var c3 = mhchemParser.patterns.match_('one lowercase latin letter $', buffer.o || ""); + var c4 = mhchemParser.patterns.match_('$one lowercase latin letter$ $', buffer.o || ""); + var hyphenFollows = m === "-" && (c1 && c1.remainder === "" || c2 || c3 || c4); + + if (hyphenFollows && !buffer.a && !buffer.b && !buffer.p && !buffer.d && !buffer.q && !c1 && c3) { + buffer.o = '$' + buffer.o + '$'; + } + /** @type {ParserOutput[]} */ + + + var ret = []; + + if (hyphenFollows) { + mhchemParser.concatArray(ret, this['output'](buffer)); + ret.push({ + type_: 'hyphen' + }); + } else { + c1 = mhchemParser.patterns.match_('digits', buffer.d || ""); + + if (isAfterD && c1 && c1.remainder === '') { + mhchemParser.concatArray(ret, mhchemParser.actions['d='](buffer, m)); + mhchemParser.concatArray(ret, this['output'](buffer)); + } else { + mhchemParser.concatArray(ret, this['output'](buffer)); + mhchemParser.concatArray(ret, mhchemParser.actions['bond'](buffer, m, "-")); + } + } + + return ret; + }, + 'a to o': function aToO(buffer) { + buffer.o = buffer.a; + buffer.a = undefined; + }, + 'sb=true': function sbTrue(buffer) { + buffer.sb = true; + }, + 'sb=false': function sbFalse(buffer) { + buffer.sb = false; + }, + 'beginsWithBond=true': function beginsWithBondTrue(buffer) { + buffer['beginsWithBond'] = true; + }, + 'beginsWithBond=false': function beginsWithBondFalse(buffer) { + buffer['beginsWithBond'] = false; + }, + 'parenthesisLevel++': function parenthesisLevel(buffer) { + buffer['parenthesisLevel']++; + }, + 'parenthesisLevel--': function parenthesisLevel(buffer) { + buffer['parenthesisLevel']--; + }, + 'state of aggregation': function stateOfAggregation(buffer, m) { + return { + type_: 'state of aggregation', + p1: mhchemParser.go(m, 'o') + }; + }, + 'comma': function comma(buffer, m) { + var a = m.replace(/\s*$/, ''); + var withSpace = a !== m; + + if (withSpace && buffer['parenthesisLevel'] === 0) { + return { + type_: 'comma enumeration L', + p1: a + }; + } else { + return { + type_: 'comma enumeration M', + p1: a + }; + } + }, + 'output': function output(buffer, m, entityFollows) { + // entityFollows: + // undefined = if we have nothing else to output, also ignore the just read space (buffer.sb) + // 1 = an entity follows, never omit the space if there was one just read before (can only apply to state 1) + // 2 = 1 + the entity can have an amount, so output a\, instead of converting it to o (can only apply to states a|as) + + /** @type {ParserOutput | ParserOutput[]} */ + var ret; + + if (!buffer.r) { + ret = []; + + if (!buffer.a && !buffer.b && !buffer.p && !buffer.o && !buffer.q && !buffer.d && !entityFollows) ; else { + if (buffer.sb) { + ret.push({ + type_: 'entitySkip' + }); + } + + if (!buffer.o && !buffer.q && !buffer.d && !buffer.b && !buffer.p && entityFollows !== 2) { + buffer.o = buffer.a; + buffer.a = undefined; + } else if (!buffer.o && !buffer.q && !buffer.d && (buffer.b || buffer.p)) { + buffer.o = buffer.a; + buffer.d = buffer.b; + buffer.q = buffer.p; + buffer.a = buffer.b = buffer.p = undefined; + } else { + if (buffer.o && buffer.dType === 'kv' && mhchemParser.patterns.match_('d-oxidation$', buffer.d || "")) { + buffer.dType = 'oxidation'; + } else if (buffer.o && buffer.dType === 'kv' && !buffer.q) { + buffer.dType = undefined; + } + } + + ret.push({ + type_: 'chemfive', + a: mhchemParser.go(buffer.a, 'a'), + b: mhchemParser.go(buffer.b, 'bd'), + p: mhchemParser.go(buffer.p, 'pq'), + o: mhchemParser.go(buffer.o, 'o'), + q: mhchemParser.go(buffer.q, 'pq'), + d: mhchemParser.go(buffer.d, buffer.dType === 'oxidation' ? 'oxidation' : 'bd'), + dType: buffer.dType + }); + } + } else { + // r + + /** @type {ParserOutput[]} */ + var rd; + + if (buffer.rdt === 'M') { + rd = mhchemParser.go(buffer.rd, 'tex-math'); + } else if (buffer.rdt === 'T') { + rd = [{ + type_: 'text', + p1: buffer.rd || "" + }]; + } else { + rd = mhchemParser.go(buffer.rd); + } + /** @type {ParserOutput[]} */ + + + var rq; + + if (buffer.rqt === 'M') { + rq = mhchemParser.go(buffer.rq, 'tex-math'); + } else if (buffer.rqt === 'T') { + rq = [{ + type_: 'text', + p1: buffer.rq || "" + }]; + } else { + rq = mhchemParser.go(buffer.rq); + } + + ret = { + type_: 'arrow', + r: buffer.r, + rd: rd, + rq: rq + }; + } + + for (var p in buffer) { + if (p !== 'parenthesisLevel' && p !== 'beginsWithBond') { + delete buffer[p]; + } + } + + return ret; + }, + 'oxidation-output': function oxidationOutput(buffer, m) { + var ret = ["{"]; + mhchemParser.concatArray(ret, mhchemParser.go(m, 'oxidation')); + ret.push("}"); + return ret; + }, + 'frac-output': function fracOutput(buffer, m) { + return { + type_: 'frac-ce', + p1: mhchemParser.go(m[0]), + p2: mhchemParser.go(m[1]) + }; + }, + 'overset-output': function oversetOutput(buffer, m) { + return { + type_: 'overset', + p1: mhchemParser.go(m[0]), + p2: mhchemParser.go(m[1]) + }; + }, + 'underset-output': function undersetOutput(buffer, m) { + return { + type_: 'underset', + p1: mhchemParser.go(m[0]), + p2: mhchemParser.go(m[1]) + }; + }, + 'underbrace-output': function underbraceOutput(buffer, m) { + return { + type_: 'underbrace', + p1: mhchemParser.go(m[0]), + p2: mhchemParser.go(m[1]) + }; + }, + 'color-output': function colorOutput(buffer, m) { + return { + type_: 'color', + color1: m[0], + color2: mhchemParser.go(m[1]) + }; + }, + 'r=': function r(buffer, m) { + buffer.r = m; + }, + 'rdt=': function rdt(buffer, m) { + buffer.rdt = m; + }, + 'rd=': function rd(buffer, m) { + buffer.rd = m; + }, + 'rqt=': function rqt(buffer, m) { + buffer.rqt = m; + }, + 'rq=': function rq(buffer, m) { + buffer.rq = m; + }, + 'operator': function operator(buffer, m, p1) { + return { + type_: 'operator', + kind_: p1 || m + }; + } + } + }, + 'a': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + '1/2$': { + '0': { + action_: '1/2' + } + }, + 'else': { + '0': { + nextState: '1', + revisit: true + } + }, + '$(...)$': { + '*': { + action_: 'tex-math tight', + nextState: '1' + } + }, + ',': { + '*': { + action_: { + type_: 'insert', + option: 'commaDecimal' + } + } + }, + 'else2': { + '*': { + action_: 'copy' + } + } + }), + actions: {} + }, + 'o': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + '1/2$': { + '0': { + action_: '1/2' + } + }, + 'else': { + '0': { + nextState: '1', + revisit: true + } + }, + 'letters': { + '*': { + action_: 'rm' + } + }, + '\\ca': { + '*': { + action_: { + type_: 'insert', + option: 'circa' + } + } + }, + '\\x{}{}|\\x{}|\\x': { + '*': { + action_: 'copy' + } + }, + '${(...)}$|$(...)$': { + '*': { + action_: 'tex-math' + } + }, + '{(...)}': { + '*': { + action_: '{text}' + } + }, + 'else2': { + '*': { + action_: 'copy' + } + } + }), + actions: {} + }, + 'text': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + '{...}': { + '*': { + action_: 'text=' + } + }, + '${(...)}$|$(...)$': { + '*': { + action_: 'tex-math' + } + }, + '\\greek': { + '*': { + action_: ['output', 'rm'] + } + }, + '\\,|\\x{}{}|\\x{}|\\x': { + '*': { + action_: ['output', 'copy'] + } + }, + 'else': { + '*': { + action_: 'text=' + } + } + }), + actions: { + 'output': function output(buffer) { + if (buffer.text_) { + /** @type {ParserOutput} */ + var ret = { + type_: 'text', + p1: buffer.text_ + }; + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + } + }, + 'pq': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + 'state of aggregation $': { + '*': { + action_: 'state of aggregation' + } + }, + 'i$': { + '0': { + nextState: '!f', + revisit: true + } + }, + '(KV letters),': { + '0': { + action_: 'rm', + nextState: '0' + } + }, + 'formula$': { + '0': { + nextState: 'f', + revisit: true + } + }, + '1/2$': { + '0': { + action_: '1/2' + } + }, + 'else': { + '0': { + nextState: '!f', + revisit: true + } + }, + '${(...)}$|$(...)$': { + '*': { + action_: 'tex-math' + } + }, + '{(...)}': { + '*': { + action_: 'text' + } + }, + 'a-z': { + 'f': { + action_: 'tex-math' + } + }, + 'letters': { + '*': { + action_: 'rm' + } + }, + '-9.,9': { + '*': { + action_: '9,9' + } + }, + ',': { + '*': { + action_: { + type_: 'insert+p1', + option: 'comma enumeration S' + } + } + }, + '\\color{(...)}{(...)}1|\\color(...){(...)}2': { + '*': { + action_: 'color-output' + } + }, + '\\color{(...)}0': { + '*': { + action_: 'color0-output' + } + }, + '\\ce{(...)}': { + '*': { + action_: 'ce' + } + }, + '\\,|\\x{}{}|\\x{}|\\x': { + '*': { + action_: 'copy' + } + }, + 'else2': { + '*': { + action_: 'copy' + } + } + }), + actions: { + 'state of aggregation': function stateOfAggregation(buffer, m) { + return { + type_: 'state of aggregation subscript', + p1: mhchemParser.go(m, 'o') + }; + }, + 'color-output': function colorOutput(buffer, m) { + return { + type_: 'color', + color1: m[0], + color2: mhchemParser.go(m[1], 'pq') + }; + } + } + }, + 'bd': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + 'x$': { + '0': { + nextState: '!f', + revisit: true + } + }, + 'formula$': { + '0': { + nextState: 'f', + revisit: true + } + }, + 'else': { + '0': { + nextState: '!f', + revisit: true + } + }, + '-9.,9 no missing 0': { + '*': { + action_: '9,9' + } + }, + '.': { + '*': { + action_: { + type_: 'insert', + option: 'electron dot' + } + } + }, + 'a-z': { + 'f': { + action_: 'tex-math' + } + }, + 'x': { + '*': { + action_: { + type_: 'insert', + option: 'KV x' + } + } + }, + 'letters': { + '*': { + action_: 'rm' + } + }, + '\'': { + '*': { + action_: { + type_: 'insert', + option: 'prime' + } + } + }, + '${(...)}$|$(...)$': { + '*': { + action_: 'tex-math' + } + }, + '{(...)}': { + '*': { + action_: 'text' + } + }, + '\\color{(...)}{(...)}1|\\color(...){(...)}2': { + '*': { + action_: 'color-output' + } + }, + '\\color{(...)}0': { + '*': { + action_: 'color0-output' + } + }, + '\\ce{(...)}': { + '*': { + action_: 'ce' + } + }, + '\\,|\\x{}{}|\\x{}|\\x': { + '*': { + action_: 'copy' + } + }, + 'else2': { + '*': { + action_: 'copy' + } + } + }), + actions: { + 'color-output': function colorOutput(buffer, m) { + return { + type_: 'color', + color1: m[0], + color2: mhchemParser.go(m[1], 'bd') + }; + } + } + }, + 'oxidation': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + 'roman numeral': { + '*': { + action_: 'roman-numeral' + } + }, + '${(...)}$|$(...)$': { + '*': { + action_: 'tex-math' + } + }, + 'else': { + '*': { + action_: 'copy' + } + } + }), + actions: { + 'roman-numeral': function romanNumeral(buffer, m) { + return { + type_: 'roman numeral', + p1: m || "" + }; + } + } + }, + 'tex-math': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + '\\ce{(...)}': { + '*': { + action_: ['output', 'ce'] + } + }, + '{...}|\\,|\\x{}{}|\\x{}|\\x': { + '*': { + action_: 'o=' + } + }, + 'else': { + '*': { + action_: 'o=' + } + } + }), + actions: { + 'output': function output(buffer) { + if (buffer.o) { + /** @type {ParserOutput} */ + var ret = { + type_: 'tex-math', + p1: buffer.o + }; + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + } + }, + 'tex-math tight': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + '\\ce{(...)}': { + '*': { + action_: ['output', 'ce'] + } + }, + '{...}|\\,|\\x{}{}|\\x{}|\\x': { + '*': { + action_: 'o=' + } + }, + '-|+': { + '*': { + action_: 'tight operator' + } + }, + 'else': { + '*': { + action_: 'o=' + } + } + }), + actions: { + 'tight operator': function tightOperator(buffer, m) { + buffer.o = (buffer.o || "") + "{" + m + "}"; + }, + 'output': function output(buffer) { + if (buffer.o) { + /** @type {ParserOutput} */ + var ret = { + type_: 'tex-math', + p1: buffer.o + }; + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + } + }, + '9,9': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': {} + }, + ',': { + '*': { + action_: 'comma' + } + }, + 'else': { + '*': { + action_: 'copy' + } + } + }), + actions: { + 'comma': function comma() { + return { + type_: 'commaDecimal' + }; + } + } + }, + //#endregion + // + // \pu state machines + // + //#region pu + 'pu': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + 'space$': { + '*': { + action_: ['output', 'space'] + } + }, + '{[(|)]}': { + '0|a': { + action_: 'copy' + } + }, + '(-)(9)^(-9)': { + '0': { + action_: 'number^', + nextState: 'a' + } + }, + '(-)(9.,9)(e)(99)': { + '0': { + action_: 'enumber', + nextState: 'a' + } + }, + 'space': { + '0|a': {} + }, + 'pm-operator': { + '0|a': { + action_: { + type_: 'operator', + option: '\\pm' + }, + nextState: '0' + } + }, + 'operator': { + '0|a': { + action_: 'copy', + nextState: '0' + } + }, + '//': { + 'd': { + action_: 'o=', + nextState: '/' + } + }, + '/': { + 'd': { + action_: 'o=', + nextState: '/' + } + }, + '{...}|else': { + '0|d': { + action_: 'd=', + nextState: 'd' + }, + 'a': { + action_: ['space', 'd='], + nextState: 'd' + }, + '/|q': { + action_: 'q=', + nextState: 'q' + } + } + }), + actions: { + 'enumber': function enumber(buffer, m) { + /** @type {ParserOutput[]} */ + var ret = []; + + if (m[0] === "+-" || m[0] === "+/-") { + ret.push("\\pm "); + } else if (m[0]) { + ret.push(m[0]); + } + + if (m[1]) { + mhchemParser.concatArray(ret, mhchemParser.go(m[1], 'pu-9,9')); + + if (m[2]) { + if (m[2].match(/[,.]/)) { + mhchemParser.concatArray(ret, mhchemParser.go(m[2], 'pu-9,9')); + } else { + ret.push(m[2]); + } + } + + m[3] = m[4] || m[3]; + + if (m[3]) { + m[3] = m[3].trim(); + + if (m[3] === "e" || m[3].substr(0, 1) === "*") { + ret.push({ + type_: 'cdot' + }); + } else { + ret.push({ + type_: 'times' + }); + } + } + } + + if (m[3]) { + ret.push("10^{" + m[5] + "}"); + } + + return ret; + }, + 'number^': function number(buffer, m) { + /** @type {ParserOutput[]} */ + var ret = []; + + if (m[0] === "+-" || m[0] === "+/-") { + ret.push("\\pm "); + } else if (m[0]) { + ret.push(m[0]); + } + + mhchemParser.concatArray(ret, mhchemParser.go(m[1], 'pu-9,9')); + ret.push("^{" + m[2] + "}"); + return ret; + }, + 'operator': function operator(buffer, m, p1) { + return { + type_: 'operator', + kind_: p1 || m + }; + }, + 'space': function space() { + return { + type_: 'pu-space-1' + }; + }, + 'output': function output(buffer) { + /** @type {ParserOutput | ParserOutput[]} */ + var ret; + var md = mhchemParser.patterns.match_('{(...)}', buffer.d || ""); + + if (md && md.remainder === '') { + buffer.d = md.match_; + } + + var mq = mhchemParser.patterns.match_('{(...)}', buffer.q || ""); + + if (mq && mq.remainder === '') { + buffer.q = mq.match_; + } + + if (buffer.d) { + buffer.d = buffer.d.replace(/\u00B0C|\^oC|\^{o}C/g, "{}^{\\circ}C"); + buffer.d = buffer.d.replace(/\u00B0F|\^oF|\^{o}F/g, "{}^{\\circ}F"); + } + + if (buffer.q) { + // fraction + buffer.q = buffer.q.replace(/\u00B0C|\^oC|\^{o}C/g, "{}^{\\circ}C"); + buffer.q = buffer.q.replace(/\u00B0F|\^oF|\^{o}F/g, "{}^{\\circ}F"); + var b5 = { + d: mhchemParser.go(buffer.d, 'pu'), + q: mhchemParser.go(buffer.q, 'pu') + }; + + if (buffer.o === '//') { + ret = { + type_: 'pu-frac', + p1: b5.d, + p2: b5.q + }; + } else { + ret = b5.d; + + if (b5.d.length > 1 || b5.q.length > 1) { + ret.push({ + type_: ' / ' + }); + } else { + ret.push({ + type_: '/' + }); + } + + mhchemParser.concatArray(ret, b5.q); + } + } else { + // no fraction + ret = mhchemParser.go(buffer.d, 'pu-2'); + } + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + }, + 'pu-2': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '*': { + action_: 'output' + } + }, + '*': { + '*': { + action_: ['output', 'cdot'], + nextState: '0' + } + }, + '\\x': { + '*': { + action_: 'rm=' + } + }, + 'space': { + '*': { + action_: ['output', 'space'], + nextState: '0' + } + }, + '^{(...)}|^(-1)': { + '1': { + action_: '^(-1)' + } + }, + '-9.,9': { + '0': { + action_: 'rm=', + nextState: '0' + }, + '1': { + action_: '^(-1)', + nextState: '0' + } + }, + '{...}|else': { + '*': { + action_: 'rm=', + nextState: '1' + } + } + }), + actions: { + 'cdot': function cdot() { + return { + type_: 'tight cdot' + }; + }, + '^(-1)': function _(buffer, m) { + buffer.rm += "^{" + m + "}"; + }, + 'space': function space() { + return { + type_: 'pu-space-2' + }; + }, + 'output': function output(buffer) { + /** @type {ParserOutput | ParserOutput[]} */ + var ret = []; + + if (buffer.rm) { + var mrm = mhchemParser.patterns.match_('{(...)}', buffer.rm || ""); + + if (mrm && mrm.remainder === '') { + ret = mhchemParser.go(mrm.match_, 'pu'); + } else { + ret = { + type_: 'rm', + p1: buffer.rm + }; + } + } + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } + }, + 'pu-9,9': { + transitions: mhchemParser.createTransitions({ + 'empty': { + '0': { + action_: 'output-0' + }, + 'o': { + action_: 'output-o' + } + }, + ',': { + '0': { + action_: ['output-0', 'comma'], + nextState: 'o' + } + }, + '.': { + '0': { + action_: ['output-0', 'copy'], + nextState: 'o' + } + }, + 'else': { + '*': { + action_: 'text=' + } + } + }), + actions: { + 'comma': function comma() { + return { + type_: 'commaDecimal' + }; + }, + 'output-0': function output0(buffer) { + /** @type {ParserOutput[]} */ + var ret = []; + buffer.text_ = buffer.text_ || ""; + + if (buffer.text_.length > 4) { + var a = buffer.text_.length % 3; + + if (a === 0) { + a = 3; + } + + for (var i = buffer.text_.length - 3; i > 0; i -= 3) { + ret.push(buffer.text_.substr(i, 3)); + ret.push({ + type_: '1000 separator' + }); + } + + ret.push(buffer.text_.substr(0, a)); + ret.reverse(); + } else { + ret.push(buffer.text_); + } + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + }, + 'output-o': function outputO(buffer) { + /** @type {ParserOutput[]} */ + var ret = []; + buffer.text_ = buffer.text_ || ""; + + if (buffer.text_.length > 4) { + var a = buffer.text_.length - 3; + + for (var i = 0; i < a; i += 3) { + ret.push(buffer.text_.substr(i, 3)); + ret.push({ + type_: '1000 separator' + }); + } + + ret.push(buffer.text_.substr(i)); + } else { + ret.push(buffer.text_); + } + + for (var p in buffer) { + delete buffer[p]; + } + + return ret; + } + } //#endregion + + } +}; // +// texify: Take MhchemParser output and convert it to TeX +// + +/** @type {Texify} */ + +var texify = { + go: function go(input, isInner) { + // (recursive, max 4 levels) + if (!input) { + return ""; + } + + var res = ""; + var cee = false; + + for (var i = 0; i < input.length; i++) { + var inputi = input[i]; + + if (typeof inputi === "string") { + res += inputi; + } else { + res += texify._go2(inputi); + + if (inputi.type_ === '1st-level escape') { + cee = true; + } + } + } + + if (!isInner && !cee && res) { + res = "{" + res + "}"; + } + + return res; + }, + _goInner: function _goInner(input) { + if (!input) { + return input; + } + + return texify.go(input, true); + }, + _go2: function _go2(buf) { + /** @type {undefined | string} */ + var res; + + switch (buf.type_) { + case 'chemfive': + res = ""; + var b5 = { + a: texify._goInner(buf.a), + b: texify._goInner(buf.b), + p: texify._goInner(buf.p), + o: texify._goInner(buf.o), + q: texify._goInner(buf.q), + d: texify._goInner(buf.d) + }; // + // a + // + + if (b5.a) { + if (b5.a.match(/^[+\-]/)) { + b5.a = "{" + b5.a + "}"; + } + + res += b5.a + "\\,"; + } // + // b and p + // + + + if (b5.b || b5.p) { + res += "{\\vphantom{X}}"; + res += "^{\\hphantom{" + (b5.b || "") + "}}_{\\hphantom{" + (b5.p || "") + "}}"; + res += "{\\vphantom{X}}"; + res += "^{\\smash[t]{\\vphantom{2}}\\mathllap{" + (b5.b || "") + "}}"; + res += "_{\\vphantom{2}\\mathllap{\\smash[t]{" + (b5.p || "") + "}}}"; + } // + // o + // + + + if (b5.o) { + if (b5.o.match(/^[+\-]/)) { + b5.o = "{" + b5.o + "}"; + } + + res += b5.o; + } // + // q and d + // + + + if (buf.dType === 'kv') { + if (b5.d || b5.q) { + res += "{\\vphantom{X}}"; + } + + if (b5.d) { + res += "^{" + b5.d + "}"; + } + + if (b5.q) { + res += "_{\\smash[t]{" + b5.q + "}}"; + } + } else if (buf.dType === 'oxidation') { + if (b5.d) { + res += "{\\vphantom{X}}"; + res += "^{" + b5.d + "}"; + } + + if (b5.q) { + res += "{\\vphantom{X}}"; + res += "_{\\smash[t]{" + b5.q + "}}"; + } + } else { + if (b5.q) { + res += "{\\vphantom{X}}"; + res += "_{\\smash[t]{" + b5.q + "}}"; + } + + if (b5.d) { + res += "{\\vphantom{X}}"; + res += "^{" + b5.d + "}"; + } + } + + break; + + case 'rm': + res = "\\mathrm{" + buf.p1 + "}"; + break; + + case 'text': + if (buf.p1.match(/[\^_]/)) { + buf.p1 = buf.p1.replace(" ", "~").replace("-", "\\text{-}"); + res = "\\mathrm{" + buf.p1 + "}"; + } else { + res = "\\text{" + buf.p1 + "}"; + } + + break; + + case 'roman numeral': + res = "\\mathrm{" + buf.p1 + "}"; + break; + + case 'state of aggregation': + res = "\\mskip2mu " + texify._goInner(buf.p1); + break; + + case 'state of aggregation subscript': + res = "\\mskip1mu " + texify._goInner(buf.p1); + break; + + case 'bond': + res = texify._getBond(buf.kind_); + + if (!res) { + throw ["MhchemErrorBond", "mhchem Error. Unknown bond type (" + buf.kind_ + ")"]; + } + + break; + + case 'frac': + var c = "\\frac{" + buf.p1 + "}{" + buf.p2 + "}"; + res = "\\mathchoice{\\textstyle" + c + "}{" + c + "}{" + c + "}{" + c + "}"; + break; + + case 'pu-frac': + var d = "\\frac{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; + res = "\\mathchoice{\\textstyle" + d + "}{" + d + "}{" + d + "}{" + d + "}"; + break; + + case 'tex-math': + res = buf.p1 + " "; + break; + + case 'frac-ce': + res = "\\frac{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; + break; + + case 'overset': + res = "\\overset{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; + break; + + case 'underset': + res = "\\underset{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; + break; + + case 'underbrace': + res = "\\underbrace{" + texify._goInner(buf.p1) + "}_{" + texify._goInner(buf.p2) + "}"; + break; + + case 'color': + res = "{\\color{" + buf.color1 + "}{" + texify._goInner(buf.color2) + "}}"; + break; + + case 'color0': + res = "\\color{" + buf.color + "}"; + break; + + case 'arrow': + var b6 = { + rd: texify._goInner(buf.rd), + rq: texify._goInner(buf.rq) + }; + + var arrow = "\\x" + texify._getArrow(buf.r); + + if (b6.rq) { + arrow += "[{" + b6.rq + "}]"; + } + + if (b6.rd) { + arrow += "{" + b6.rd + "}"; + } else { + arrow += "{}"; + } + + res = arrow; + break; + + case 'operator': + res = texify._getOperator(buf.kind_); + break; + + case '1st-level escape': + res = buf.p1 + " "; // &, \\\\, \\hlin + + break; + + case 'space': + res = " "; + break; + + case 'entitySkip': + res = "~"; + break; + + case 'pu-space-1': + res = "~"; + break; + + case 'pu-space-2': + res = "\\mkern3mu "; + break; + + case '1000 separator': + res = "\\mkern2mu "; + break; + + case 'commaDecimal': + res = "{,}"; + break; + + case 'comma enumeration L': + res = "{" + buf.p1 + "}\\mkern6mu "; + break; + + case 'comma enumeration M': + res = "{" + buf.p1 + "}\\mkern3mu "; + break; + + case 'comma enumeration S': + res = "{" + buf.p1 + "}\\mkern1mu "; + break; + + case 'hyphen': + res = "\\text{-}"; + break; + + case 'addition compound': + res = "\\,{\\cdot}\\,"; + break; + + case 'electron dot': + res = "\\mkern1mu \\bullet\\mkern1mu "; + break; + + case 'KV x': + res = "{\\times}"; + break; + + case 'prime': + res = "\\prime "; + break; + + case 'cdot': + res = "\\cdot "; + break; + + case 'tight cdot': + res = "\\mkern1mu{\\cdot}\\mkern1mu "; + break; + + case 'times': + res = "\\times "; + break; + + case 'circa': + res = "{\\sim}"; + break; + + case '^': + res = "uparrow"; + break; + + case 'v': + res = "downarrow"; + break; + + case 'ellipsis': + res = "\\ldots "; + break; + + case '/': + res = "/"; + break; + + case ' / ': + res = "\\,/\\,"; + break; + + default: + throw ["MhchemBugT", "mhchem bug T. Please report."]; + // Missing texify rule or unknown MhchemParser output + } + return res; + }, + _getArrow: function _getArrow(a) { + switch (a) { + case "->": + return "rightarrow"; + + case "\u2192": + return "rightarrow"; + + case "\u27F6": + return "rightarrow"; + + case "<-": + return "leftarrow"; + + case "<->": + return "leftrightarrow"; + + case "<-->": + return "rightleftarrows"; + + case "<=>": + return "rightleftharpoons"; + + case "\u21CC": + return "rightleftharpoons"; + + case "<=>>": + return "rightequilibrium"; + + case "<<=>": + return "leftequilibrium"; + + default: + throw ["MhchemBugT", "mhchem bug T. Please report."]; + } + }, + _getBond: function _getBond(a) { + switch (a) { + case "-": + return "{-}"; + + case "1": + return "{-}"; + + case "=": + return "{=}"; + + case "2": + return "{=}"; + + case "#": + return "{\\equiv}"; + + case "3": + return "{\\equiv}"; + + case "~": + return "{\\tripledash}"; + + case "~-": + return "{\\mathrlap{\\raisebox{-.1em}{$-$}}\\raisebox{.1em}{$\\tripledash$}}"; + + case "~=": + return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}"; + + case "~--": + return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}"; + + case "-~-": + return "{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$-$}}\\tripledash}"; + + case "...": + return "{{\\cdot}{\\cdot}{\\cdot}}"; + + case "....": + return "{{\\cdot}{\\cdot}{\\cdot}{\\cdot}}"; + + case "->": + return "{\\rightarrow}"; + + case "<-": + return "{\\leftarrow}"; + + case "<": + return "{<}"; + + case ">": + return "{>}"; + + default: + throw ["MhchemBugT", "mhchem bug T. Please report."]; + } + }, + _getOperator: function _getOperator(a) { + switch (a) { + case "+": + return " {}+{} "; + + case "-": + return " {}-{} "; + + case "=": + return " {}={} "; + + case "<": + return " {}<{} "; + + case ">": + return " {}>{} "; + + case "<<": + return " {}\\ll{} "; + + case ">>": + return " {}\\gg{} "; + + case "\\pm": + return " {}\\pm{} "; + + case "\\approx": + return " {}\\approx{} "; + + case "$\\approx$": + return " {}\\approx{} "; + + case "v": + return " \\downarrow{} "; + + case "(v)": + return " \\downarrow{} "; + + case "^": + return " \\uparrow{} "; + + case "(^)": + return " \\uparrow{} "; + + default: + throw ["MhchemBugT", "mhchem bug T. Please report."]; + } + } +}; // diff --git a/adoc/katex/contrib/render-a11y-string.js b/adoc/katex/contrib/render-a11y-string.js new file mode 100644 index 00000000..34643ec2 --- /dev/null +++ b/adoc/katex/contrib/render-a11y-string.js @@ -0,0 +1,858 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(require("katex")); + else if(typeof define === 'function' && define.amd) + define(["katex"], factory); + else { + var a = typeof exports === 'object' ? factory(require("katex")) : factory(root["katex"]); + for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; + } +})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__0__) { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 1); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports) { + +module.exports = __WEBPACK_EXTERNAL_MODULE__0__; + +/***/ }), +/* 1 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0); +/* harmony import */ var katex__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(katex__WEBPACK_IMPORTED_MODULE_0__); +/** + * renderA11yString returns a readable string. + * + * In some cases the string will have the proper semantic math + * meaning,: + * renderA11yString("\\frac{1}{2}"") + * -> "start fraction, 1, divided by, 2, end fraction" + * + * However, other cases do not: + * renderA11yString("f(x) = x^2") + * -> "f, left parenthesis, x, right parenthesis, equals, x, squared" + * + * The commas in the string aim to increase ease of understanding + * when read by a screenreader. + */ +// NOTE: since we're importing types here these files won't actually be +// included in the build. +// $FlowIgnore: we import the types directly anyways + +var stringMap = { + "(": "left parenthesis", + ")": "right parenthesis", + "[": "open bracket", + "]": "close bracket", + "\\{": "left brace", + "\\}": "right brace", + "\\lvert": "open vertical bar", + "\\rvert": "close vertical bar", + "|": "vertical bar", + "\\uparrow": "up arrow", + "\\Uparrow": "up arrow", + "\\downarrow": "down arrow", + "\\Downarrow": "down arrow", + "\\updownarrow": "up down arrow", + "\\leftarrow": "left arrow", + "\\Leftarrow": "left arrow", + "\\rightarrow": "right arrow", + "\\Rightarrow": "right arrow", + "\\langle": "open angle", + "\\rangle": "close angle", + "\\lfloor": "open floor", + "\\rfloor": "close floor", + "\\int": "integral", + "\\intop": "integral", + "\\lim": "limit", + "\\ln": "natural log", + "\\log": "log", + "\\sin": "sine", + "\\cos": "cosine", + "\\tan": "tangent", + "\\cot": "cotangent", + "\\sum": "sum", + "/": "slash", + ",": "comma", + ".": "point", + "-": "negative", + "+": "plus", + "~": "tilde", + ":": "colon", + "?": "question mark", + "'": "apostrophe", + "\\%": "percent", + " ": "space", + "\\ ": "space", + "\\$": "dollar sign", + "\\angle": "angle", + "\\degree": "degree", + "\\circ": "circle", + "\\vec": "vector", + "\\triangle": "triangle", + "\\pi": "pi", + "\\prime": "prime", + "\\infty": "infinity", + "\\alpha": "alpha", + "\\beta": "beta", + "\\gamma": "gamma", + "\\omega": "omega", + "\\theta": "theta", + "\\sigma": "sigma", + "\\lambda": "lambda", + "\\tau": "tau", + "\\Delta": "delta", + "\\delta": "delta", + "\\mu": "mu", + "\\rho": "rho", + "\\nabla": "del", + "\\ell": "ell", + "\\ldots": "dots", + // TODO: add entries for all accents + "\\hat": "hat", + "\\acute": "acute" +}; +var powerMap = { + "prime": "prime", + "degree": "degrees", + "circle": "degrees", + "2": "squared", + "3": "cubed" +}; +var openMap = { + "|": "open vertical bar", + ".": "" +}; +var closeMap = { + "|": "close vertical bar", + ".": "" +}; +var binMap = { + "+": "plus", + "-": "minus", + "\\pm": "plus minus", + "\\cdot": "dot", + "*": "times", + "/": "divided by", + "\\times": "times", + "\\div": "divided by", + "\\circ": "circle", + "\\bullet": "bullet" +}; +var relMap = { + "=": "equals", + "\\approx": "approximately equals", + "≠": "does not equal", + "\\geq": "is greater than or equal to", + "\\ge": "is greater than or equal to", + "\\leq": "is less than or equal to", + "\\le": "is less than or equal to", + ">": "is greater than", + "<": "is less than", + "\\leftarrow": "left arrow", + "\\Leftarrow": "left arrow", + "\\rightarrow": "right arrow", + "\\Rightarrow": "right arrow", + ":": "colon" +}; +var accentUnderMap = { + "\\underleftarrow": "left arrow", + "\\underrightarrow": "right arrow", + "\\underleftrightarrow": "left-right arrow", + "\\undergroup": "group", + "\\underlinesegment": "line segment", + "\\utilde": "tilde" +}; + +var buildString = function buildString(str, type, a11yStrings) { + if (!str) { + return; + } + + var ret; + + if (type === "open") { + ret = str in openMap ? openMap[str] : stringMap[str] || str; + } else if (type === "close") { + ret = str in closeMap ? closeMap[str] : stringMap[str] || str; + } else if (type === "bin") { + ret = binMap[str] || str; + } else if (type === "rel") { + ret = relMap[str] || str; + } else { + ret = stringMap[str] || str; + } // If the text to add is a number and there is already a string + // in the list and the last string is a number then we should + // combine them into a single number + + + if (/^\d+$/.test(ret) && a11yStrings.length > 0 && // TODO(kevinb): check that the last item in a11yStrings is a string + // I think we might be able to drop the nested arrays, which would make + // this easier to type - $FlowFixMe + /^\d+$/.test(a11yStrings[a11yStrings.length - 1])) { + a11yStrings[a11yStrings.length - 1] += ret; + } else if (ret) { + a11yStrings.push(ret); + } +}; + +var buildRegion = function buildRegion(a11yStrings, callback) { + var regionStrings = []; + a11yStrings.push(regionStrings); + callback(regionStrings); +}; + +var handleObject = function handleObject(tree, a11yStrings, atomType) { + // Everything else is assumed to be an object... + switch (tree.type) { + case "accent": + { + buildRegion(a11yStrings, function (a11yStrings) { + buildA11yStrings(tree.base, a11yStrings, atomType); + a11yStrings.push("with"); + buildString(tree.label, "normal", a11yStrings); + a11yStrings.push("on top"); + }); + break; + } + + case "accentUnder": + { + buildRegion(a11yStrings, function (a11yStrings) { + buildA11yStrings(tree.base, a11yStrings, atomType); + a11yStrings.push("with"); + buildString(accentUnderMap[tree.label], "normal", a11yStrings); + a11yStrings.push("underneath"); + }); + break; + } + + case "accent-token": + { + // Used internally by accent symbols. + break; + } + + case "atom": + { + var text = tree.text; + + switch (tree.family) { + case "bin": + { + buildString(text, "bin", a11yStrings); + break; + } + + case "close": + { + buildString(text, "close", a11yStrings); + break; + } + // TODO(kevinb): figure out what should be done for inner + + case "inner": + { + buildString(tree.text, "inner", a11yStrings); + break; + } + + case "open": + { + buildString(text, "open", a11yStrings); + break; + } + + case "punct": + { + buildString(text, "punct", a11yStrings); + break; + } + + case "rel": + { + buildString(text, "rel", a11yStrings); + break; + } + + default: + { + tree.family; + throw new Error("\"" + tree.family + "\" is not a valid atom type"); + } + } + + break; + } + + case "color": + { + var color = tree.color.replace(/katex-/, ""); + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start color " + color); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end color " + color); + }); + break; + } + + case "color-token": + { + // Used by \color, \colorbox, and \fcolorbox but not directly rendered. + // It's a leaf node and has no children so just break. + break; + } + + case "delimsizing": + { + if (tree.delim && tree.delim !== ".") { + buildString(tree.delim, "normal", a11yStrings); + } + + break; + } + + case "genfrac": + { + buildRegion(a11yStrings, function (regionStrings) { + // genfrac can have unbalanced delimiters + var leftDelim = tree.leftDelim, + rightDelim = tree.rightDelim; // NOTE: Not sure if this is a safe assumption + // hasBarLine true -> fraction, false -> binomial + + if (tree.hasBarLine) { + regionStrings.push("start fraction"); + leftDelim && buildString(leftDelim, "open", regionStrings); + buildA11yStrings(tree.numer, regionStrings, atomType); + regionStrings.push("divided by"); + buildA11yStrings(tree.denom, regionStrings, atomType); + rightDelim && buildString(rightDelim, "close", regionStrings); + regionStrings.push("end fraction"); + } else { + regionStrings.push("start binomial"); + leftDelim && buildString(leftDelim, "open", regionStrings); + buildA11yStrings(tree.numer, regionStrings, atomType); + regionStrings.push("over"); + buildA11yStrings(tree.denom, regionStrings, atomType); + rightDelim && buildString(rightDelim, "close", regionStrings); + regionStrings.push("end binomial"); + } + }); + break; + } + + case "kern": + { + // No op: we don't attempt to present kerning information + // to the screen reader. + break; + } + + case "leftright": + { + buildRegion(a11yStrings, function (regionStrings) { + buildString(tree.left, "open", regionStrings); + buildA11yStrings(tree.body, regionStrings, atomType); + buildString(tree.right, "close", regionStrings); + }); + break; + } + + case "leftright-right": + { + // TODO: double check that this is a no-op + break; + } + + case "lap": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "mathord": + { + buildString(tree.text, "normal", a11yStrings); + break; + } + + case "op": + { + var body = tree.body, + name = tree.name; + + if (body) { + buildA11yStrings(body, a11yStrings, atomType); + } else if (name) { + buildString(name, "normal", a11yStrings); + } + + break; + } + + case "op-token": + { + // Used internally by operator symbols. + buildString(tree.text, atomType, a11yStrings); + break; + } + + case "ordgroup": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "overline": + { + buildRegion(a11yStrings, function (a11yStrings) { + a11yStrings.push("start overline"); + buildA11yStrings(tree.body, a11yStrings, atomType); + a11yStrings.push("end overline"); + }); + break; + } + + case "phantom": + { + a11yStrings.push("empty space"); + break; + } + + case "raisebox": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "rule": + { + a11yStrings.push("rectangle"); + break; + } + + case "sizing": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "spacing": + { + a11yStrings.push("space"); + break; + } + + case "styling": + { + // We ignore the styling and just pass through the contents + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "sqrt": + { + buildRegion(a11yStrings, function (regionStrings) { + var body = tree.body, + index = tree.index; + + if (index) { + var indexString = flatten(buildA11yStrings(index, [], atomType)).join(","); + + if (indexString === "3") { + regionStrings.push("cube root of"); + buildA11yStrings(body, regionStrings, atomType); + regionStrings.push("end cube root"); + return; + } + + regionStrings.push("root"); + regionStrings.push("start index"); + buildA11yStrings(index, regionStrings, atomType); + regionStrings.push("end index"); + return; + } + + regionStrings.push("square root of"); + buildA11yStrings(body, regionStrings, atomType); + regionStrings.push("end square root"); + }); + break; + } + + case "supsub": + { + var base = tree.base, + sub = tree.sub, + sup = tree.sup; + var isLog = false; + + if (base) { + buildA11yStrings(base, a11yStrings, atomType); + isLog = base.type === "op" && base.name === "\\log"; + } + + if (sub) { + var regionName = isLog ? "base" : "subscript"; + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start " + regionName); + buildA11yStrings(sub, regionStrings, atomType); + regionStrings.push("end " + regionName); + }); + } + + if (sup) { + buildRegion(a11yStrings, function (regionStrings) { + var supString = flatten(buildA11yStrings(sup, [], atomType)).join(","); + + if (supString in powerMap) { + regionStrings.push(powerMap[supString]); + return; + } + + regionStrings.push("start superscript"); + buildA11yStrings(sup, regionStrings, atomType); + regionStrings.push("end superscript"); + }); + } + + break; + } + + case "text": + { + // TODO: handle other fonts + if (tree.font === "\\textbf") { + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start bold text"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end bold text"); + }); + break; + } + + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start text"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end text"); + }); + break; + } + + case "textord": + { + buildString(tree.text, atomType, a11yStrings); + break; + } + + case "smash": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "enclose": + { + // TODO: create a map for these. + // TODO: differentiate between a body with a single atom, e.g. + // "cancel a" instead of "start cancel, a, end cancel" + if (/cancel/.test(tree.label)) { + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start cancel"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end cancel"); + }); + break; + } else if (/box/.test(tree.label)) { + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start box"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end box"); + }); + break; + } else if (/sout/.test(tree.label)) { + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start strikeout"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end strikeout"); + }); + break; + } + + throw new Error("KaTeX-a11y: enclose node with " + tree.label + " not supported yet"); + } + + case "vphantom": + { + throw new Error("KaTeX-a11y: vphantom not implemented yet"); + } + + case "hphantom": + { + throw new Error("KaTeX-a11y: hphantom not implemented yet"); + } + + case "operatorname": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "array": + { + throw new Error("KaTeX-a11y: array not implemented yet"); + } + + case "raw": + { + throw new Error("KaTeX-a11y: raw not implemented yet"); + } + + case "size": + { + // Although there are nodes of type "size" in the parse tree, they have + // no semantic meaning and should be ignored. + break; + } + + case "url": + { + throw new Error("KaTeX-a11y: url not implemented yet"); + } + + case "tag": + { + throw new Error("KaTeX-a11y: tag not implemented yet"); + } + + case "verb": + { + buildString("start verbatim", "normal", a11yStrings); + buildString(tree.body, "normal", a11yStrings); + buildString("end verbatim", "normal", a11yStrings); + break; + } + + case "environment": + { + throw new Error("KaTeX-a11y: environment not implemented yet"); + } + + case "horizBrace": + { + buildString("start " + tree.label.slice(1), "normal", a11yStrings); + buildA11yStrings(tree.base, a11yStrings, atomType); + buildString("end " + tree.label.slice(1), "normal", a11yStrings); + break; + } + + case "infix": + { + // All infix nodes are replace with other nodes. + break; + } + + case "includegraphics": + { + throw new Error("KaTeX-a11y: includegraphics not implemented yet"); + } + + case "font": + { + // TODO: callout the start/end of specific fonts + // TODO: map \BBb{N} to "the naturals" or something like that + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "href": + { + throw new Error("KaTeX-a11y: href not implemented yet"); + } + + case "cr": + { + // This is used by environments. + throw new Error("KaTeX-a11y: cr not implemented yet"); + } + + case "underline": + { + buildRegion(a11yStrings, function (a11yStrings) { + a11yStrings.push("start underline"); + buildA11yStrings(tree.body, a11yStrings, atomType); + a11yStrings.push("end underline"); + }); + break; + } + + case "xArrow": + { + throw new Error("KaTeX-a11y: xArrow not implemented yet"); + } + + case "mclass": + { + // \neq and \ne are macros so we let "htmlmathml" render the mathmal + // side of things and extract the text from that. + var _atomType = tree.mclass.slice(1); // $FlowFixMe: drop the leading "m" from the values in mclass + + + buildA11yStrings(tree.body, a11yStrings, _atomType); + break; + } + + case "mathchoice": + { + // TODO: track which which style we're using, e.g. dispaly, text, etc. + // default to text style if even that may not be the correct style + buildA11yStrings(tree.text, a11yStrings, atomType); + break; + } + + case "htmlmathml": + { + buildA11yStrings(tree.mathml, a11yStrings, atomType); + break; + } + + case "middle": + { + buildString(tree.delim, atomType, a11yStrings); + break; + } + + default: + tree.type; + throw new Error("KaTeX a11y un-recognized type: " + tree.type); + } +}; + +var buildA11yStrings = function buildA11yStrings(tree, a11yStrings, atomType) { + if (a11yStrings === void 0) { + a11yStrings = []; + } + + if (tree instanceof Array) { + for (var i = 0; i < tree.length; i++) { + buildA11yStrings(tree[i], a11yStrings, atomType); + } + } else { + handleObject(tree, a11yStrings, atomType); + } + + return a11yStrings; +}; + +var flatten = function flatten(array) { + var result = []; + array.forEach(function (item) { + if (item instanceof Array) { + result = result.concat(flatten(item)); + } else { + result.push(item); + } + }); + return result; +}; + +var renderA11yString = function renderA11yString(text, settings) { + var tree = katex__WEBPACK_IMPORTED_MODULE_0___default.a.__parse(text, settings); + + var a11yStrings = buildA11yStrings(tree, [], "normal"); + return flatten(a11yStrings).join(", "); +}; + +/* harmony default export */ __webpack_exports__["default"] = (renderA11yString); + +/***/ }) +/******/ ])["default"]; +}); \ No newline at end of file diff --git a/adoc/katex/contrib/render-a11y-string.min.js b/adoc/katex/contrib/render-a11y-string.min.js new file mode 100644 index 00000000..0dcac271 --- /dev/null +++ b/adoc/katex/contrib/render-a11y-string.min.js @@ -0,0 +1 @@ +!function(e,r){if("object"==typeof exports&&"object"==typeof module)module.exports=r(require("katex"));else if("function"==typeof define&&define.amd)define(["katex"],r);else{var t="object"==typeof exports?r(require("katex")):r(e.katex);for(var a in t)("object"==typeof exports?exports:e)[a]=t[a]}}("undefined"!=typeof self?self:this,function(e){return function(e){var r={};function t(a){if(r[a])return r[a].exports;var o=r[a]={i:a,l:!1,exports:{}};return e[a].call(o.exports,o,o.exports,t),o.l=!0,o.exports}return t.m=e,t.c=r,t.d=function(e,r,a){t.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:a})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,r){if(1&r&&(e=t(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(t.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var o in e)t.d(a,o,function(r){return e[r]}.bind(null,o));return a},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},t.p="",t(t.s=1)}([function(r,t){r.exports=e},function(e,r,t){"use strict";t.r(r);var a=t(0),o=t.n(a),n={"(":"left parenthesis",")":"right parenthesis","[":"open bracket","]":"close bracket","\\{":"left brace","\\}":"right brace","\\lvert":"open vertical bar","\\rvert":"close vertical bar","|":"vertical bar","\\uparrow":"up arrow","\\Uparrow":"up arrow","\\downarrow":"down arrow","\\Downarrow":"down arrow","\\updownarrow":"up down arrow","\\leftarrow":"left arrow","\\Leftarrow":"left arrow","\\rightarrow":"right arrow","\\Rightarrow":"right arrow","\\langle":"open angle","\\rangle":"close angle","\\lfloor":"open floor","\\rfloor":"close floor","\\int":"integral","\\intop":"integral","\\lim":"limit","\\ln":"natural log","\\log":"log","\\sin":"sine","\\cos":"cosine","\\tan":"tangent","\\cot":"cotangent","\\sum":"sum","/":"slash",",":"comma",".":"point","-":"negative","+":"plus","~":"tilde",":":"colon","?":"question mark","'":"apostrophe","\\%":"percent"," ":"space","\\ ":"space","\\$":"dollar sign","\\angle":"angle","\\degree":"degree","\\circ":"circle","\\vec":"vector","\\triangle":"triangle","\\pi":"pi","\\prime":"prime","\\infty":"infinity","\\alpha":"alpha","\\beta":"beta","\\gamma":"gamma","\\omega":"omega","\\theta":"theta","\\sigma":"sigma","\\lambda":"lambda","\\tau":"tau","\\Delta":"delta","\\delta":"delta","\\mu":"mu","\\rho":"rho","\\nabla":"del","\\ell":"ell","\\ldots":"dots","\\hat":"hat","\\acute":"acute"},s={prime:"prime",degree:"degrees",circle:"degrees",2:"squared",3:"cubed"},i={"|":"open vertical bar",".":""},l={"|":"close vertical bar",".":""},c={"+":"plus","-":"minus","\\pm":"plus minus","\\cdot":"dot","*":"times","/":"divided by","\\times":"times","\\div":"divided by","\\circ":"circle","\\bullet":"bullet"},u={"=":"equals","\\approx":"approximately equals","\u2260":"does not equal","\\geq":"is greater than or equal to","\\ge":"is greater than or equal to","\\leq":"is less than or equal to","\\le":"is less than or equal to",">":"is greater than","<":"is less than","\\leftarrow":"left arrow","\\Leftarrow":"left arrow","\\rightarrow":"right arrow","\\Rightarrow":"right arrow",":":"colon"},p={"\\underleftarrow":"left arrow","\\underrightarrow":"right arrow","\\underleftrightarrow":"left-right arrow","\\undergroup":"group","\\underlinesegment":"line segment","\\utilde":"tilde"},d=function(e,r,t){var a;e&&(/^\d+$/.test(a="open"===r?e in i?i[e]:n[e]||e:"close"===r?e in l?l[e]:n[e]||e:"bin"===r?c[e]||e:"rel"===r?u[e]||e:n[e]||e)&&t.length>0&&/^\d+$/.test(t[t.length-1])?t[t.length-1]+=a:a&&t.push(a))},b=function(e,r){var t=[];e.push(t),r(t)},h=function(e,r,t){switch(e.type){case"accent":b(r,function(r){f(e.base,r,t),r.push("with"),d(e.label,"normal",r),r.push("on top")});break;case"accentUnder":b(r,function(r){f(e.base,r,t),r.push("with"),d(p[e.label],"normal",r),r.push("underneath")});break;case"accent-token":break;case"atom":var a=e.text;switch(e.family){case"bin":d(a,"bin",r);break;case"close":d(a,"close",r);break;case"inner":d(e.text,"inner",r);break;case"open":d(a,"open",r);break;case"punct":d(a,"punct",r);break;case"rel":d(a,"rel",r);break;default:throw e.family,new Error('"'+e.family+'" is not a valid atom type')}break;case"color":var o=e.color.replace(/katex-/,"");b(r,function(r){r.push("start color "+o),f(e.body,r,t),r.push("end color "+o)});break;case"color-token":break;case"delimsizing":e.delim&&"."!==e.delim&&d(e.delim,"normal",r);break;case"genfrac":b(r,function(r){var a=e.leftDelim,o=e.rightDelim;e.hasBarLine?(r.push("start fraction"),a&&d(a,"open",r),f(e.numer,r,t),r.push("divided by"),f(e.denom,r,t),o&&d(o,"close",r),r.push("end fraction")):(r.push("start binomial"),a&&d(a,"open",r),f(e.numer,r,t),r.push("over"),f(e.denom,r,t),o&&d(o,"close",r),r.push("end binomial"))});break;case"kern":break;case"leftright":b(r,function(r){d(e.left,"open",r),f(e.body,r,t),d(e.right,"close",r)});break;case"leftright-right":break;case"lap":f(e.body,r,t);break;case"mathord":d(e.text,"normal",r);break;case"op":var n=e.body,i=e.name;n?f(n,r,t):i&&d(i,"normal",r);break;case"op-token":d(e.text,t,r);break;case"ordgroup":f(e.body,r,t);break;case"overline":b(r,function(r){r.push("start overline"),f(e.body,r,t),r.push("end overline")});break;case"phantom":r.push("empty space");break;case"raisebox":f(e.body,r,t);break;case"rule":r.push("rectangle");break;case"sizing":f(e.body,r,t);break;case"spacing":r.push("space");break;case"styling":f(e.body,r,t);break;case"sqrt":b(r,function(r){var a=e.body,o=e.index;if(o)return"3"===m(f(o,[],t)).join(",")?(r.push("cube root of"),f(a,r,t),void r.push("end cube root")):(r.push("root"),r.push("start index"),f(o,r,t),void r.push("end index"));r.push("square root of"),f(a,r,t),r.push("end square root")});break;case"supsub":var l=e.base,c=e.sub,u=e.sup,h=!1;if(l&&(f(l,r,t),h="op"===l.type&&"\\log"===l.name),c){var y=h?"base":"subscript";b(r,function(e){e.push("start "+y),f(c,e,t),e.push("end "+y)})}u&&b(r,function(e){var r=m(f(u,[],t)).join(",");r in s?e.push(s[r]):(e.push("start superscript"),f(u,e,t),e.push("end superscript"))});break;case"text":if("\\textbf"===e.font){b(r,function(r){r.push("start bold text"),f(e.body,r,t),r.push("end bold text")});break}b(r,function(r){r.push("start text"),f(e.body,r,t),r.push("end text")});break;case"textord":d(e.text,t,r);break;case"smash":f(e.body,r,t);break;case"enclose":if(/cancel/.test(e.label)){b(r,function(r){r.push("start cancel"),f(e.body,r,t),r.push("end cancel")});break}if(/box/.test(e.label)){b(r,function(r){r.push("start box"),f(e.body,r,t),r.push("end box")});break}if(/sout/.test(e.label)){b(r,function(r){r.push("start strikeout"),f(e.body,r,t),r.push("end strikeout")});break}throw new Error("KaTeX-a11y: enclose node with "+e.label+" not supported yet");case"vphantom":throw new Error("KaTeX-a11y: vphantom not implemented yet");case"hphantom":throw new Error("KaTeX-a11y: hphantom not implemented yet");case"operatorname":f(e.body,r,t);break;case"array":throw new Error("KaTeX-a11y: array not implemented yet");case"raw":throw new Error("KaTeX-a11y: raw not implemented yet");case"size":break;case"url":throw new Error("KaTeX-a11y: url not implemented yet");case"tag":throw new Error("KaTeX-a11y: tag not implemented yet");case"verb":d("start verbatim","normal",r),d(e.body,"normal",r),d("end verbatim","normal",r);break;case"environment":throw new Error("KaTeX-a11y: environment not implemented yet");case"horizBrace":d("start "+e.label.slice(1),"normal",r),f(e.base,r,t),d("end "+e.label.slice(1),"normal",r);break;case"infix":break;case"includegraphics":throw new Error("KaTeX-a11y: includegraphics not implemented yet");case"font":f(e.body,r,t);break;case"href":throw new Error("KaTeX-a11y: href not implemented yet");case"cr":throw new Error("KaTeX-a11y: cr not implemented yet");case"underline":b(r,function(r){r.push("start underline"),f(e.body,r,t),r.push("end underline")});break;case"xArrow":throw new Error("KaTeX-a11y: xArrow not implemented yet");case"mclass":var g=e.mclass.slice(1);f(e.body,r,g);break;case"mathchoice":f(e.text,r,t);break;case"htmlmathml":f(e.mathml,r,t);break;case"middle":d(e.delim,t,r);break;default:throw e.type,new Error("KaTeX a11y un-recognized type: "+e.type)}},f=function e(r,t,a){if(void 0===t&&(t=[]),r instanceof Array)for(var o=0;o "start fraction, 1, divided by, 2, end fraction" + * + * However, other cases do not: + * renderA11yString("f(x) = x^2") + * -> "f, left parenthesis, x, right parenthesis, equals, x, squared" + * + * The commas in the string aim to increase ease of understanding + * when read by a screenreader. + */ +const stringMap = { + "(": "left parenthesis", + ")": "right parenthesis", + "[": "open bracket", + "]": "close bracket", + "\\{": "left brace", + "\\}": "right brace", + "\\lvert": "open vertical bar", + "\\rvert": "close vertical bar", + "|": "vertical bar", + "\\uparrow": "up arrow", + "\\Uparrow": "up arrow", + "\\downarrow": "down arrow", + "\\Downarrow": "down arrow", + "\\updownarrow": "up down arrow", + "\\leftarrow": "left arrow", + "\\Leftarrow": "left arrow", + "\\rightarrow": "right arrow", + "\\Rightarrow": "right arrow", + "\\langle": "open angle", + "\\rangle": "close angle", + "\\lfloor": "open floor", + "\\rfloor": "close floor", + "\\int": "integral", + "\\intop": "integral", + "\\lim": "limit", + "\\ln": "natural log", + "\\log": "log", + "\\sin": "sine", + "\\cos": "cosine", + "\\tan": "tangent", + "\\cot": "cotangent", + "\\sum": "sum", + "/": "slash", + ",": "comma", + ".": "point", + "-": "negative", + "+": "plus", + "~": "tilde", + ":": "colon", + "?": "question mark", + "'": "apostrophe", + "\\%": "percent", + " ": "space", + "\\ ": "space", + "\\$": "dollar sign", + "\\angle": "angle", + "\\degree": "degree", + "\\circ": "circle", + "\\vec": "vector", + "\\triangle": "triangle", + "\\pi": "pi", + "\\prime": "prime", + "\\infty": "infinity", + "\\alpha": "alpha", + "\\beta": "beta", + "\\gamma": "gamma", + "\\omega": "omega", + "\\theta": "theta", + "\\sigma": "sigma", + "\\lambda": "lambda", + "\\tau": "tau", + "\\Delta": "delta", + "\\delta": "delta", + "\\mu": "mu", + "\\rho": "rho", + "\\nabla": "del", + "\\ell": "ell", + "\\ldots": "dots", + // TODO: add entries for all accents + "\\hat": "hat", + "\\acute": "acute" +}; +const powerMap = { + "prime": "prime", + "degree": "degrees", + "circle": "degrees", + "2": "squared", + "3": "cubed" +}; +const openMap = { + "|": "open vertical bar", + ".": "" +}; +const closeMap = { + "|": "close vertical bar", + ".": "" +}; +const binMap = { + "+": "plus", + "-": "minus", + "\\pm": "plus minus", + "\\cdot": "dot", + "*": "times", + "/": "divided by", + "\\times": "times", + "\\div": "divided by", + "\\circ": "circle", + "\\bullet": "bullet" +}; +const relMap = { + "=": "equals", + "\\approx": "approximately equals", + "≠": "does not equal", + "\\geq": "is greater than or equal to", + "\\ge": "is greater than or equal to", + "\\leq": "is less than or equal to", + "\\le": "is less than or equal to", + ">": "is greater than", + "<": "is less than", + "\\leftarrow": "left arrow", + "\\Leftarrow": "left arrow", + "\\rightarrow": "right arrow", + "\\Rightarrow": "right arrow", + ":": "colon" +}; +const accentUnderMap = { + "\\underleftarrow": "left arrow", + "\\underrightarrow": "right arrow", + "\\underleftrightarrow": "left-right arrow", + "\\undergroup": "group", + "\\underlinesegment": "line segment", + "\\utilde": "tilde" +}; + +const buildString = (str, type, a11yStrings) => { + if (!str) { + return; + } + + let ret; + + if (type === "open") { + ret = str in openMap ? openMap[str] : stringMap[str] || str; + } else if (type === "close") { + ret = str in closeMap ? closeMap[str] : stringMap[str] || str; + } else if (type === "bin") { + ret = binMap[str] || str; + } else if (type === "rel") { + ret = relMap[str] || str; + } else { + ret = stringMap[str] || str; + } // If the text to add is a number and there is already a string + // in the list and the last string is a number then we should + // combine them into a single number + + + if (/^\d+$/.test(ret) && a11yStrings.length > 0 && // TODO(kevinb): check that the last item in a11yStrings is a string + // I think we might be able to drop the nested arrays, which would make + // this easier to type - $FlowFixMe + /^\d+$/.test(a11yStrings[a11yStrings.length - 1])) { + a11yStrings[a11yStrings.length - 1] += ret; + } else if (ret) { + a11yStrings.push(ret); + } +}; + +const buildRegion = (a11yStrings, callback) => { + const regionStrings = []; + a11yStrings.push(regionStrings); + callback(regionStrings); +}; + +const handleObject = (tree, a11yStrings, atomType) => { + // Everything else is assumed to be an object... + switch (tree.type) { + case "accent": + { + buildRegion(a11yStrings, a11yStrings => { + buildA11yStrings(tree.base, a11yStrings, atomType); + a11yStrings.push("with"); + buildString(tree.label, "normal", a11yStrings); + a11yStrings.push("on top"); + }); + break; + } + + case "accentUnder": + { + buildRegion(a11yStrings, a11yStrings => { + buildA11yStrings(tree.base, a11yStrings, atomType); + a11yStrings.push("with"); + buildString(accentUnderMap[tree.label], "normal", a11yStrings); + a11yStrings.push("underneath"); + }); + break; + } + + case "accent-token": + { + // Used internally by accent symbols. + break; + } + + case "atom": + { + const text = tree.text; + + switch (tree.family) { + case "bin": + { + buildString(text, "bin", a11yStrings); + break; + } + + case "close": + { + buildString(text, "close", a11yStrings); + break; + } + // TODO(kevinb): figure out what should be done for inner + + case "inner": + { + buildString(tree.text, "inner", a11yStrings); + break; + } + + case "open": + { + buildString(text, "open", a11yStrings); + break; + } + + case "punct": + { + buildString(text, "punct", a11yStrings); + break; + } + + case "rel": + { + buildString(text, "rel", a11yStrings); + break; + } + + default: + { + tree.family; + throw new Error(`"${tree.family}" is not a valid atom type`); + } + } + + break; + } + + case "color": + { + const color = tree.color.replace(/katex-/, ""); + buildRegion(a11yStrings, regionStrings => { + regionStrings.push("start color " + color); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end color " + color); + }); + break; + } + + case "color-token": + { + // Used by \color, \colorbox, and \fcolorbox but not directly rendered. + // It's a leaf node and has no children so just break. + break; + } + + case "delimsizing": + { + if (tree.delim && tree.delim !== ".") { + buildString(tree.delim, "normal", a11yStrings); + } + + break; + } + + case "genfrac": + { + buildRegion(a11yStrings, regionStrings => { + // genfrac can have unbalanced delimiters + const leftDelim = tree.leftDelim, + rightDelim = tree.rightDelim; // NOTE: Not sure if this is a safe assumption + // hasBarLine true -> fraction, false -> binomial + + if (tree.hasBarLine) { + regionStrings.push("start fraction"); + leftDelim && buildString(leftDelim, "open", regionStrings); + buildA11yStrings(tree.numer, regionStrings, atomType); + regionStrings.push("divided by"); + buildA11yStrings(tree.denom, regionStrings, atomType); + rightDelim && buildString(rightDelim, "close", regionStrings); + regionStrings.push("end fraction"); + } else { + regionStrings.push("start binomial"); + leftDelim && buildString(leftDelim, "open", regionStrings); + buildA11yStrings(tree.numer, regionStrings, atomType); + regionStrings.push("over"); + buildA11yStrings(tree.denom, regionStrings, atomType); + rightDelim && buildString(rightDelim, "close", regionStrings); + regionStrings.push("end binomial"); + } + }); + break; + } + + case "kern": + { + // No op: we don't attempt to present kerning information + // to the screen reader. + break; + } + + case "leftright": + { + buildRegion(a11yStrings, regionStrings => { + buildString(tree.left, "open", regionStrings); + buildA11yStrings(tree.body, regionStrings, atomType); + buildString(tree.right, "close", regionStrings); + }); + break; + } + + case "leftright-right": + { + // TODO: double check that this is a no-op + break; + } + + case "lap": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "mathord": + { + buildString(tree.text, "normal", a11yStrings); + break; + } + + case "op": + { + const body = tree.body, + name = tree.name; + + if (body) { + buildA11yStrings(body, a11yStrings, atomType); + } else if (name) { + buildString(name, "normal", a11yStrings); + } + + break; + } + + case "op-token": + { + // Used internally by operator symbols. + buildString(tree.text, atomType, a11yStrings); + break; + } + + case "ordgroup": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "overline": + { + buildRegion(a11yStrings, function (a11yStrings) { + a11yStrings.push("start overline"); + buildA11yStrings(tree.body, a11yStrings, atomType); + a11yStrings.push("end overline"); + }); + break; + } + + case "phantom": + { + a11yStrings.push("empty space"); + break; + } + + case "raisebox": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "rule": + { + a11yStrings.push("rectangle"); + break; + } + + case "sizing": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "spacing": + { + a11yStrings.push("space"); + break; + } + + case "styling": + { + // We ignore the styling and just pass through the contents + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "sqrt": + { + buildRegion(a11yStrings, regionStrings => { + const body = tree.body, + index = tree.index; + + if (index) { + const indexString = flatten(buildA11yStrings(index, [], atomType)).join(","); + + if (indexString === "3") { + regionStrings.push("cube root of"); + buildA11yStrings(body, regionStrings, atomType); + regionStrings.push("end cube root"); + return; + } + + regionStrings.push("root"); + regionStrings.push("start index"); + buildA11yStrings(index, regionStrings, atomType); + regionStrings.push("end index"); + return; + } + + regionStrings.push("square root of"); + buildA11yStrings(body, regionStrings, atomType); + regionStrings.push("end square root"); + }); + break; + } + + case "supsub": + { + const base = tree.base, + sub = tree.sub, + sup = tree.sup; + let isLog = false; + + if (base) { + buildA11yStrings(base, a11yStrings, atomType); + isLog = base.type === "op" && base.name === "\\log"; + } + + if (sub) { + const regionName = isLog ? "base" : "subscript"; + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push(`start ${regionName}`); + buildA11yStrings(sub, regionStrings, atomType); + regionStrings.push(`end ${regionName}`); + }); + } + + if (sup) { + buildRegion(a11yStrings, function (regionStrings) { + const supString = flatten(buildA11yStrings(sup, [], atomType)).join(","); + + if (supString in powerMap) { + regionStrings.push(powerMap[supString]); + return; + } + + regionStrings.push("start superscript"); + buildA11yStrings(sup, regionStrings, atomType); + regionStrings.push("end superscript"); + }); + } + + break; + } + + case "text": + { + // TODO: handle other fonts + if (tree.font === "\\textbf") { + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start bold text"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end bold text"); + }); + break; + } + + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start text"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end text"); + }); + break; + } + + case "textord": + { + buildString(tree.text, atomType, a11yStrings); + break; + } + + case "smash": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "enclose": + { + // TODO: create a map for these. + // TODO: differentiate between a body with a single atom, e.g. + // "cancel a" instead of "start cancel, a, end cancel" + if (/cancel/.test(tree.label)) { + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start cancel"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end cancel"); + }); + break; + } else if (/box/.test(tree.label)) { + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start box"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end box"); + }); + break; + } else if (/sout/.test(tree.label)) { + buildRegion(a11yStrings, function (regionStrings) { + regionStrings.push("start strikeout"); + buildA11yStrings(tree.body, regionStrings, atomType); + regionStrings.push("end strikeout"); + }); + break; + } + + throw new Error(`KaTeX-a11y: enclose node with ${tree.label} not supported yet`); + } + + case "vphantom": + { + throw new Error("KaTeX-a11y: vphantom not implemented yet"); + } + + case "hphantom": + { + throw new Error("KaTeX-a11y: hphantom not implemented yet"); + } + + case "operatorname": + { + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "array": + { + throw new Error("KaTeX-a11y: array not implemented yet"); + } + + case "raw": + { + throw new Error("KaTeX-a11y: raw not implemented yet"); + } + + case "size": + { + // Although there are nodes of type "size" in the parse tree, they have + // no semantic meaning and should be ignored. + break; + } + + case "url": + { + throw new Error("KaTeX-a11y: url not implemented yet"); + } + + case "tag": + { + throw new Error("KaTeX-a11y: tag not implemented yet"); + } + + case "verb": + { + buildString(`start verbatim`, "normal", a11yStrings); + buildString(tree.body, "normal", a11yStrings); + buildString(`end verbatim`, "normal", a11yStrings); + break; + } + + case "environment": + { + throw new Error("KaTeX-a11y: environment not implemented yet"); + } + + case "horizBrace": + { + buildString(`start ${tree.label.slice(1)}`, "normal", a11yStrings); + buildA11yStrings(tree.base, a11yStrings, atomType); + buildString(`end ${tree.label.slice(1)}`, "normal", a11yStrings); + break; + } + + case "infix": + { + // All infix nodes are replace with other nodes. + break; + } + + case "includegraphics": + { + throw new Error("KaTeX-a11y: includegraphics not implemented yet"); + } + + case "font": + { + // TODO: callout the start/end of specific fonts + // TODO: map \BBb{N} to "the naturals" or something like that + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "href": + { + throw new Error("KaTeX-a11y: href not implemented yet"); + } + + case "cr": + { + // This is used by environments. + throw new Error("KaTeX-a11y: cr not implemented yet"); + } + + case "underline": + { + buildRegion(a11yStrings, function (a11yStrings) { + a11yStrings.push("start underline"); + buildA11yStrings(tree.body, a11yStrings, atomType); + a11yStrings.push("end underline"); + }); + break; + } + + case "xArrow": + { + throw new Error("KaTeX-a11y: xArrow not implemented yet"); + } + + case "mclass": + { + // \neq and \ne are macros so we let "htmlmathml" render the mathmal + // side of things and extract the text from that. + const atomType = tree.mclass.slice(1); // $FlowFixMe: drop the leading "m" from the values in mclass + + buildA11yStrings(tree.body, a11yStrings, atomType); + break; + } + + case "mathchoice": + { + // TODO: track which which style we're using, e.g. dispaly, text, etc. + // default to text style if even that may not be the correct style + buildA11yStrings(tree.text, a11yStrings, atomType); + break; + } + + case "htmlmathml": + { + buildA11yStrings(tree.mathml, a11yStrings, atomType); + break; + } + + case "middle": + { + buildString(tree.delim, atomType, a11yStrings); + break; + } + + default: + tree.type; + throw new Error("KaTeX a11y un-recognized type: " + tree.type); + } +}; + +const buildA11yStrings = function buildA11yStrings(tree, a11yStrings, atomType) { + if (a11yStrings === void 0) { + a11yStrings = []; + } + + if (tree instanceof Array) { + for (let i = 0; i < tree.length; i++) { + buildA11yStrings(tree[i], a11yStrings, atomType); + } + } else { + handleObject(tree, a11yStrings, atomType); + } + + return a11yStrings; +}; + +const flatten = function flatten(array) { + let result = []; + array.forEach(function (item) { + if (item instanceof Array) { + result = result.concat(flatten(item)); + } else { + result.push(item); + } + }); + return result; +}; + +const renderA11yString = function renderA11yString(text, settings) { + const tree = katex.__parse(text, settings); + + const a11yStrings = buildA11yStrings(tree, [], "normal"); + return flatten(a11yStrings).join(", "); +}; + +export default renderA11yString; diff --git a/adoc/katex/fonts/KaTeX_AMS-Regular.ttf b/adoc/katex/fonts/KaTeX_AMS-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..afcd2eb4d1488b6eb04b00302eaa6e223812b012 GIT binary patch literal 70972 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Ũ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 literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_AMS-Regular.woff2 b/adoc/katex/fonts/KaTeX_AMS-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b982d6eaf85fcd6eaa94a0302bdf1db9c08e8231 GIT binary patch literal 32944 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 XQglzIQbW0WGIxjiEcVqP&vyPh#XzB! literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_Main-Italic.woff b/adoc/katex/fonts/KaTeX_Main-Italic.woff new file mode 100644 index 0000000000000000000000000000000000000000..1184295def56183abcff437cd382b3b295a8bac0 GIT binary patch literal 26228 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 X(ymb24FE{wN(KM`00962|Nj6Ffm3-< literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_Main-Italic.woff2 b/adoc/katex/fonts/KaTeX_Main-Italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..aa05e142c4293315104e02adac9ed65dff454deb GIT binary patch literal 22748 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 literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_Main-Regular.ttf b/adoc/katex/fonts/KaTeX_Main-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8acb365453b7590425ad0fe65c41a5488d3d64e9 GIT binary patch literal 69520 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 literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_Main-Regular.woff b/adoc/katex/fonts/KaTeX_Main-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..9f8228fc38b5d404b5573cad5b33f28dbfb47cf7 GIT binary patch literal 38112 zcmY&eV~{4WvK`yDjUC(m#F!7%}1h{Qq+Q-{h4Un1O&ok^ZsD|6m~2r-g28Yv}NgGXVkunF9g> zGjc=jfi-q>Ap!!56a1&4`v-0i6~q8D2Xk8>pa@nVAn<4)AlURZw9PwnL+5|7DQo{U zQ2zsxxs9jUza&I~fc*aPXAtV&0zej~hX2+N3izjC|1Z$nU9~O#kw8EpcmI5%e;|WK zheWZkb@BM8YyX$aKOI=WN&x4xjlJ

$StPWZn#W37p_HT3wmZvfu^Vu?Ux-~#Oo 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 I0ssF14_>G65dZ)H literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_Main-Regular.woff2 b/adoc/katex/fonts/KaTeX_Main-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e3f71eb7e9c0568f6144e45c59b3000ed3dda7d4 GIT binary patch literal 32464 zcmV(~K+nH-Pew8T0RR910DjN_4gdfE0T7@70Dg7=0RR9100000000000000000000 z00006U;v0>2s#Ou7ZC^wgVGp-f=dB50we>801Jdd00bZfjavtfQw)I$8<*uL(A&2l z(VJD0EP&^(W+AX~fUzG-oQ3p*lL{pJ|Nj${ij0}GkhWuvfhgYpEI|=gR!eF^$k<3M zp+upM%52;pRYiJ;hP~6Iab!n@d19wdQHj=sL{cKtc;-ktT-Rh_p2CHO;do7N^X>=^ z$PCE)mivZ`WKq38`xG{-;fIsOVu=!Ur2SnsPFEPBuQiqy9l^hLcvAF-uo7|zDrdW_ ze{}1Ev=Um&d2RFNZGF=*ZdqsV_2OFbL|L~PlJ#1A5#UY_k>Wy5|9Lv!&b=?>d?npC z1ylOFkWvfjuYuj20n*KGB$vy+yJQ0)gFqk<5&{WBAd4h~00|^)SxZos%5Wf4ae*jm zT{w1!v)0kR9s16yZKcyX+DeCGwsz|O|EtU2`?Px{*_K7|U`U_R3q-&$sa}dF#ZgLS zdBNvf@8c)0nJ$0Hw`7_rf-n}*LfikWC>2OE%OZA%*q6g{hDsJqo)z^k>U7oQaG2l* z?B0;Np%?u}o%STlu|ouHLr#AYV3=>4ZWw#?O?`KqzulG>1U3uMESWIGd$;yeQ^j%M z!(}+NEVV3f2qgyqAHsp{6cFOSL`opQYxK>Px9y{V5|GNhe7>6jV1UbDqx7OIfg8JM z?SJ#??6nj?$CgYnM`8mf_ksM&G%bCdhE8)1+WUJO{CqlnlRkZ0(g{z<2B4f}q9B!V z>)5fw)@9%nBDA%g=SRCuRV1^jzv&lS0i9%4*NR{q||pSnF?5FO@>XlN1l zjeGUfQ$glyvoDB@!2gbnuep(AMC`WLsy)JOUkQOEZGnh(d!#$)9H zrzJ;)D)W>W_*qT?8qoi|?6sjZ;|qCr&5SMwK=x}cz$<>mj}1|jGo1l2|7)tfKVtBG zm79<(_D_Awx<|ibx1Sq?fi+(9OA{QdB3$o6_M2Fm0eI&;vY<_W_vjZSeF6d1bs+JOudY z!n^lq%2aKY5{3!VUlY*csV_#5O9GP{3xM|UdH@oyg6s(rQlqOFh?L{d8M*MeLFMsA(DiNi$4h zH8x;NP2%4KKSA|cpWxGci|>i)J8Pv_BOz&)UKuR|Qa*qwdH1Vl)U)6c2oPvf5aW_k zUzc4?Bi-~FN;_r;_ykNfn}Uj~{HSWKf3Bzc1SkEA{}l$Ux^~z0$d={PCywsD{mwVP zhkwg&_mlVyBODAgBm}s~KKO<2e&^@C?R9<3>y|gtQ2osc=NgCEGqy0tG;6%)gm)eD zwznK~z&?BJF=5=8QLBtts?$7es+B5{$H&bjnoZ1ND1Al=4VOLF9J4GW@150m7TwN# zJN@n8?ZAyY_Dt;G;vg8r8&pUnWKs%sf>1@xBMs^J!5u%%zxpGTaUqp1%BpVKt{+BJ z^s#XUV|+ql(v0MkRFl~PSZ!%`hcn%k;m*v;_IPu0eg3@sg2JNWl9{DtDr^ZxCZ zASy2JPPw`ZLb^M!{bR0uHxz(UTJYRmJCkEljcQQvSA`YwzqErP5x*#wO@<%RFbwY; z&CHRRnG()e)*ttZ63~M}(*l(Jb)bu9h<74J#)<+eDp(YMcx0-K@rx3Z+Y)sn-233j zvA_T8R%&@c5#EIO+NHM^)FK5shLT)`)KV2VUj`MwJb~o`Iz!RZ3W8=6<*~xVm(9~R z)=>Zs=NoeMiVJar2iizG|5=n!;Rq~dBLV=lb(=?42C!b7O;7SsR zQ>1*zOPW+88$+X3M}8wl)C^C(U^f>K2btO4bi z{3)ukdg6`4Ggh6M<%EhApiLfi_$TNhpGhKpum~*!Kmj3GI`c!mGMM<89cFJ9obe;(wd6o#%cFr{tqk*8_}Hj zFUu8yC?ij+jRPM!R0T{Xafw4hk{~GwNJ%oJB^_iW1+tO~IZ1Dn6f_W_ z?28;nwCt(X1-2c!WNYIUL=3aWX8T2{0vOQ@o!BQ`)6L!4W_43!_V?kM zRnDv{rMgadi9v4c<(}I*!COM$!e*)q2NkNYjL5H;Ol&TLDU3dxCjR-CEbcSe9?FCuW7ziLo zDAdMO4*E5657$(VVGVTqpvah$L;dsG>_5eNC92|iV^GKl8;bf_oO?}~^{5$YG%D^( zKgw@9WO-*oFKeC*ysDN$tygOl5)&rv6%`#%DfZ2Q)r;%V8$eMjEI+&rU)5HZ3cHt| zdPhgSUWXvVi+}Plux$j5an{$d9GfY!Jb%~<}HDJFD5V~gu+ZH{Ml zb`Aw}%5Vsb`FLVvfrSS_=@m7Gd@`v>EW#A!fU?h9!US}NElUI|1B}?J#I#n-dTAX4 z*cf2MHYKL5fIX77F@T)`Mr>DN+6!1K?PCB31B}?A#B>y}K|00&P6imUQ;F#;U|u@M z04@d?u}g{1U4dO0)AdP)gEDr*M&VXK2^hg$x(5mOJw15n>6wo^M(~vGzrb@(A6|O; z@Y>Udw_Xk2do=jy(crU3Tk?gU`W%m(3|}u*pVY(D&`*F|5bp z#e^xo0f*Nm&DoOBcdc*1!mSkog~y>K1!9D$g0W6LtRN{=$iIasN53lSAwI1y=z?g; z3dL>yvLUWT3)KH1Y@-b07}LBZPg$}Dd2s`wshJa5!vH5)e&;I0R%NN~2vS1=0BACx z^*-|?Hi$@t$S^nY{X94Spt5P{N?LAt%$ayK>NPH2$0eM_B@A(8saoP9(A#j@0~0ZY zPintCm@s3D!e$dq%7>S@HYfY`IZd$)pEmBIkw^{@6!TT6ynTBba@w^Wx0E4eOyPkLoe=ldYneI$J>2?PvomN9t z6-iM$omy+lFQAd=$VyWX7`)uTU5;I|9BWs_94qJ~4-F%i?bcIyvJU7#TcSC{_p2NOZWVM9ZXvDB5Xzne2&o_*;BNG;O7~4cp>In;iMxShsGMXAC{nzV z;tv}RAkOxNRwGWn2r$=z?o33Wv@i#8h*NNC{QL6gD63S%|r!jDuhe(`dU9iZF6^Qcyq3TPrf(8V zlxt4L{`fAYPKw;ZtcVP+V)hDvvz!tSa}DQ&RP+t2mZSd{`JEOtC7o?`%uw}^VTEhN zJURkQ;+z^;BVwiU7a{J61dji-r37H}h&Y?KkXTn5Tr=$r^&S;BaZpx9D;f%oq~#l3
  • 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 literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_SansSerif-Italic.ttf b/adoc/katex/fonts/KaTeX_SansSerif-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..3dd767131a57981bb2e065f4a34010ff3f3ad45f GIT binary patch literal 30960 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 Z)y>TXO1na7HvshXLi7Lu00IC101r~0ithjb literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_SansSerif-Italic.woff2 b/adoc/katex/fonts/KaTeX_SansSerif-Italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ce19ae03d50fade531801d77634f35ed06f90681 GIT binary patch literal 15024 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 G0000sx++@$ literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_SansSerif-Regular.ttf b/adoc/katex/fonts/KaTeX_SansSerif-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f117cd619e99bf1d030446c40c725a1e79c57b71 GIT binary patch literal 29812 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�Tf&FIRG3nmxA^*I=U?gQ%JDE@ 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 X9Hqzl2L}4G*Z%BvfN;&>#diKLsZO8M literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_SansSerif-Regular.woff b/adoc/katex/fonts/KaTeX_SansSerif-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..6ed98780a7a46c0c459d2f455fff7ee01954d3f4 GIT binary patch literal 16228 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 q>OevHWC2A1t2IAAOLP6L5Pb;?Xo1> zG9@pu96Pcd*HP-aaa3m@S*_!`aayOY)6{9x`n2&$o1|&tlhe&PC(WtTV~f4-{~3^! z#AvaFA?LsU{(JYm|K8p2eSo5^e;i}>iWgC?Q2_)zXta| zMhG8UfAFe>X5@8*mTtiF;_2-(7yr=vM}LLT>>-4d&zxDivJLenbZv&Kc;>=Gr>)_? z{W_HYCqk1a&Tg)4_*Sld7NM!HL0!*Ts1QB)M*#mS+&7=Sc=g80{oEKlhxX{%3zyc{ z7Dk88!~F%gpSZYoV;euI{wmzh!o9V%c5!pyhrjYgn9n~%i2v*DOINP`!S|C-B6RZe z@ccvDmp8Zdn}7CQgpN{pHxWT4xPF)T;B5sYzQ(f{k&ay1Rd!{|u2kvM8>JHQ{q%p7 z@D5^8>ei2$ACvE)CA5hiLoc9%)w#z`o$#`}`0|qI(})$2z@lx0k;r3l9r19> z3+spwV+Jvddj`hiRuIRT-0ZotM-MN|?Hk`S)K|$B5)vQCRs7{rrKcyG$!5B{Dm|5+ zaw!m~^z0$DST6Z}UP1%`ZYm{%@PeSj9iK{NpeB`sURk(6sO}D$@#&W&c30-%6J@_ekpJf1pV+CZ;HI zU;XDA-&c@Wjc3K-DV6XH!KA&&6GLBivv@z$6}lKSV|3>WmV++e&5)|Byd>>D|p zFg#tN{M?5{UB{T=nb-gF_3!#5PeCGHMI17{jK~v$IYHNX$-~OC0VCjYCw0;1@`PBD z#`*P4BA1Tx-}%npWK~J>_jjwlM8s=K3>N&J)k)(E6CI31LX-V1UYQB-1gD~+7qBFL z>(7}llHWm}MK7aok>{&TU%D1@vAUYXrZI^%_a>I5GnkjT>6w}|zf@gBx@xGpvF*i% z3!84kTt{xeH87&^n+NC$Zc*l90?xKu)TPR|v)!P=@E36~G&F1}TcTf<)02 zXTvi!1wbD|1gn^++wXM<^wuMI?Ge=XaRlcbLhs`U&N~!fgrzsG5|E~u^FEIuqtD{c`gm^+Cn?$6)LgEV9L53PeuD&n4^Xo9J69m_R1$au zZ3@o?p3*#U1Il{3yXrh7MeFRA4m$zn1H2>)&1@D$c>{bZz%)|8PMo$52nqz|Q7-xH zQQ=X#1iS>A18}(W^^|)8nN%vtC+$ImGJTZ6=p>eAav%G$&dIWHWm3~pEYC5#p(t4~ zxTpmKM2<#^EBjN0w7+^lW;jLU^rcq4XJpTOh&6gk0S_CPO7H#TuwbUc)#jk(4&;0h zrrIXy15<_S@qH(ctBLZV*5v+Alp{rvjP`W~+RGdXup&`1{>)*#;%ZlY?TYCuPwr(o zHo+-8tBM#{31M{?9|Qih>=rsMrLMUNPVi#DFj-ktG9`atd{p&jl0GGu%cm!kR%pWA zLkO>{1hcadS9<>RK*nUmD4W4<^y&8Hrw?5klZoo$^w~;m zAtt&i1>eN}lun3fy8QZJZz8tmhM;<@J}cg0l#d@`FwS617|a2GQZWc_fMM8~aV*1f%r>waq)5PiZp$i`fn-%~nB|L|4oCcIm zxGqXUHVu|brC~xx!@Vws=h<>wyo<*#^Arh{J&Rwyj14ZHl8xB>zbbdKdUq_{nvRA# z(%mu+ftYPhh@bzukR*Sf2@=did{c2EG0WIEH1lZ#6D#TuwKSg^&?WCo-&CnNtN6J+qq1tr*jLcyE8LTNsv8>HuQD&zvV+~Ku)HJ}GDk2=u5gsrY z@qqLca~TOUAUIX5Xp#boC}LL-%Yxw4G+SJHX8@gTBzEx6_?h82#1Q$J;W+bY1~|jJ z@5O?0$O1*)^ZnlPt*Qg>9Ds}jSva}7I-)IZs{Us`_|%h+15F%1)|G3{v}Ox!37wDT za2=;@+_dEb#ohV`7(7UoI!@cls)Op3ojcEf#ry6MIgVs05-J|3cxpfj^mKPS_%8^c zk~-vuDN)dWaPKdZKX3bj*L~`6R3FgsUWG}{gexAvB$Z_(PT<{7j>oO8J?)9|k#mL4 zuk^{7<$^9lR0Jl>V0EDX=*E4S9z{)eMB;fL@!nsI%5h)!fu-@mii*|tm9dVQF{#NL zNamlJ@A~OaS~x)j(Icls7bdAk8FM=5ou1&$0nGO&M<-ZL0QHO!i2uMRVp@0S;B9;#wdYV9Xv%`S z_vMSP{{}}112}l`){n{WlW(Kv&?j;7H4U^C%E76!G>hO>1rG3E)+9}qfP-UAI;}$! zMMcUs7#ple8MufvS=1ZvJvlhgRm!#aJRrB8!_OI@^;B%F zhvFpQiKFOHCR?|GD)j<=d^f&Q=QBL|LVbg>!u(SzoK9)5cA2ooUXozrK!Bn6-niqVsTv( zI7w4|E-|6XnxZE_;zp-^e74gXUZ!)uMqCeASB_)zgv5Kiqo+%Z)p=jWRVSu7Uz2g3do76KJm!Efwu~1~h?Pqma zg3gLB>6Qb86P3KjZTO8amh!nnEgp{Xh!VUk7xZto$C_k)Pt3C~D(ET~CF*FKhKY;= zpd10)Vo>(he`fxe{0Z8Fehuy5?^nH1EaI0RCoFRnOYBGY6G39@s>lprHK=RWnqV~-qO+&A9W zQ_MF7T!ti|J$R2!EexCEJ1&MSP?n>%P^}-R2^1ikeCoyqpQ;n4O_|iu5b$H$Et?|K`R=Iho>tfZ~Gqe!#Fqi}xRt#ai{pf=$SZeP7XGa8A)R!9_w5*@}Jywq_ zx3+bSWZMNkn;Z}D9*s9bPxY8?e_yt#r${KyORkodY@R3~zsk3@>uMa!zKV_+7eiW_ zv0%CwF6(Md2QwGWM3dEH>85b5C1{eDUEr~R&g40Pi-cfyV#wl&JG0uJ$anX)go&Ra zZj5<%i_Y(9o7}JSxsKUOB4)*CNR)p1U0raiR>+!ZAA?QwhD9DMq^1JMqp)?jJKP@w zA>t7@Z%1$C6h~Mh4FvhPX2iW9UJ490b&(4+VIEJkMia-wLTjNT?IUSl6J}K(mVzLE z)LVZ<{tUcaPoR(Dm#X@+7|F|+h~r>NFm?Lvp`Ho^o(dIg4v`@6a}n@!5fBsL%HXLh zLs9U`UH%0x)9_oom)@q`n^NU_>FtcIzsKIr*iG-THyyiLe)|RE5xB8V?yj3s_XET+ zdin#`uRU<-%;xHe`2%AkdxpBp(XghVC-4&*(4?nit6r3FsHmcLKK%fpIM%pb?Wfe^ zJfMZTd~_b!9>OHgd#PBn<(fl=l`aa1HtkBm<+f9iYJCmL2b!)MFFt@)>G}N}Bl_d# zi}#PJ@)RIM)6#Pz!zK|69aZMx1XKu^_4{>AZSn_0$>+xg4(UQbb1Zem1l(oh$qug= z3diy}KjGxov@W#|FpNKOq9fsNo;*6DiLz*h`m1e1ko3o6 zI0JrMEXD;=$ck)7q9dCh?;R0YMc2Y7_jI_mGCtxhM`Hh4C-U4sj8ls{dh0*4KLC39 zD*7$5P?bT4(^#w`Qm2&-#B(CYi`$48j6uNcW?Tm2+CrKOxis(;3qUafP>hJcl|Zd; zWDwa{M=tOVsxB}FBnbqb+pVksazIH{^%bP+;7P{VTtO!MHH6^%KbF@Xi_+oyKbG@e zRBXQgW6}4jf*0=Z-YNy$wu&3{>9^Z5j7)5vbat+>U%De^3mCmp`}JRY>5HFv;kl1I z^?@7LH`h-bJG{7mW^C_3Z@Dwq8Vs0*D4?(6uX=6uma3Fg-vqB2P?+r~;K49*T>Lhv zf*a1JR9e+tCr1bh)SEbAgNA>v&L;do!+}zzZ1;B*W1x260x8=i2dsn2;R@B7!9Qp- zf_hK^h5)0?sk29Q7z6Mg@DDbaf#dG0^lYdmR}O_3nJio%nAVf$ds%_F{KDctbz?Tm z5e@@KXpS6Ky{6$0xD{R${Blpxt%=c$sYE-AUf0}Egb`S#^eZ@I^+{)5o)?4Dj8Z)D zeQ@z(F0|KE?kkNuaR--+m*SDWPRX?`NS4;+4#oRKGC0}P`%Hg0wc%qpwLpD>Y$+qV zCLix2k`xwR*i)Vn{4JV*^_Ldc(|Cqt&%J#fv1ar5!S;f{9hB*U`+LRMNs6@_qTn!?#$ z|6~)!3Ug>9JiKCxLz1ey6Yby%B<*P~^3q;vTH@dWcstO*tsgP30B>1D7f`O+qJhqa z@$^Qil|hr>>!2z$)rxKF4g}5ofl4aL(lAn&vmcagJ33cg=>k71V2R^mx~*k_xS)6e z?pdnB-L|73#8ejn8QjzD@O--SfRKPZ&;$MrbT?Bst0oFK6zx_`bM8>Y8(AjG(nq#G z(5f=5B+KFhvzeA=ak3)>)&SGQa16ug!R>xcOg}WXG}k!|-mSlIVP@fx0mauYkrtVe z*>trplNo3kfQ5k-6#Tlu`HzG{2`+Y2Gy5N(iZ{DB4;Tyre|V#Od_M{9O|Bm8VMfouj0jN`9=hrI|Zd4l)h$Rc6D#N&mI)}n-2FuOvapz(t1#)u(uYfSHqo6}T=6ZJsP zc@IMvnR)EPi-U@14y1Nu_)7VFz<8Wt(*-rWr{%)Q$I1lHpXp2ORr$D^NzV=+`pLiO z15Ze9;?jO_lCQkdsYh5$ewQ^QmeDRgl^y5(E{KrAa+;ZZfmJ*K47*+yX0VvX2hS*(j?iHc8eRiO@fO?Q5?9e$~GGrCybm~C&K2jH(KGkF^ zd9OQHDvTeP5}I6$oKA(qrfPb8q84b=h>H+cAhy@fi1DmjjP&&g0Y1s=J#8%E#hxz^ z5UEDS1ecGna@N}JBr*d5agC@^`42?pR}$G9WKw}^vh{-&m1hQ(6c!A?4gJ=SSOqxEb@UN3k0Z6nP0RVSUmOi}GPz=PtlLLs#RX{e?)kK>DY@r93nWECl7GxB?Pe_%o^y$_g9^ zOH5j=*uGf2DJEm4wJaU)*%S00446CYFVqtmhM5u=Ip8?F3w?nf!v{d5>fEv0 zehzh@+SRd~!lMqyc|GeF2FH_o_hl!3b!*h(eVCP*ZT7zfy2DL`OZI$vq;sU#FN?p< zh(Ts>NY9mqs)Gz8rADF=hJ{F`X!5PzksiM{YWlmo`qEmoXiWY^QIOJoUmE7KuBGCk!SeVepP$nulNi>i|RY$Bz8)uz;i5 zM5*b-TuUUL6i8gwV_hDXHw-3+?eF+H`H$#0)~fC{NI#gsG}j72?i{2u)x91WM8KUz zSsgEc63v4fgJFQDu`Dn%j2jtnb?5y%Y3=1Gno?coowSDRI%rLO2k)dcg$P9nRQOLAL1($Od8_m?SOK@sKi2-dAU( zHc|m^1mlZZUm%F0zp}n-{LX-=j1c#Ixr_K8!3MFeg}KO+;no-f5>OC- zd~qTLF_$E`n^m*-i9h~N;Eg7{Yi1#knT!;Bx()ZA4t_B$-L_e&p1lfrk!kX66h~Ll z^{T-EK3oB$?o|j_Nq`V^8`41740w=fkdlME9%{DQIx-*y!`QxJH@0`7(GDQ<2=wbl z``fLStLFK$^9QCU+Y70L-)q6z=5WLK0$a8&lql`iiI)l$M-8*(O=FW_N9d~44^@H6 zG)7S_W$(&qf)2YH5@jMl^VEz3ZUSo3N&QkWO!$E|)f-x`oLiB+vq!OV`1;Fx|HCgu zGeOtPft7>3orapt^$#5mO0sT2hN7Y~x;x;5z!x!wG%0bktcEl|k+)APHd?kAbx$ zkbi@oM=#<(ueuL_bHR&c@(c);hp;F#D7y!m%81CI#6V;KZ$VI#16f0}Fd&0gqH+e3 zFqWMp3`w$ujhAoOLGPuvY4>(~|L=8d$M^s4dpl!0zW;aM+j;K-pnv)8S4~2^#Gl+< zJZif1y`dLGSHKa0*56{yC7zd#g7Qe$TjJ+v4k5_Q@TXpQ{^k>p-M9|9PUkjG%}fpt zmO4_2fKR2G9f&Slv7$^05TEiVCvXNhPwVa=lM0Xrpng5051!sh6O{A<0b9H}s$$*G z0j-=Y!Uiv^%gZceg#c`4yt>P&LX(mMWlB|*F7geqBm|FJ;fSJg4|nwjl5(!$Cy zufXsz(6sV{dnb#dB60O}96U8lU4HXE!xti)Cmfm{?WzU?A>E8ruL)280>=A?y0W0| z5Yz+yziVJuJb*roAFRqJAdr3l1Anhe*)m`Y1mE#GL{$_Fp>nVUMDcd=9=8Hk4F?ie zmg_}ZEK(h@A2QV?2)5Jwd@KM6h`9p<;hjOCS$x%92$CX55Ut+@gcL>q^ZFgkB>OYY zYho}G&bF2bl>yMJuR=hmi{ z-Cgd9YGrY}v(%c+^~U5>d0}SN!|bmnLe~#LHpy3H-Yaskh!syOsc^i%8pKccE_N3T zBkU45796}nxG5I)KUgw*+>y4nE0Z}9%S|J(Ogww$kN1P)4mT08t63sy+0_kshk}Rm zrW1u^Kvp6K@5_#EJaNSIc6STW2d2yN>%T|bvOv=nZ3QGe(D2{KX7TfFW;KWBuze?tJtm|aLH5tSKoV@qU7i%fE*3?4shEB z%iT3t?qs>t!xIS5>}}w(~(_lf|)AW&PMY-s}3gy6omaBBX>2UaWN1_^c@8{7B6 z#b}PlBYuA{FQqaeunAJYocW2EXKWuQ7rKaXFc$j67Z{&#Z9*$RBB!B=Nk&PeCls$w z#irPi5!@n&HIF|HE^5+U4M0j9395$C`^4eaeB7hXC*3|Z2-XjI)nv@xnGW3}LNbTE z*p+CPG(LJ5@|XY*g9n#3Y;M8<`jS3Gzy=Dw)mv=BCB%t@k@&imB@q;^Bu7YN17v5FiEf&*RP zW2RLEszK7m3uMYNT9rA_+1*BpN=ZnlzZm93mnI=qZ98 z1_nMT%7EEmTiubdO%tQuWk)9~l`32BvZIq0OI7`M+0hx1`Voq6|Be^|7ow*n3{VO| zs{&o;GLjhS^1YV@XdNG|uL~9&&8Qm2Xl?b_(!$(ee^;qB9gljbC3hdb4-x?&rI5y4 z@1W4G6cCYPBLFFt{gi-&B=}}+O0rosL{jNzmul+nR-4l9vgB}ACTaT+oMT*eh;*RE z2%f)`wz59KcxbFg#;L;fV+TDPhFA`qVq&TvD0CTYb@;5>6i>hSkjm$HWpB&z^SaC3 z+r-5?o_|4%-WQVVep=?J;5B@0USGCXe`s6{g~8;D#M!{*mO^((!h9js%4zvbIU8d* zK>^QGI-DpdYP)4wEnVMtlXh32a9?sd4T%~vDK66jN0-`7pXPF6lp``^Gvt%$i79XA z5xuPwJOamW{Sou$kok85|58M%IJ#=F6dO(R_KGSOa`LQR8O*9YWUPK?EQ0ZG*k6TKq zsSg(}uD1@Cz*oUwBQ9cIU#%wHhUn#76U8jiz)XikbIEVD9SBxHkw6vDP<|UUltdZU{my1h7KuBbor{Q?WYlYY$M7RZx9s+d?4 z2a?vCmy^VM?dC|NT?#U0>X&Z}nQ^Xv$gT4nh*Z(Y&P{P0j1o2`Iz}yK{a}YXPF9vV2%5dCCJh+qgR0mXjY*KjrZ^X$~h`kK9lE^=( z9ZG-^l>e9i;BdH0!{VR`iCr8o`;vRqswsM<+z~iW^MP}tsbRWTy|7mYVXrQrN2+oR z#OWzWeWcbCHGx_oo(~=>i1mW=5`2{4ngVuo8U!*;tf)II?Ss1EYTH}3<+k3U@p4r^ zd-~{+(Y^UxYo7~@TG&{i5?H)~PLB38|z-Gkook6~oXvj?Iio zByakn8V5P8N{Ckq7ow2mr&RxJHPx0jWp!+3@v;8S1n*UOj%}{CZ%%Z#rbmuirU*(9 zYxI3?do<6{!@41+EfCRRD~b?HBd}*5MGMsf7goRt*yg8-_%wtJ;II!^tdJcgh@j|8 zaFHO21|ba=@$0}2;KVFUgoZSp{Sdf49^BsAT%FtBSFvI}5GnBIJU}HhpSV_!`F zE{9=98YE*^I&0t90f(8vgT@BXEx4WF3=ruSQ-4aM)(+@WuVN#b3y&a`(%Dd3U;oQ^ zuB52dN!1iV5pGR(#tinpg}&u|a7aK>wa(5$u6P*iJ^lEZT(YMv(lrqi2@lS;Cbm40 zkNV?n#Rs=bhUpiR5oLjMmrWOW?7OQGNDCA-Vfb`5q7>6h-hj7}TIIv?aF^&xw1pM? zV>Q6JPEM&JE49pzKRg>z?mt;QHOmo!^-fSNc1V8!1jTnX$it$^k9iT~Tfsor}=Swjxs~vHZXdo1& zF{?AMyZ6KHzKT9m{Z!H-F5}ZCF`1`335S+uASilefGBW!8bOkz;R208;ABn!Z=>l3 zmBB>oI%YLE*iCbcA&$?}IKE-*9+#$0Vh0Z(u*y5U7ET+})b`K4_{mRvr!^!(fxuY!>3HabZ$*cHPk1Z-~QUcPVvJ$K-n-I$}LPI@vtegfTDc;zr zH;|Z4H{PxTYIdwTdi)l!$!S-2L+|3w9flWW-*9_dd_ts@A`l(i)+lYifDOj63@O2P z^>kBa-iXV>Q+zVhst3>P9V$EtXGd6O^rarLDG&^HL|lHB^Tnd&{c|m8!OMWqB_yAh z)lq)QYmCoJ;E9LGqnFF%{Zs9n*)yaNIQlm?*I(p=Q%N)C@%l5wRe&?D!Csep>`=ba z6mhvB#XXs1{aRn8qkOKlQ^6%&^hN@`8o0D0Sdthy5jq6Ufs?JtXrg*99$oW~SsF9@ zaS6nwp?O>U1~0Q-Z^zVTH{{JRK1jLotWU`YIU#xpegr^~i|y_~I6E^~$wSmuWDc}j z3QoF$p-xpz%dEwSh7uH_8(jxd5)*(EBuW3qo?^#v&)yDBEkfF{HMbYSTnsUqU4~IC zW_lq@9k8ztlw}$Ndlx{e1NZ8WsoqS3{coHM?0J0(;PZ`QboKK2 zv&WX^4@~YG**n;u2LxAT^gMo^dVM{ObPq6O0KX|?0}Q$w#VD4+XBWjNy2C%fe#*Zb z#{i&hs^P|fqa5%_W>UA~Ee_X%PInqoUEtpZptr@@=L+4#b9vA6!^TFdOBZEDyu?VX z9&=NthV&)ayLi_K2PuSwOlfMkwf9%|mx?2Y5^$7)2+bZ*VDMByc*Fc`-0Am+<0O-LcQU}e!B+S0LWGQU`qK(PC2tG) zp6~#La~OT^_rCKx-~7$jzV=I>{^)a$KYSH*<@L3d<%RjFeIvu&B`anqaL8=u4t`xn z**eYw*4aN_;xO^LCkxQnmePQf#NzU-+&uUj2nPKQGhq&1(XJ9pH$9$6#^VMnD%%UW4&d-&L389d27a&LqsL{=lLxwF zL7`-g;sgjEF`Z z7=y(ImStS^`OI#ZQ!2!SU8MpRB;A+Me)=1VAEbd2qj63er^urXphxM}I8|0W=Dae-%7&4lDpe>*>=Z`gb&L2Y&>$p?=5_L+Im^GZB9q}|8}L^Cp<5DU-Er0FcVRn`$q`xx66o0p%n8xij&Wx5W}M}QbI-M36v$LkjnfniZZQefQ_Kz%qO9I9_ef^ ziZLHTQSxVKmH8WVjJbk(n1i=oXEvbje?U76Rmc|VWzqnrhR%@hpgyJ>vf2Niy$5t3 z=-SzHCx7z#chE7m7v}l<><{cWf(N^QN$}qPDgFdFj1aj=z6tfuJ6HUts1wY!JN}+T z=tm~{pZ}{-HGg`1167grqg#x1s}~(3e}elhgg$-((mDa!_u$L2$D{Z3f22P8A-JO} z8-e}ng{y3@9D&xy&=-Gn>((u(v(R2B{}gWi+pTZkdfZIb`@$po2bnLs74|IenkjAI z3~4vM*B4FK7A09xHQg{>ZjaaJ4+NV+;YjpeJ>IAK*n5OqLwT!)4lj)_Th`3ik-jif z;}?%D)w;s9mgUvc*3H99HIiQYO%WD&eLZz5oJiErat)29#$JIH8eJVJ)NsCLt)4E_ zNZ#78YQH^SV>8EIX~FX7`1<(4m8C=~5x%)()#m4y61D1b*sAr?Qt$Gzwc|8e+o-ib zRsGJYbwB>KlFIg~&n`;);0au~MqR(Vn>Y=5c)$l3=3d1#=TV77p(EQTo@^YcZ zZpMrT=8#~;o5sN-?2B+Wfe0;sev?ZW^ z)VgWi1lT(rTpC_$VQF7B#3N=@LW?^Y& z(Wwk4px$HGyYoB97(KkSV;Hc1Ya=xyN0AgzcVtJUUmASXupf4UNzX6sP|StJ8o3GE zONVVsq@Y`)9Cn`5E`a;==`y^@KA8W$RoKM4w(1@mxPy=<1xq|yL&L9tI$&diCl3lH z89%gCGg2egcufJMlwsi25o;BOf6X*8{J!7F$j#LqH=nCr%Y~D$OkQ|5Pp(k&<##Z> z`eB{vHIUz7=rx$%Vd=Fgzr)dMD8IwgYdF6n&}$^WBhqU$za!CWYu+l>@O_0^n_YOI zP|Mkc%Y|Ajk7`=(JaJ!-!inr<8P*DU=(jTJz9_a z^d}Y(8XHda?v$_(-lz-SA13^kT~-0H*Ln-J?tC#YSg7^9T~k29b!c9JEkXXYRkZd| z;)SK0x_NV7Y9BC*C1C5o7J;IBF!p(2{9fQPejpI|XE&)yqq)tS#gt_Y-UL{Ew;x+Y z2S$wrn9$0qtx|fgE-bxDEXE4IN-|7nd4%#n5x6Og2P38?fcjuJ?`?&TTMPmdq0Ev61^{c% z0YU+5f5S`w;u>^L+mnEAkTjIb-5v`tqMxn-1mFaFNn~`fZRo@wyW1%)wpTTHj zYgVave&Z`PwsJV1vWj%oCV(*yE*E!-*b4->XSW)5^LBN0x7u#q=z3S1z4=;iuJPn9 zpdA4JYo{@5FL_j^lJO8jCtX-#3ppMml?Wh~A77B*-b zTG-6j`gfQ4G`*<}L-iTEv-+5zZGFKm(WV#kwZYw{ zTlB_mddV))rrUOjHhmyp8`^Dpncmn=mo_YD!+vejqTLB)b5G~4b~1AZQ%?d$l~2W#v{L0XLM za2sP(GQH`qh>B z#Rz4Lg5|-fpj#`8(=0a+aB@*XyW@Yrrw@fbXL4 zM=xzZbotzwvsbN_^;WCY(a~2Zb#!)EW1Cmbo!PP$*UxQkt#9V7sjc;*{Km$eU9@qp zHFI`t%i6oXwy}Bfp_#Qqn@cAb*Ds&jzIt%;%(V+^mnSZ5U7fge`OKzODt1`?)}2iX z^)_!+cVzSOm2;Q2td3$wvFnXv*C(2P%b8j&gV(QLFJ4@`diMOzPWV;`d!=F*t~3AJ-cZwPR&|#+nZZX<5{Oc-fFyaXR)*B0IT=4)*f6tcVX?+ zg-y$z%9=H?cfne_+Ap8IdUdd8tskkj=%_)?UkV8S}+bBs|fG(cJF=niqbWE zr)x@gW)R$e^izbjS%ddIi_XLK2HZREJq$bd^IQA7N4&qjLu+^K&z&RZVeIR$KXhJ} zy|P#Ab$SrKH=w4mOBOl+v%YBW(!Exk;*bnGe-_|fxvTFYyz6NgW>g`oovq#(uB8IlS3JzTvW_A@m+fZ(Y&y_o{{0fXk>FvVq4!6V1C*Td< zOCNCf*nhX42I6?Dza&)Bj8ZD=(kO$nfO4(ib-faPSp7O)zfRa=VDNq#{~wjG_Ei7? literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_Script-Regular.woff b/adoc/katex/fonts/KaTeX_Script-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..4a48e65f0de679fce0ca17c32f8b52bd3de33fca GIT binary patch literal 13428 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 literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_Script-Regular.woff2 b/adoc/katex/fonts/KaTeX_Script-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b0aed195ca3be06a66c66919dfd66564882bdd81 GIT binary patch literal 12064 zcmV+*FW=C2Pew8T0RR91052c_4gdfE0ANG_04~M=0RR9100000000000000000000 z00006U;u(z2rdbi7ZC^wfslCrDgibEBm;p63q}A0AO($c2Z06*feITnRt4M`x?$r0 z#)Hpxq9`4l$-w{D11dw-?oS7RsD?4^_ z;D)ZUZ+5D}%<{c+eKToFX?clCyaY!%08}jGy%P?dV*maAb$;G~H}gQUp0o~Oxeh~x z_79y)W~JqQYy6yfm-W5r-UA7KLI#b`%1+dA#J*Wp8re#tiGoyU_p&RzdEBy z*YcZ|iYZ{bm#XTl;tC2bYg!rBHmuGzRbmC#7oHN8PKmIA9PLh5GDo-0w?D&{pVwL0 zzW?PVAB_(DK`^h_?XToUU7Yuz0}sb)5Su63ST`>D%8yoI0@93#ru9C<0_vDFdfZs*4`1bq6#_oxF#6$sB=>w*1$ zVD8_ibol7FnKL_v8Pan{qVd1tD&AumDXj^w30I{V05MoY1ii=1kN^|#>=9}BIAor& z9k*wnoEELpEAY{Y)8t-(hfCk#=#dF~;)GdR86#rof-k7ytOzrtpD_f+LY8~eIUAxo z*rkFu-HK?tNC=PIRL0#<09uf0oPZ)v97VB|#44>l@nJ|IS~MnEd|6DD6~Mk2MtplH zq`GDi$)4D+dCQApOd3vII8pJ;JMoAdKX(^bhAGm;F;)a+J{o|)1Cl0lw}7B?BFSqe z?0s7l)7zE-Md#Hx{zu&l7JFyVSfq+x$fB7hZ=BDs~uo4PB}EG?Tu6e+7v!9 zLCb^@qR-KrlVjA6f=X<}EQ`h>&8U+=-6QB|)bS2lEuT59MEi%@&_E`+j31Fbh9>S5 zASU-%#DaoYPh$*uLX1*F3!n|lF#MzLox*4DOBs;fY9dYj!+$6KFqB ztHEoR;4H+eGM8$A=r-2rdg&ZM-+(tLHOer^-ju)Cf?e z1LO^kS(JQSQn8da_;#N6<)`i^*(`eMCkcx~Z|lKcg-BtJPf@x+%GrsBx=60@n-GSH zP+**BERl|C@K6uc%x6V`9*hR*;)W6`>`2s=B&{{zXh@Bx(T(_9qQtv^#UCe3={HepH%r>5Wd7 zz;o26`|y_w9*lAMm4Zi0-li%rYfFbT4=GDF@Z{A}MuJ)ly9E_AzQOWy`&yBeg4*IZ zA^H-CCSV=&ft741?ek9U_2kz9Q8A!5I<=e>Tc(>$ZW^5#)Er=5)Rt;fH|bk)Yvk=B z0}fi^HtxAoaPPw1eL=Ssl;~3U#L6U8FN$P(Z)Z4oA= z)kaI0neoJF2`To3xZ=rXvxx$rv^#{r(A}CY60pd~_(hN_4+!T0_rtKhj#xN zJAy|n4jd7182glft1>ofHPMAZ6NwW+sadAj6-Pj^6H`iN0>TqMktsRlf!cW(f$%^{ zhq}^iedN^82{1rrlQkZ&F*mx)4J6#B6ajx^euO@b2c^5^r!vJWCNXNe)Ig~>>(B!} zm0%y`a`SbxABBeNh&5isuFz>HNz(Ym9d*7Sc*B@@Z$f+2L&6nhuvO-{D02|Nm9!QN zI^|tNbu7#v{JsL`bU9F^3}7&F^7Vt7HVH0WixL7mW6f|ARIGeO*}+|RkMW6{1HPf?mI2S*d6yQS+-kqXNJINH-W3QoYXU73V6dxD!k;@YCx zξ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 KZqM2T0002O@mFpD literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_Size1-Regular.ttf b/adoc/katex/fonts/KaTeX_Size1-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..37faa0f9fe41ddb1c9a15725f8ad4856599193a1 GIT binary patch literal 12916 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 literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_Size1-Regular.woff b/adoc/katex/fonts/KaTeX_Size1-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..0832f7a468852ced3080993f4a826e8ef608befe GIT binary patch literal 6696 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 literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_Size2-Regular.ttf b/adoc/katex/fonts/KaTeX_Size2-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..cf326236c0e940c533606031140a116d7ab707ec GIT binary patch literal 12172 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 ND0_ALP~7f1{s)AlT$TU; literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_Size2-Regular.woff b/adoc/katex/fonts/KaTeX_Size2-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..14f6485abb4e1483c0adf14e93c7d838efdcebfc GIT binary patch literal 6436 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 literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_Size2-Regular.woff2 b/adoc/katex/fonts/KaTeX_Size2-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..5ff7060676d81f040dafd77ac0ac9e68eef20767 GIT binary patch literal 5392 zcmV+r74PbIPew8T0RR9102L4b4gdfE057Nj02H_Y0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_Size3-Regular.woff2 b/adoc/katex/fonts/KaTeX_Size3-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e45ca49db8c66ca43ce41bd15a219db59b0c9350 GIT binary patch literal 3728 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 uGdp`1tIq6oAi__4ZKx3d literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_Typewriter-Regular.ttf b/adoc/katex/fonts/KaTeX_Typewriter-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2fd85294ab68105c5ae44fd65332fce36c49f8cd GIT binary patch literal 35924 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%0AnSGBJ}5nw;K}{-J%^|HlSG_ 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 literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_Typewriter-Regular.woff2 b/adoc/katex/fonts/KaTeX_Typewriter-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e40ab151617cb25fce5b4e739aab4f44ff3a652d GIT binary patch literal 17272 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 .newline { + display: block; +} +.katex .base { + position: relative; + display: inline-block; + white-space: nowrap; + width: min-content; +} +.katex .strut { + display: inline-block; +} +.katex .textbf { + font-weight: bold; +} +.katex .textit { + font-style: italic; +} +.katex .textrm { + font-family: KaTeX_Main; +} +.katex .textsf { + font-family: KaTeX_SansSerif; +} +.katex .texttt { + font-family: KaTeX_Typewriter; +} +.katex .mathdefault { + font-family: KaTeX_Math; + font-style: italic; +} +.katex .mathit { + font-family: KaTeX_Main; + font-style: italic; +} +.katex .mathrm { + font-style: normal; +} +.katex .mathbf { + font-family: KaTeX_Main; + font-weight: bold; +} +.katex .boldsymbol { + font-family: KaTeX_Math; + font-weight: bold; + font-style: italic; +} +.katex .amsrm { + font-family: KaTeX_AMS; +} +.katex .mathbb, +.katex .textbb { + font-family: KaTeX_AMS; +} +.katex .mathcal { + font-family: KaTeX_Caligraphic; +} +.katex .mathfrak, +.katex .textfrak { + font-family: KaTeX_Fraktur; +} +.katex .mathtt { + font-family: KaTeX_Typewriter; +} +.katex .mathscr, +.katex .textscr { + font-family: KaTeX_Script; +} +.katex .mathsf, +.katex .textsf { + font-family: KaTeX_SansSerif; +} +.katex .mathboldsf, +.katex .textboldsf { + font-family: KaTeX_SansSerif; + font-weight: bold; +} +.katex .mathitsf, +.katex .textitsf { + font-family: KaTeX_SansSerif; + font-style: italic; +} +.katex .mainrm { + font-family: KaTeX_Main; + font-style: normal; +} +.katex .vlist-t { + display: inline-table; + table-layout: fixed; +} +.katex .vlist-r { + display: table-row; +} +.katex .vlist { + display: table-cell; + vertical-align: bottom; + position: relative; +} +.katex .vlist > span { + display: block; + height: 0; + position: relative; +} +.katex .vlist > span > span { + display: inline-block; +} +.katex .vlist > span > .pstrut { + overflow: hidden; + width: 0; +} +.katex .vlist-t2 { + margin-right: -2px; +} +.katex .vlist-s { + display: table-cell; + vertical-align: bottom; + font-size: 1px; + width: 2px; + min-width: 2px; +} +.katex .msupsub { + text-align: left; +} +.katex .mfrac > span > span { + text-align: center; +} +.katex .mfrac .frac-line { + display: inline-block; + width: 100%; + border-bottom-style: solid; +} +.katex .mfrac .frac-line, +.katex .overline .overline-line, +.katex .underline .underline-line, +.katex .hline, +.katex .hdashline, +.katex .rule { + min-height: 1px; +} +.katex .mspace { + display: inline-block; +} +.katex .llap, +.katex .rlap, +.katex .clap { + width: 0; + position: relative; +} +.katex .llap > .inner, +.katex .rlap > .inner, +.katex .clap > .inner { + position: absolute; +} +.katex .llap > .fix, +.katex .rlap > .fix, +.katex .clap > .fix { + display: inline-block; +} +.katex .llap > .inner { + right: 0; +} +.katex .rlap > .inner, +.katex .clap > .inner { + left: 0; +} +.katex .clap > .inner > span { + margin-left: -50%; + margin-right: 50%; +} +.katex .rule { + display: inline-block; + border: solid 0; + position: relative; +} +.katex .overline .overline-line, +.katex .underline .underline-line, +.katex .hline { + display: inline-block; + width: 100%; + border-bottom-style: solid; +} +.katex .hdashline { + display: inline-block; + width: 100%; + border-bottom-style: dashed; +} +.katex .sqrt > .root { + margin-left: 0.27777778em; + margin-right: -0.55555556em; +} +.katex .sizing.reset-size1.size1, +.katex .fontsize-ensurer.reset-size1.size1 { + font-size: 1em; +} +.katex .sizing.reset-size1.size2, +.katex .fontsize-ensurer.reset-size1.size2 { + font-size: 1.2em; +} +.katex .sizing.reset-size1.size3, +.katex .fontsize-ensurer.reset-size1.size3 { + font-size: 1.4em; +} +.katex .sizing.reset-size1.size4, +.katex .fontsize-ensurer.reset-size1.size4 { + font-size: 1.6em; +} +.katex .sizing.reset-size1.size5, +.katex .fontsize-ensurer.reset-size1.size5 { + font-size: 1.8em; +} +.katex .sizing.reset-size1.size6, +.katex .fontsize-ensurer.reset-size1.size6 { + font-size: 2em; +} +.katex .sizing.reset-size1.size7, +.katex .fontsize-ensurer.reset-size1.size7 { + font-size: 2.4em; +} +.katex .sizing.reset-size1.size8, +.katex .fontsize-ensurer.reset-size1.size8 { + font-size: 2.88em; +} +.katex .sizing.reset-size1.size9, +.katex .fontsize-ensurer.reset-size1.size9 { + font-size: 3.456em; +} +.katex .sizing.reset-size1.size10, +.katex .fontsize-ensurer.reset-size1.size10 { + font-size: 4.148em; +} +.katex .sizing.reset-size1.size11, +.katex .fontsize-ensurer.reset-size1.size11 { + font-size: 4.976em; +} +.katex .sizing.reset-size2.size1, +.katex .fontsize-ensurer.reset-size2.size1 { + font-size: 0.83333333em; +} +.katex .sizing.reset-size2.size2, +.katex .fontsize-ensurer.reset-size2.size2 { + font-size: 1em; +} +.katex .sizing.reset-size2.size3, +.katex .fontsize-ensurer.reset-size2.size3 { + font-size: 1.16666667em; +} +.katex .sizing.reset-size2.size4, +.katex .fontsize-ensurer.reset-size2.size4 { + font-size: 1.33333333em; +} +.katex .sizing.reset-size2.size5, +.katex .fontsize-ensurer.reset-size2.size5 { + font-size: 1.5em; +} +.katex .sizing.reset-size2.size6, +.katex .fontsize-ensurer.reset-size2.size6 { + font-size: 1.66666667em; +} +.katex .sizing.reset-size2.size7, +.katex .fontsize-ensurer.reset-size2.size7 { + font-size: 2em; +} +.katex .sizing.reset-size2.size8, +.katex .fontsize-ensurer.reset-size2.size8 { + font-size: 2.4em; +} +.katex .sizing.reset-size2.size9, +.katex .fontsize-ensurer.reset-size2.size9 { + font-size: 2.88em; +} +.katex .sizing.reset-size2.size10, +.katex .fontsize-ensurer.reset-size2.size10 { + font-size: 3.45666667em; +} +.katex .sizing.reset-size2.size11, +.katex .fontsize-ensurer.reset-size2.size11 { + font-size: 4.14666667em; +} +.katex .sizing.reset-size3.size1, +.katex .fontsize-ensurer.reset-size3.size1 { + font-size: 0.71428571em; +} +.katex .sizing.reset-size3.size2, +.katex .fontsize-ensurer.reset-size3.size2 { + font-size: 0.85714286em; +} +.katex .sizing.reset-size3.size3, +.katex .fontsize-ensurer.reset-size3.size3 { + font-size: 1em; +} +.katex .sizing.reset-size3.size4, +.katex .fontsize-ensurer.reset-size3.size4 { + font-size: 1.14285714em; +} +.katex .sizing.reset-size3.size5, +.katex .fontsize-ensurer.reset-size3.size5 { + font-size: 1.28571429em; +} +.katex .sizing.reset-size3.size6, +.katex .fontsize-ensurer.reset-size3.size6 { + font-size: 1.42857143em; +} +.katex .sizing.reset-size3.size7, +.katex .fontsize-ensurer.reset-size3.size7 { + font-size: 1.71428571em; +} +.katex .sizing.reset-size3.size8, +.katex .fontsize-ensurer.reset-size3.size8 { + font-size: 2.05714286em; +} +.katex .sizing.reset-size3.size9, +.katex .fontsize-ensurer.reset-size3.size9 { + font-size: 2.46857143em; +} +.katex .sizing.reset-size3.size10, +.katex .fontsize-ensurer.reset-size3.size10 { + font-size: 2.96285714em; +} +.katex .sizing.reset-size3.size11, +.katex .fontsize-ensurer.reset-size3.size11 { + font-size: 3.55428571em; +} +.katex .sizing.reset-size4.size1, +.katex .fontsize-ensurer.reset-size4.size1 { + font-size: 0.625em; +} +.katex .sizing.reset-size4.size2, +.katex .fontsize-ensurer.reset-size4.size2 { + font-size: 0.75em; +} +.katex .sizing.reset-size4.size3, +.katex .fontsize-ensurer.reset-size4.size3 { + font-size: 0.875em; +} +.katex .sizing.reset-size4.size4, +.katex .fontsize-ensurer.reset-size4.size4 { + font-size: 1em; +} +.katex .sizing.reset-size4.size5, +.katex .fontsize-ensurer.reset-size4.size5 { + font-size: 1.125em; +} +.katex .sizing.reset-size4.size6, +.katex .fontsize-ensurer.reset-size4.size6 { + font-size: 1.25em; +} +.katex .sizing.reset-size4.size7, +.katex .fontsize-ensurer.reset-size4.size7 { + font-size: 1.5em; +} +.katex .sizing.reset-size4.size8, +.katex .fontsize-ensurer.reset-size4.size8 { + font-size: 1.8em; +} +.katex .sizing.reset-size4.size9, +.katex .fontsize-ensurer.reset-size4.size9 { + font-size: 2.16em; +} +.katex .sizing.reset-size4.size10, +.katex .fontsize-ensurer.reset-size4.size10 { + font-size: 2.5925em; +} +.katex .sizing.reset-size4.size11, +.katex .fontsize-ensurer.reset-size4.size11 { + font-size: 3.11em; +} +.katex .sizing.reset-size5.size1, +.katex .fontsize-ensurer.reset-size5.size1 { + font-size: 0.55555556em; +} +.katex .sizing.reset-size5.size2, +.katex .fontsize-ensurer.reset-size5.size2 { + font-size: 0.66666667em; +} +.katex .sizing.reset-size5.size3, +.katex .fontsize-ensurer.reset-size5.size3 { + font-size: 0.77777778em; +} +.katex .sizing.reset-size5.size4, +.katex .fontsize-ensurer.reset-size5.size4 { + font-size: 0.88888889em; +} +.katex .sizing.reset-size5.size5, +.katex .fontsize-ensurer.reset-size5.size5 { + font-size: 1em; +} +.katex .sizing.reset-size5.size6, +.katex .fontsize-ensurer.reset-size5.size6 { + font-size: 1.11111111em; +} +.katex .sizing.reset-size5.size7, +.katex .fontsize-ensurer.reset-size5.size7 { + font-size: 1.33333333em; +} +.katex .sizing.reset-size5.size8, +.katex .fontsize-ensurer.reset-size5.size8 { + font-size: 1.6em; +} +.katex .sizing.reset-size5.size9, +.katex .fontsize-ensurer.reset-size5.size9 { + font-size: 1.92em; +} +.katex .sizing.reset-size5.size10, +.katex .fontsize-ensurer.reset-size5.size10 { + font-size: 2.30444444em; +} +.katex .sizing.reset-size5.size11, +.katex .fontsize-ensurer.reset-size5.size11 { + font-size: 2.76444444em; +} +.katex .sizing.reset-size6.size1, +.katex .fontsize-ensurer.reset-size6.size1 { + font-size: 0.5em; +} +.katex .sizing.reset-size6.size2, +.katex .fontsize-ensurer.reset-size6.size2 { + font-size: 0.6em; +} +.katex .sizing.reset-size6.size3, +.katex .fontsize-ensurer.reset-size6.size3 { + font-size: 0.7em; +} +.katex .sizing.reset-size6.size4, +.katex .fontsize-ensurer.reset-size6.size4 { + font-size: 0.8em; +} +.katex .sizing.reset-size6.size5, +.katex .fontsize-ensurer.reset-size6.size5 { + font-size: 0.9em; +} +.katex .sizing.reset-size6.size6, +.katex .fontsize-ensurer.reset-size6.size6 { + font-size: 1em; +} +.katex .sizing.reset-size6.size7, +.katex .fontsize-ensurer.reset-size6.size7 { + font-size: 1.2em; +} +.katex .sizing.reset-size6.size8, +.katex .fontsize-ensurer.reset-size6.size8 { + font-size: 1.44em; +} +.katex .sizing.reset-size6.size9, +.katex .fontsize-ensurer.reset-size6.size9 { + font-size: 1.728em; +} +.katex .sizing.reset-size6.size10, +.katex .fontsize-ensurer.reset-size6.size10 { + font-size: 2.074em; +} +.katex .sizing.reset-size6.size11, +.katex .fontsize-ensurer.reset-size6.size11 { + font-size: 2.488em; +} +.katex .sizing.reset-size7.size1, +.katex .fontsize-ensurer.reset-size7.size1 { + font-size: 0.41666667em; +} +.katex .sizing.reset-size7.size2, +.katex .fontsize-ensurer.reset-size7.size2 { + font-size: 0.5em; +} +.katex .sizing.reset-size7.size3, +.katex .fontsize-ensurer.reset-size7.size3 { + font-size: 0.58333333em; +} +.katex .sizing.reset-size7.size4, +.katex .fontsize-ensurer.reset-size7.size4 { + font-size: 0.66666667em; +} +.katex .sizing.reset-size7.size5, +.katex .fontsize-ensurer.reset-size7.size5 { + font-size: 0.75em; +} +.katex .sizing.reset-size7.size6, +.katex .fontsize-ensurer.reset-size7.size6 { + font-size: 0.83333333em; +} +.katex .sizing.reset-size7.size7, +.katex .fontsize-ensurer.reset-size7.size7 { + font-size: 1em; +} +.katex .sizing.reset-size7.size8, +.katex .fontsize-ensurer.reset-size7.size8 { + font-size: 1.2em; +} +.katex .sizing.reset-size7.size9, +.katex .fontsize-ensurer.reset-size7.size9 { + font-size: 1.44em; +} +.katex .sizing.reset-size7.size10, +.katex .fontsize-ensurer.reset-size7.size10 { + font-size: 1.72833333em; +} +.katex .sizing.reset-size7.size11, +.katex .fontsize-ensurer.reset-size7.size11 { + font-size: 2.07333333em; +} +.katex .sizing.reset-size8.size1, +.katex .fontsize-ensurer.reset-size8.size1 { + font-size: 0.34722222em; +} +.katex .sizing.reset-size8.size2, +.katex .fontsize-ensurer.reset-size8.size2 { + font-size: 0.41666667em; +} +.katex .sizing.reset-size8.size3, +.katex .fontsize-ensurer.reset-size8.size3 { + font-size: 0.48611111em; +} +.katex .sizing.reset-size8.size4, +.katex .fontsize-ensurer.reset-size8.size4 { + font-size: 0.55555556em; +} +.katex .sizing.reset-size8.size5, +.katex .fontsize-ensurer.reset-size8.size5 { + font-size: 0.625em; +} +.katex .sizing.reset-size8.size6, +.katex .fontsize-ensurer.reset-size8.size6 { + font-size: 0.69444444em; +} +.katex .sizing.reset-size8.size7, +.katex .fontsize-ensurer.reset-size8.size7 { + font-size: 0.83333333em; +} +.katex .sizing.reset-size8.size8, +.katex .fontsize-ensurer.reset-size8.size8 { + font-size: 1em; +} +.katex .sizing.reset-size8.size9, +.katex .fontsize-ensurer.reset-size8.size9 { + font-size: 1.2em; +} +.katex .sizing.reset-size8.size10, +.katex .fontsize-ensurer.reset-size8.size10 { + font-size: 1.44027778em; +} +.katex .sizing.reset-size8.size11, +.katex .fontsize-ensurer.reset-size8.size11 { + font-size: 1.72777778em; +} +.katex .sizing.reset-size9.size1, +.katex .fontsize-ensurer.reset-size9.size1 { + font-size: 0.28935185em; +} +.katex .sizing.reset-size9.size2, +.katex .fontsize-ensurer.reset-size9.size2 { + font-size: 0.34722222em; +} +.katex .sizing.reset-size9.size3, +.katex .fontsize-ensurer.reset-size9.size3 { + font-size: 0.40509259em; +} +.katex .sizing.reset-size9.size4, +.katex .fontsize-ensurer.reset-size9.size4 { + font-size: 0.46296296em; +} +.katex .sizing.reset-size9.size5, +.katex .fontsize-ensurer.reset-size9.size5 { + font-size: 0.52083333em; +} +.katex .sizing.reset-size9.size6, +.katex .fontsize-ensurer.reset-size9.size6 { + font-size: 0.5787037em; +} +.katex .sizing.reset-size9.size7, +.katex .fontsize-ensurer.reset-size9.size7 { + font-size: 0.69444444em; +} +.katex .sizing.reset-size9.size8, +.katex .fontsize-ensurer.reset-size9.size8 { + font-size: 0.83333333em; +} +.katex .sizing.reset-size9.size9, +.katex .fontsize-ensurer.reset-size9.size9 { + font-size: 1em; +} +.katex .sizing.reset-size9.size10, +.katex .fontsize-ensurer.reset-size9.size10 { + font-size: 1.20023148em; +} +.katex .sizing.reset-size9.size11, +.katex .fontsize-ensurer.reset-size9.size11 { + font-size: 1.43981481em; +} +.katex .sizing.reset-size10.size1, +.katex .fontsize-ensurer.reset-size10.size1 { + font-size: 0.24108004em; +} +.katex .sizing.reset-size10.size2, +.katex .fontsize-ensurer.reset-size10.size2 { + font-size: 0.28929605em; +} +.katex .sizing.reset-size10.size3, +.katex .fontsize-ensurer.reset-size10.size3 { + font-size: 0.33751205em; +} +.katex .sizing.reset-size10.size4, +.katex .fontsize-ensurer.reset-size10.size4 { + font-size: 0.38572806em; +} +.katex .sizing.reset-size10.size5, +.katex .fontsize-ensurer.reset-size10.size5 { + font-size: 0.43394407em; +} +.katex .sizing.reset-size10.size6, +.katex .fontsize-ensurer.reset-size10.size6 { + font-size: 0.48216008em; +} +.katex .sizing.reset-size10.size7, +.katex .fontsize-ensurer.reset-size10.size7 { + font-size: 0.57859209em; +} +.katex .sizing.reset-size10.size8, +.katex .fontsize-ensurer.reset-size10.size8 { + font-size: 0.69431051em; +} +.katex .sizing.reset-size10.size9, +.katex .fontsize-ensurer.reset-size10.size9 { + font-size: 0.83317261em; +} +.katex .sizing.reset-size10.size10, +.katex .fontsize-ensurer.reset-size10.size10 { + font-size: 1em; +} +.katex .sizing.reset-size10.size11, +.katex .fontsize-ensurer.reset-size10.size11 { + font-size: 1.19961427em; +} +.katex .sizing.reset-size11.size1, +.katex .fontsize-ensurer.reset-size11.size1 { + font-size: 0.20096463em; +} +.katex .sizing.reset-size11.size2, +.katex .fontsize-ensurer.reset-size11.size2 { + font-size: 0.24115756em; +} +.katex .sizing.reset-size11.size3, +.katex .fontsize-ensurer.reset-size11.size3 { + font-size: 0.28135048em; +} +.katex .sizing.reset-size11.size4, +.katex .fontsize-ensurer.reset-size11.size4 { + font-size: 0.32154341em; +} +.katex .sizing.reset-size11.size5, +.katex .fontsize-ensurer.reset-size11.size5 { + font-size: 0.36173633em; +} +.katex .sizing.reset-size11.size6, +.katex .fontsize-ensurer.reset-size11.size6 { + font-size: 0.40192926em; +} +.katex .sizing.reset-size11.size7, +.katex .fontsize-ensurer.reset-size11.size7 { + font-size: 0.48231511em; +} +.katex .sizing.reset-size11.size8, +.katex .fontsize-ensurer.reset-size11.size8 { + font-size: 0.57877814em; +} +.katex .sizing.reset-size11.size9, +.katex .fontsize-ensurer.reset-size11.size9 { + font-size: 0.69453376em; +} +.katex .sizing.reset-size11.size10, +.katex .fontsize-ensurer.reset-size11.size10 { + font-size: 0.83360129em; +} +.katex .sizing.reset-size11.size11, +.katex .fontsize-ensurer.reset-size11.size11 { + font-size: 1em; +} +.katex .delimsizing.size1 { + font-family: KaTeX_Size1; +} +.katex .delimsizing.size2 { + font-family: KaTeX_Size2; +} +.katex .delimsizing.size3 { + font-family: KaTeX_Size3; +} +.katex .delimsizing.size4 { + font-family: KaTeX_Size4; +} +.katex .delimsizing.mult .delim-size1 > span { + font-family: KaTeX_Size1; +} +.katex .delimsizing.mult .delim-size4 > span { + font-family: KaTeX_Size4; +} +.katex .nulldelimiter { + display: inline-block; + width: 0.12em; +} +.katex .delimcenter { + position: relative; +} +.katex .op-symbol { + position: relative; +} +.katex .op-symbol.small-op { + font-family: KaTeX_Size1; +} +.katex .op-symbol.large-op { + font-family: KaTeX_Size2; +} +.katex .op-limits > .vlist-t { + text-align: center; +} +.katex .accent > .vlist-t { + text-align: center; +} +.katex .accent .accent-body { + position: relative; +} +.katex .accent .accent-body:not(.accent-full) { + width: 0; +} +.katex .overlay { + display: block; +} +.katex .mtable .vertical-separator { + display: inline-block; + min-width: 1px; +} +.katex .mtable .arraycolsep { + display: inline-block; +} +.katex .mtable .col-align-c > .vlist-t { + text-align: center; +} +.katex .mtable .col-align-l > .vlist-t { + text-align: left; +} +.katex .mtable .col-align-r > .vlist-t { + text-align: right; +} +.katex .svg-align { + text-align: left; +} +.katex svg { + display: block; + position: absolute; + width: 100%; + height: inherit; + fill: currentColor; + stroke: currentColor; + fill-rule: nonzero; + fill-opacity: 1; + stroke-width: 1; + stroke-linecap: butt; + stroke-linejoin: miter; + stroke-miterlimit: 4; + stroke-dasharray: none; + stroke-dashoffset: 0; + stroke-opacity: 1; +} +.katex svg path { + stroke: none; +} +.katex img { + border-style: none; + min-width: 0; + min-height: 0; + max-width: none; + max-height: none; +} +.katex .stretchy { + width: 100%; + display: block; + position: relative; + overflow: hidden; +} +.katex .stretchy::before, +.katex .stretchy::after { + content: ""; +} +.katex .hide-tail { + width: 100%; + position: relative; + overflow: hidden; +} +.katex .halfarrow-left { + position: absolute; + left: 0; + width: 50.2%; + overflow: hidden; +} +.katex .halfarrow-right { + position: absolute; + right: 0; + width: 50.2%; + overflow: hidden; +} +.katex .brace-left { + position: absolute; + left: 0; + width: 25.1%; + overflow: hidden; +} +.katex .brace-center { + position: absolute; + left: 25%; + width: 50%; + overflow: hidden; +} +.katex .brace-right { + position: absolute; + right: 0; + width: 25.1%; + overflow: hidden; +} +.katex .x-arrow-pad { + padding: 0 0.5em; +} +.katex .x-arrow, +.katex .mover, +.katex .munder { + text-align: center; +} +.katex .boxpad { + padding: 0 0.3em 0 0.3em; +} +.katex .fbox, +.katex .fcolorbox { + box-sizing: border-box; + border: 0.04em solid; +} +.katex .cancel-pad { + padding: 0 0.2em 0 0.2em; +} +.katex .cancel-lap { + margin-left: -0.2em; + margin-right: -0.2em; +} +.katex .sout { + border-bottom-style: solid; + border-bottom-width: 0.08em; +} +.katex-display { + display: block; + margin: 1em 0; + text-align: center; +} +.katex-display > .katex { + display: block; + text-align: center; + white-space: nowrap; +} +.katex-display > .katex > .katex-html { + display: block; + position: relative; +} +.katex-display > .katex > .katex-html > .tag { + position: absolute; + right: 0; +} +.katex-display.leqno > .katex > .katex-html > .tag { + left: 0; + right: auto; +} +.katex-display.fleqn > .katex { + text-align: left; +} + diff --git a/adoc/katex/katex.js b/adoc/katex/katex.js new file mode 100644 index 00000000..2aa2c917 --- /dev/null +++ b/adoc/katex/katex.js @@ -0,0 +1,17425 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["katex"] = factory(); + else + root["katex"] = factory(); +})((typeof self !== 'undefined' ? self : this), function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 1); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + +// extracted by mini-css-extract-plugin + +/***/ }), +/* 1 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); + +// EXTERNAL MODULE: ./src/katex.less +var katex = __webpack_require__(0); + +// CONCATENATED MODULE: ./src/SourceLocation.js +/** + * Lexing or parsing positional information for error reporting. + * This object is immutable. + */ +var SourceLocation = +/*#__PURE__*/ +function () { + // The + prefix indicates that these fields aren't writeable + // Lexer holding the input string. + // Start offset, zero-based inclusive. + // End offset, zero-based exclusive. + function SourceLocation(lexer, start, end) { + this.lexer = void 0; + this.start = void 0; + this.end = void 0; + this.lexer = lexer; + this.start = start; + this.end = end; + } + /** + * Merges two `SourceLocation`s from location providers, given they are + * provided in order of appearance. + * - Returns the first one's location if only the first is provided. + * - Returns a merged range of the first and the last if both are provided + * and their lexers match. + * - Otherwise, returns null. + */ + + + SourceLocation.range = function range(first, second) { + if (!second) { + return first && first.loc; + } else if (!first || !first.loc || !second.loc || first.loc.lexer !== second.loc.lexer) { + return null; + } else { + return new SourceLocation(first.loc.lexer, first.loc.start, second.loc.end); + } + }; + + return SourceLocation; +}(); + + +// CONCATENATED MODULE: ./src/Token.js + +/** + * Interface required to break circular dependency between Token, Lexer, and + * ParseError. + */ + +/** + * The resulting token returned from `lex`. + * + * It consists of the token text plus some position information. + * The position information is essentially a range in an input string, + * but instead of referencing the bare input string, we refer to the lexer. + * That way it is possible to attach extra metadata to the input string, + * like for example a file name or similar. + * + * The position information is optional, so it is OK to construct synthetic + * tokens if appropriate. Not providing available position information may + * lead to degraded error reporting, though. + */ +var Token_Token = +/*#__PURE__*/ +function () { + function Token(text, // the text of this token + loc) { + this.text = void 0; + this.loc = void 0; + this.text = text; + this.loc = loc; + } + /** + * Given a pair of tokens (this and endToken), compute a `Token` encompassing + * the whole input range enclosed by these two. + */ + + + var _proto = Token.prototype; + + _proto.range = function range(endToken, // last token of the range, inclusive + text) // the text of the newly constructed token + { + return new Token(text, SourceLocation.range(this, endToken)); + }; + + return Token; +}(); +// CONCATENATED MODULE: ./src/ParseError.js + + +/** + * This is the ParseError class, which is the main error thrown by KaTeX + * functions when something has gone wrong. This is used to distinguish internal + * errors from errors in the expression that the user provided. + * + * If possible, a caller should provide a Token or ParseNode with information + * about where in the source string the problem occurred. + */ +var ParseError = // Error position based on passed-in Token or ParseNode. +function ParseError(message, // The error message +token) // An object providing position information +{ + this.position = void 0; + var error = "KaTeX parse error: " + message; + var start; + var loc = token && token.loc; + + if (loc && loc.start <= loc.end) { + // If we have the input and a position, make the error a bit fancier + // Get the input + var input = loc.lexer.input; // Prepend some information + + start = loc.start; + var end = loc.end; + + if (start === input.length) { + error += " at end of input: "; + } else { + error += " at position " + (start + 1) + ": "; + } // Underline token in question using combining underscores + + + var underlined = input.slice(start, end).replace(/[^]/g, "$&\u0332"); // Extract some context from the input and add it to the error + + var left; + + if (start > 15) { + left = "…" + input.slice(start - 15, start); + } else { + left = input.slice(0, start); + } + + var right; + + if (end + 15 < input.length) { + right = input.slice(end, end + 15) + "…"; + } else { + right = input.slice(end); + } + + error += left + underlined + right; + } // Some hackery to make ParseError a prototype of Error + // See http://stackoverflow.com/a/8460753 + + + var self = new Error(error); + self.name = "ParseError"; // $FlowFixMe + + self.__proto__ = ParseError.prototype; // $FlowFixMe + + self.position = start; + return self; +}; // $FlowFixMe More hackery + + +ParseError.prototype.__proto__ = Error.prototype; +/* harmony default export */ var src_ParseError = (ParseError); +// CONCATENATED MODULE: ./src/utils.js +/** + * This file contains a list of utility functions which are useful in other + * files. + */ + +/** + * Return whether an element is contained in a list + */ +var contains = function contains(list, elem) { + return list.indexOf(elem) !== -1; +}; +/** + * Provide a default value if a setting is undefined + * NOTE: Couldn't use `T` as the output type due to facebook/flow#5022. + */ + + +var deflt = function deflt(setting, defaultIfUndefined) { + return setting === undefined ? defaultIfUndefined : setting; +}; // hyphenate and escape adapted from Facebook's React under Apache 2 license + + +var uppercase = /([A-Z])/g; + +var hyphenate = function hyphenate(str) { + return str.replace(uppercase, "-$1").toLowerCase(); +}; + +var ESCAPE_LOOKUP = { + "&": "&", + ">": ">", + "<": "<", + "\"": """, + "'": "'" +}; +var ESCAPE_REGEX = /[&><"']/g; +/** + * Escapes text to prevent scripting attacks. + */ + +function utils_escape(text) { + return String(text).replace(ESCAPE_REGEX, function (match) { + return ESCAPE_LOOKUP[match]; + }); +} +/** + * Sometimes we want to pull out the innermost element of a group. In most + * cases, this will just be the group itself, but when ordgroups and colors have + * a single element, we want to pull that out. + */ + + +var getBaseElem = function getBaseElem(group) { + if (group.type === "ordgroup") { + if (group.body.length === 1) { + return getBaseElem(group.body[0]); + } else { + return group; + } + } else if (group.type === "color") { + if (group.body.length === 1) { + return getBaseElem(group.body[0]); + } else { + return group; + } + } else if (group.type === "font") { + return getBaseElem(group.body); + } else { + return group; + } +}; +/** + * TeXbook algorithms often reference "character boxes", which are simply groups + * with a single character in them. To decide if something is a character box, + * we find its innermost group, and see if it is a single character. + */ + + +var utils_isCharacterBox = function isCharacterBox(group) { + var baseElem = getBaseElem(group); // These are all they types of groups which hold single characters + + return baseElem.type === "mathord" || baseElem.type === "textord" || baseElem.type === "atom"; +}; + +var assert = function assert(value) { + if (!value) { + throw new Error('Expected non-null, but got ' + String(value)); + } + + return value; +}; +/** + * Return the protocol of a URL, or "_relative" if the URL does not specify a + * protocol (and thus is relative). + */ + +var protocolFromUrl = function protocolFromUrl(url) { + var protocol = /^\s*([^\\/#]*?)(?::|�*58|�*3a)/i.exec(url); + return protocol != null ? protocol[1] : "_relative"; +}; +/* harmony default export */ var utils = ({ + contains: contains, + deflt: deflt, + escape: utils_escape, + hyphenate: hyphenate, + getBaseElem: getBaseElem, + isCharacterBox: utils_isCharacterBox, + protocolFromUrl: protocolFromUrl +}); +// CONCATENATED MODULE: ./src/Settings.js +/* eslint no-console:0 */ + +/** + * This is a module for storing settings passed into KaTeX. It correctly handles + * default settings. + */ + + + + +/** + * The main Settings object + * + * The current options stored are: + * - displayMode: Whether the expression should be typeset as inline math + * (false, the default), meaning that the math starts in + * \textstyle and is placed in an inline-block); or as display + * math (true), meaning that the math starts in \displaystyle + * and is placed in a block with vertical margin. + */ +var Settings_Settings = +/*#__PURE__*/ +function () { + function Settings(options) { + this.displayMode = void 0; + this.output = void 0; + this.leqno = void 0; + this.fleqn = void 0; + this.throwOnError = void 0; + this.errorColor = void 0; + this.macros = void 0; + this.minRuleThickness = void 0; + this.colorIsTextColor = void 0; + this.strict = void 0; + this.trust = void 0; + this.maxSize = void 0; + this.maxExpand = void 0; + // allow null options + options = options || {}; + this.displayMode = utils.deflt(options.displayMode, false); + this.output = utils.deflt(options.output, "htmlAndMathml"); + this.leqno = utils.deflt(options.leqno, false); + this.fleqn = utils.deflt(options.fleqn, false); + this.throwOnError = utils.deflt(options.throwOnError, true); + this.errorColor = utils.deflt(options.errorColor, "#cc0000"); + this.macros = options.macros || {}; + this.minRuleThickness = Math.max(0, utils.deflt(options.minRuleThickness, 0)); + this.colorIsTextColor = utils.deflt(options.colorIsTextColor, false); + this.strict = utils.deflt(options.strict, "warn"); + this.trust = utils.deflt(options.trust, false); + this.maxSize = Math.max(0, utils.deflt(options.maxSize, Infinity)); + this.maxExpand = Math.max(0, utils.deflt(options.maxExpand, 1000)); + } + /** + * Report nonstrict (non-LaTeX-compatible) input. + * Can safely not be called if `this.strict` is false in JavaScript. + */ + + + var _proto = Settings.prototype; + + _proto.reportNonstrict = function reportNonstrict(errorCode, errorMsg, token) { + var strict = this.strict; + + if (typeof strict === "function") { + // Allow return value of strict function to be boolean or string + // (or null/undefined, meaning no further processing). + strict = strict(errorCode, errorMsg, token); + } + + if (!strict || strict === "ignore") { + return; + } else if (strict === true || strict === "error") { + throw new src_ParseError("LaTeX-incompatible input and strict mode is set to 'error': " + (errorMsg + " [" + errorCode + "]"), token); + } else if (strict === "warn") { + typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + (errorMsg + " [" + errorCode + "]")); + } else { + // won't happen in type-safe code + typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + ("unrecognized '" + strict + "': " + errorMsg + " [" + errorCode + "]")); + } + } + /** + * Check whether to apply strict (LaTeX-adhering) behavior for unusual + * input (like `\\`). Unlike `nonstrict`, will not throw an error; + * instead, "error" translates to a return value of `true`, while "ignore" + * translates to a return value of `false`. May still print a warning: + * "warn" prints a warning and returns `false`. + * This is for the second category of `errorCode`s listed in the README. + */ + ; + + _proto.useStrictBehavior = function useStrictBehavior(errorCode, errorMsg, token) { + var strict = this.strict; + + if (typeof strict === "function") { + // Allow return value of strict function to be boolean or string + // (or null/undefined, meaning no further processing). + // But catch any exceptions thrown by function, treating them + // like "error". + try { + strict = strict(errorCode, errorMsg, token); + } catch (error) { + strict = "error"; + } + } + + if (!strict || strict === "ignore") { + return false; + } else if (strict === true || strict === "error") { + return true; + } else if (strict === "warn") { + typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + (errorMsg + " [" + errorCode + "]")); + return false; + } else { + // won't happen in type-safe code + typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + ("unrecognized '" + strict + "': " + errorMsg + " [" + errorCode + "]")); + return false; + } + } + /** + * Check whether to test potentially dangerous input, and return + * `true` (trusted) or `false` (untrusted). The sole argument `context` + * should be an object with `command` field specifying the relevant LaTeX + * command (as a string starting with `\`), and any other arguments, etc. + * If `context` has a `url` field, a `protocol` field will automatically + * get added by this function (changing the specified object). + */ + ; + + _proto.isTrusted = function isTrusted(context) { + if (context.url && !context.protocol) { + context.protocol = utils.protocolFromUrl(context.url); + } + + var trust = typeof this.trust === "function" ? this.trust(context) : this.trust; + return Boolean(trust); + }; + + return Settings; +}(); + + +// CONCATENATED MODULE: ./src/Style.js +/** + * This file contains information and classes for the various kinds of styles + * used in TeX. It provides a generic `Style` class, which holds information + * about a specific style. It then provides instances of all the different kinds + * of styles possible, and provides functions to move between them and get + * information about them. + */ + +/** + * The main style class. Contains a unique id for the style, a size (which is + * the same for cramped and uncramped version of a style), and a cramped flag. + */ +var Style = +/*#__PURE__*/ +function () { + function Style(id, size, cramped) { + this.id = void 0; + this.size = void 0; + this.cramped = void 0; + this.id = id; + this.size = size; + this.cramped = cramped; + } + /** + * Get the style of a superscript given a base in the current style. + */ + + + var _proto = Style.prototype; + + _proto.sup = function sup() { + return Style_styles[_sup[this.id]]; + } + /** + * Get the style of a subscript given a base in the current style. + */ + ; + + _proto.sub = function sub() { + return Style_styles[_sub[this.id]]; + } + /** + * Get the style of a fraction numerator given the fraction in the current + * style. + */ + ; + + _proto.fracNum = function fracNum() { + return Style_styles[_fracNum[this.id]]; + } + /** + * Get the style of a fraction denominator given the fraction in the current + * style. + */ + ; + + _proto.fracDen = function fracDen() { + return Style_styles[_fracDen[this.id]]; + } + /** + * Get the cramped version of a style (in particular, cramping a cramped style + * doesn't change the style). + */ + ; + + _proto.cramp = function cramp() { + return Style_styles[_cramp[this.id]]; + } + /** + * Get a text or display version of this style. + */ + ; + + _proto.text = function text() { + return Style_styles[_text[this.id]]; + } + /** + * Return true if this style is tightly spaced (scriptstyle/scriptscriptstyle) + */ + ; + + _proto.isTight = function isTight() { + return this.size >= 2; + }; + + return Style; +}(); // Export an interface for type checking, but don't expose the implementation. +// This way, no more styles can be generated. + + +// IDs of the different styles +var D = 0; +var Dc = 1; +var T = 2; +var Tc = 3; +var S = 4; +var Sc = 5; +var SS = 6; +var SSc = 7; // Instances of the different styles + +var Style_styles = [new Style(D, 0, false), new Style(Dc, 0, true), new Style(T, 1, false), new Style(Tc, 1, true), new Style(S, 2, false), new Style(Sc, 2, true), new Style(SS, 3, false), new Style(SSc, 3, true)]; // Lookup tables for switching from one style to another + +var _sup = [S, Sc, S, Sc, SS, SSc, SS, SSc]; +var _sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc]; +var _fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc]; +var _fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc]; +var _cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc]; +var _text = [D, Dc, T, Tc, T, Tc, T, Tc]; // We only export some of the styles. + +/* harmony default export */ var src_Style = ({ + DISPLAY: Style_styles[D], + TEXT: Style_styles[T], + SCRIPT: Style_styles[S], + SCRIPTSCRIPT: Style_styles[SS] +}); +// CONCATENATED MODULE: ./src/unicodeScripts.js +/* + * This file defines the Unicode scripts and script families that we + * support. To add new scripts or families, just add a new entry to the + * scriptData array below. Adding scripts to the scriptData array allows + * characters from that script to appear in \text{} environments. + */ + +/** + * Each script or script family has a name and an array of blocks. + * Each block is an array of two numbers which specify the start and + * end points (inclusive) of a block of Unicode codepoints. + */ + +/** + * Unicode block data for the families of scripts we support in \text{}. + * Scripts only need to appear here if they do not have font metrics. + */ +var scriptData = [{ + // Latin characters beyond the Latin-1 characters we have metrics for. + // Needed for Czech, Hungarian and Turkish text, for example. + name: 'latin', + blocks: [[0x0100, 0x024f], // Latin Extended-A and Latin Extended-B + [0x0300, 0x036f]] +}, { + // The Cyrillic script used by Russian and related languages. + // A Cyrillic subset used to be supported as explicitly defined + // symbols in symbols.js + name: 'cyrillic', + blocks: [[0x0400, 0x04ff]] +}, { + // The Brahmic scripts of South and Southeast Asia + // Devanagari (0900–097F) + // Bengali (0980–09FF) + // Gurmukhi (0A00–0A7F) + // Gujarati (0A80–0AFF) + // Oriya (0B00–0B7F) + // Tamil (0B80–0BFF) + // Telugu (0C00–0C7F) + // Kannada (0C80–0CFF) + // Malayalam (0D00–0D7F) + // Sinhala (0D80–0DFF) + // Thai (0E00–0E7F) + // Lao (0E80–0EFF) + // Tibetan (0F00–0FFF) + // Myanmar (1000–109F) + name: 'brahmic', + blocks: [[0x0900, 0x109F]] +}, { + name: 'georgian', + blocks: [[0x10A0, 0x10ff]] +}, { + // Chinese and Japanese. + // The "k" in cjk is for Korean, but we've separated Korean out + name: "cjk", + blocks: [[0x3000, 0x30FF], // CJK symbols and punctuation, Hiragana, Katakana + [0x4E00, 0x9FAF], // CJK ideograms + [0xFF00, 0xFF60]] +}, { + // Korean + name: 'hangul', + blocks: [[0xAC00, 0xD7AF]] +}]; +/** + * Given a codepoint, return the name of the script or script family + * it is from, or null if it is not part of a known block + */ + +function scriptFromCodepoint(codepoint) { + for (var i = 0; i < scriptData.length; i++) { + var script = scriptData[i]; + + for (var _i = 0; _i < script.blocks.length; _i++) { + var block = script.blocks[_i]; + + if (codepoint >= block[0] && codepoint <= block[1]) { + return script.name; + } + } + } + + return null; +} +/** + * A flattened version of all the supported blocks in a single array. + * This is an optimization to make supportedCodepoint() fast. + */ + +var allBlocks = []; +scriptData.forEach(function (s) { + return s.blocks.forEach(function (b) { + return allBlocks.push.apply(allBlocks, b); + }); +}); +/** + * Given a codepoint, return true if it falls within one of the + * scripts or script families defined above and false otherwise. + * + * Micro benchmarks shows that this is faster than + * /[\u3000-\u30FF\u4E00-\u9FAF\uFF00-\uFF60\uAC00-\uD7AF\u0900-\u109F]/.test() + * in Firefox, Chrome and Node. + */ + +function supportedCodepoint(codepoint) { + for (var i = 0; i < allBlocks.length; i += 2) { + if (codepoint >= allBlocks[i] && codepoint <= allBlocks[i + 1]) { + return true; + } + } + + return false; +} +// CONCATENATED MODULE: ./src/svgGeometry.js +/** + * This file provides support to domTree.js and delimiter.js. + * It's a storehouse of path geometry for SVG images. + */ +// In all paths below, the viewBox-to-em scale is 1000:1. +var hLinePad = 80; // padding above a sqrt viniculum. Prevents image cropping. +// The viniculum of a \sqrt can be made thicker by a KaTeX rendering option. +// Think of variable extraViniculum as two detours in the SVG path. +// The detour begins at the lower left of the area labeled extraViniculum below. +// The detour proceeds one extraViniculum distance up and slightly to the right, +// displacing the radiused corner between surd and viniculum. The radius is +// traversed as usual, then the detour resumes. It goes right, to the end of +// the very long viniculumn, then down one extraViniculum distance, +// after which it resumes regular path geometry for the radical. + +/* viniculum + / + /▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒←extraViniculum + / █████████████████████←0.04em (40 unit) std viniculum thickness + / / + / / + / /\ + / / surd +*/ + +var sqrtMain = function sqrtMain(extraViniculum, hLinePad) { + // sqrtMain path geometry is from glyph U221A in the font KaTeX Main + return "M95," + (622 + extraViniculum + hLinePad) + "\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl" + extraViniculum / 2.075 + " -" + extraViniculum + "\nc5.3,-9.3,12,-14,20,-14\nH400000v" + (40 + extraViniculum) + "H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM" + (834 + extraViniculum) + " " + hLinePad + "h400000v" + (40 + extraViniculum) + "h-400000z"; +}; + +var sqrtSize1 = function sqrtSize1(extraViniculum, hLinePad) { + // size1 is from glyph U221A in the font KaTeX_Size1-Regular + return "M263," + (601 + extraViniculum + hLinePad) + "c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl" + extraViniculum / 2.084 + " -" + extraViniculum + "\nc4.7,-7.3,11,-11,19,-11\nH40000v" + (40 + extraViniculum) + "H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM" + (1001 + extraViniculum) + " " + hLinePad + "h400000v" + (40 + extraViniculum) + "h-400000z"; +}; + +var sqrtSize2 = function sqrtSize2(extraViniculum, hLinePad) { + // size2 is from glyph U221A in the font KaTeX_Size2-Regular + return "M983 " + (10 + extraViniculum + hLinePad) + "\nl" + extraViniculum / 3.13 + " -" + extraViniculum + "\nc4,-6.7,10,-10,18,-10 H400000v" + (40 + extraViniculum) + "\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM" + (1001 + extraViniculum) + " " + hLinePad + "h400000v" + (40 + extraViniculum) + "h-400000z"; +}; + +var sqrtSize3 = function sqrtSize3(extraViniculum, hLinePad) { + // size3 is from glyph U221A in the font KaTeX_Size3-Regular + return "M424," + (2398 + extraViniculum + hLinePad) + "\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\nl" + extraViniculum / 4.223 + " -" + extraViniculum + "c4,-6.7,10,-10,18,-10 H400000\nv" + (40 + extraViniculum) + "H1014.6\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\nc-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2z M" + (1001 + extraViniculum) + " " + hLinePad + "\nh400000v" + (40 + extraViniculum) + "h-400000z"; +}; + +var sqrtSize4 = function sqrtSize4(extraViniculum, hLinePad) { + // size4 is from glyph U221A in the font KaTeX_Size4-Regular + return "M473," + (2713 + extraViniculum + hLinePad) + "\nc339.3,-1799.3,509.3,-2700,510,-2702 l" + extraViniculum / 5.298 + " -" + extraViniculum + "\nc3.3,-7.3,9.3,-11,18,-11 H400000v" + (40 + extraViniculum) + "H1017.7\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\n606zM" + (1001 + extraViniculum) + " " + hLinePad + "h400000v" + (40 + extraViniculum) + "H1017.7z"; +}; + +var sqrtTall = function sqrtTall(extraViniculum, hLinePad, viewBoxHeight) { + // sqrtTall is from glyph U23B7 in the font KaTeX_Size4-Regular + // One path edge has a variable length. It runs vertically from the viniculumn + // to a point near (14 units) the bottom of the surd. The viniculum + // is normally 40 units thick. So the length of the line in question is: + var vertSegment = viewBoxHeight - 54 - hLinePad - extraViniculum; + return "M702 " + (extraViniculum + hLinePad) + "H400000" + (40 + extraViniculum) + "\nH742v" + vertSegment + "l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 " + hLinePad + "H400000v" + (40 + extraViniculum) + "H742z"; +}; + +var sqrtPath = function sqrtPath(size, extraViniculum, viewBoxHeight) { + extraViniculum = 1000 * extraViniculum; // Convert from document ems to viewBox. + + var path = ""; + + switch (size) { + case "sqrtMain": + path = sqrtMain(extraViniculum, hLinePad); + break; + + case "sqrtSize1": + path = sqrtSize1(extraViniculum, hLinePad); + break; + + case "sqrtSize2": + path = sqrtSize2(extraViniculum, hLinePad); + break; + + case "sqrtSize3": + path = sqrtSize3(extraViniculum, hLinePad); + break; + + case "sqrtSize4": + path = sqrtSize4(extraViniculum, hLinePad); + break; + + case "sqrtTall": + path = sqrtTall(extraViniculum, hLinePad, viewBoxHeight); + } + + return path; +}; +var svgGeometry_path = { + // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main + doubleleftarrow: "M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z", + // doublerightarrow is from glyph U+21D2 in font KaTeX Main + doublerightarrow: "M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z", + // leftarrow is from glyph U+2190 in font KaTeX Main + leftarrow: "M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z", + // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular + leftbrace: "M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z", + leftbraceunder: "M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z", + // overgroup is from the MnSymbol package (public domain) + leftgroup: "M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z", + leftgroupunder: "M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z", + // Harpoons are from glyph U+21BD in font KaTeX Main + leftharpoon: "M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z", + leftharpoonplus: "M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z", + leftharpoondown: "M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z", + leftharpoondownplus: "M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z", + // hook is from glyph U+21A9 in font KaTeX Main + lefthook: "M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z", + leftlinesegment: "M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z", + leftmapsto: "M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z", + // tofrom is from glyph U+21C4 in font KaTeX AMS Regular + leftToFrom: "M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z", + longequal: "M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z", + midbrace: "M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z", + midbraceunder: "M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z", + oiintSize1: "M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z", + oiintSize2: "M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z", + oiiintSize1: "M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z", + oiiintSize2: "M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z", + rightarrow: "M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z", + rightbrace: "M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z", + rightbraceunder: "M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z", + rightgroup: "M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z", + rightgroupunder: "M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z", + rightharpoon: "M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z", + rightharpoonplus: "M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z", + rightharpoondown: "M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z", + rightharpoondownplus: "M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z", + righthook: "M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z", + rightlinesegment: "M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z", + rightToFrom: "M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z", + // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular + twoheadleftarrow: "M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z", + twoheadrightarrow: "M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z", + // tilde1 is a modified version of a glyph from the MnSymbol package + tilde1: "M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z", + // ditto tilde2, tilde3, & tilde4 + tilde2: "M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z", + tilde3: "M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z", + tilde4: "M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z", + // vec is from glyph U+20D7 in font KaTeX Main + vec: "M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z", + // widehat1 is a modified version of a glyph from the MnSymbol package + widehat1: "M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z", + // ditto widehat2, widehat3, & widehat4 + widehat2: "M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z", + widehat3: "M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z", + widehat4: "M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z", + // widecheck paths are all inverted versions of widehat + widecheck1: "M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z", + widecheck2: "M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z", + widecheck3: "M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z", + widecheck4: "M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z", + // The next ten paths support reaction arrows from the mhchem package. + // Arrows for \ce{<-->} are offset from xAxis by 0.22ex, per mhchem in LaTeX + // baraboveleftarrow is mostly from from glyph U+2190 in font KaTeX Main + baraboveleftarrow: "M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z", + // rightarrowabovebar is mostly from glyph U+2192, KaTeX Main + rightarrowabovebar: "M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z", + // The short left harpoon has 0.5em (i.e. 500 units) kern on the left end. + // Ref from mhchem.sty: \rlap{\raisebox{-.22ex}{$\kern0.5em + baraboveshortleftharpoon: "M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z", + rightharpoonaboveshortbar: "M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z", + shortbaraboveleftharpoon: "M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z", + shortrightharpoonabovebar: "M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z" +}; +// CONCATENATED MODULE: ./src/tree.js + + +/** + * This node represents a document fragment, which contains elements, but when + * placed into the DOM doesn't have any representation itself. It only contains + * children and doesn't have any DOM node properties. + */ +var tree_DocumentFragment = +/*#__PURE__*/ +function () { + // HtmlDomNode + // Never used; needed for satisfying interface. + function DocumentFragment(children) { + this.children = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.maxFontSize = void 0; + this.style = void 0; + this.children = children; + this.classes = []; + this.height = 0; + this.depth = 0; + this.maxFontSize = 0; + this.style = {}; + } + + var _proto = DocumentFragment.prototype; + + _proto.hasClass = function hasClass(className) { + return utils.contains(this.classes, className); + } + /** Convert the fragment into a node. */ + ; + + _proto.toNode = function toNode() { + var frag = document.createDocumentFragment(); + + for (var i = 0; i < this.children.length; i++) { + frag.appendChild(this.children[i].toNode()); + } + + return frag; + } + /** Convert the fragment into HTML markup. */ + ; + + _proto.toMarkup = function toMarkup() { + var markup = ""; // Simply concatenate the markup for the children together. + + for (var i = 0; i < this.children.length; i++) { + markup += this.children[i].toMarkup(); + } + + return markup; + } + /** + * Converts the math node into a string, similar to innerText. Applies to + * MathDomNode's only. + */ + ; + + _proto.toText = function toText() { + // To avoid this, we would subclass documentFragment separately for + // MathML, but polyfills for subclassing is expensive per PR 1469. + // $FlowFixMe: Only works for ChildType = MathDomNode. + var toText = function toText(child) { + return child.toText(); + }; + + return this.children.map(toText).join(""); + }; + + return DocumentFragment; +}(); +// CONCATENATED MODULE: ./src/domTree.js +/** + * These objects store the data about the DOM nodes we create, as well as some + * extra data. They can then be transformed into real DOM nodes with the + * `toNode` function or HTML markup using `toMarkup`. They are useful for both + * storing extra properties on the nodes, as well as providing a way to easily + * work with the DOM. + * + * Similar functions for working with MathML nodes exist in mathMLTree.js. + * + * TODO: refactor `span` and `anchor` into common superclass when + * target environments support class inheritance + */ + + + + + +/** + * Create an HTML className based on a list of classes. In addition to joining + * with spaces, we also remove empty classes. + */ +var createClass = function createClass(classes) { + return classes.filter(function (cls) { + return cls; + }).join(" "); +}; + +var initNode = function initNode(classes, options, style) { + this.classes = classes || []; + this.attributes = {}; + this.height = 0; + this.depth = 0; + this.maxFontSize = 0; + this.style = style || {}; + + if (options) { + if (options.style.isTight()) { + this.classes.push("mtight"); + } + + var color = options.getColor(); + + if (color) { + this.style.color = color; + } + } +}; +/** + * Convert into an HTML node + */ + + +var _toNode = function toNode(tagName) { + var node = document.createElement(tagName); // Apply the class + + node.className = createClass(this.classes); // Apply inline styles + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + // $FlowFixMe Flow doesn't seem to understand span.style's type. + node.style[style] = this.style[style]; + } + } // Apply attributes + + + for (var attr in this.attributes) { + if (this.attributes.hasOwnProperty(attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } // Append the children, also as HTML nodes + + + for (var i = 0; i < this.children.length; i++) { + node.appendChild(this.children[i].toNode()); + } + + return node; +}; +/** + * Convert into an HTML markup string + */ + + +var _toMarkup = function toMarkup(tagName) { + var markup = "<" + tagName; // Add the class + + if (this.classes.length) { + markup += " class=\"" + utils.escape(createClass(this.classes)) + "\""; + } + + var styles = ""; // Add the styles, after hyphenation + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + styles += utils.hyphenate(style) + ":" + this.style[style] + ";"; + } + } + + if (styles) { + markup += " style=\"" + utils.escape(styles) + "\""; + } // Add the attributes + + + for (var attr in this.attributes) { + if (this.attributes.hasOwnProperty(attr)) { + markup += " " + attr + "=\"" + utils.escape(this.attributes[attr]) + "\""; + } + } + + markup += ">"; // Add the markup of the children, also as markup + + for (var i = 0; i < this.children.length; i++) { + markup += this.children[i].toMarkup(); + } + + markup += ""; + return markup; +}; // Making the type below exact with all optional fields doesn't work due to +// - https://github.com/facebook/flow/issues/4582 +// - https://github.com/facebook/flow/issues/5688 +// However, since *all* fields are optional, $Shape<> works as suggested in 5688 +// above. +// This type does not include all CSS properties. Additional properties should +// be added as needed. + + +/** + * This node represents a span node, with a className, a list of children, and + * an inline style. It also contains information about its height, depth, and + * maxFontSize. + * + * Represents two types with different uses: SvgSpan to wrap an SVG and DomSpan + * otherwise. This typesafety is important when HTML builders access a span's + * children. + */ +var domTree_Span = +/*#__PURE__*/ +function () { + function Span(classes, children, options, style) { + this.children = void 0; + this.attributes = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.width = void 0; + this.maxFontSize = void 0; + this.style = void 0; + initNode.call(this, classes, options, style); + this.children = children || []; + } + /** + * Sets an arbitrary attribute on the span. Warning: use this wisely. Not + * all browsers support attributes the same, and having too many custom + * attributes is probably bad. + */ + + + var _proto = Span.prototype; + + _proto.setAttribute = function setAttribute(attribute, value) { + this.attributes[attribute] = value; + }; + + _proto.hasClass = function hasClass(className) { + return utils.contains(this.classes, className); + }; + + _proto.toNode = function toNode() { + return _toNode.call(this, "span"); + }; + + _proto.toMarkup = function toMarkup() { + return _toMarkup.call(this, "span"); + }; + + return Span; +}(); +/** + * This node represents an anchor () element with a hyperlink. See `span` + * for further details. + */ + +var domTree_Anchor = +/*#__PURE__*/ +function () { + function Anchor(href, classes, children, options) { + this.children = void 0; + this.attributes = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.maxFontSize = void 0; + this.style = void 0; + initNode.call(this, classes, options); + this.children = children || []; + this.setAttribute('href', href); + } + + var _proto2 = Anchor.prototype; + + _proto2.setAttribute = function setAttribute(attribute, value) { + this.attributes[attribute] = value; + }; + + _proto2.hasClass = function hasClass(className) { + return utils.contains(this.classes, className); + }; + + _proto2.toNode = function toNode() { + return _toNode.call(this, "a"); + }; + + _proto2.toMarkup = function toMarkup() { + return _toMarkup.call(this, "a"); + }; + + return Anchor; +}(); +/** + * This node represents an image embed () element. + */ + +var domTree_Img = +/*#__PURE__*/ +function () { + function Img(src, alt, style) { + this.src = void 0; + this.alt = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.maxFontSize = void 0; + this.style = void 0; + this.alt = alt; + this.src = src; + this.classes = ["mord"]; + this.style = style; + } + + var _proto3 = Img.prototype; + + _proto3.hasClass = function hasClass(className) { + return utils.contains(this.classes, className); + }; + + _proto3.toNode = function toNode() { + var node = document.createElement("img"); + node.src = this.src; + node.alt = this.alt; + node.className = "mord"; // Apply inline styles + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + // $FlowFixMe + node.style[style] = this.style[style]; + } + } + + return node; + }; + + _proto3.toMarkup = function toMarkup() { + var markup = "" + this.alt + " 0) { + span = document.createElement("span"); + span.style.marginRight = this.italic + "em"; + } + + if (this.classes.length > 0) { + span = span || document.createElement("span"); + span.className = createClass(this.classes); + } + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + span = span || document.createElement("span"); // $FlowFixMe Flow doesn't seem to understand span.style's type. + + span.style[style] = this.style[style]; + } + } + + if (span) { + span.appendChild(node); + return span; + } else { + return node; + } + } + /** + * Creates markup for a symbol node. + */ + ; + + _proto4.toMarkup = function toMarkup() { + // TODO(alpert): More duplication than I'd like from + // span.prototype.toMarkup and symbolNode.prototype.toNode... + var needsSpan = false; + var markup = " 0) { + styles += "margin-right:" + this.italic + "em;"; + } + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + styles += utils.hyphenate(style) + ":" + this.style[style] + ";"; + } + } + + if (styles) { + needsSpan = true; + markup += " style=\"" + utils.escape(styles) + "\""; + } + + var escaped = utils.escape(this.text); + + if (needsSpan) { + markup += ">"; + markup += escaped; + markup += ""; + return markup; + } else { + return escaped; + } + }; + + return SymbolNode; +}(); +/** + * SVG nodes are used to render stretchy wide elements. + */ + +var SvgNode = +/*#__PURE__*/ +function () { + function SvgNode(children, attributes) { + this.children = void 0; + this.attributes = void 0; + this.children = children || []; + this.attributes = attributes || {}; + } + + var _proto5 = SvgNode.prototype; + + _proto5.toNode = function toNode() { + var svgNS = "http://www.w3.org/2000/svg"; + var node = document.createElementNS(svgNS, "svg"); // Apply attributes + + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } + + for (var i = 0; i < this.children.length; i++) { + node.appendChild(this.children[i].toNode()); + } + + return node; + }; + + _proto5.toMarkup = function toMarkup() { + var markup = ""; + } else { + return ""; + } + }; + + return PathNode; +}(); +var LineNode = +/*#__PURE__*/ +function () { + function LineNode(attributes) { + this.attributes = void 0; + this.attributes = attributes || {}; + } + + var _proto7 = LineNode.prototype; + + _proto7.toNode = function toNode() { + var svgNS = "http://www.w3.org/2000/svg"; + var node = document.createElementNS(svgNS, "line"); // Apply attributes + + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } + + return node; + }; + + _proto7.toMarkup = function toMarkup() { + var markup = " but got " + String(group) + "."); + } +} +// CONCATENATED MODULE: ./submodules/katex-fonts/fontMetricsData.js +// This file is GENERATED by buildMetrics.sh. DO NOT MODIFY. +/* harmony default export */ var fontMetricsData = ({ + "AMS-Regular": { + "65": [0, 0.68889, 0, 0, 0.72222], + "66": [0, 0.68889, 0, 0, 0.66667], + "67": [0, 0.68889, 0, 0, 0.72222], + "68": [0, 0.68889, 0, 0, 0.72222], + "69": [0, 0.68889, 0, 0, 0.66667], + "70": [0, 0.68889, 0, 0, 0.61111], + "71": [0, 0.68889, 0, 0, 0.77778], + "72": [0, 0.68889, 0, 0, 0.77778], + "73": [0, 0.68889, 0, 0, 0.38889], + "74": [0.16667, 0.68889, 0, 0, 0.5], + "75": [0, 0.68889, 0, 0, 0.77778], + "76": [0, 0.68889, 0, 0, 0.66667], + "77": [0, 0.68889, 0, 0, 0.94445], + "78": [0, 0.68889, 0, 0, 0.72222], + "79": [0.16667, 0.68889, 0, 0, 0.77778], + "80": [0, 0.68889, 0, 0, 0.61111], + "81": [0.16667, 0.68889, 0, 0, 0.77778], + "82": [0, 0.68889, 0, 0, 0.72222], + "83": [0, 0.68889, 0, 0, 0.55556], + "84": [0, 0.68889, 0, 0, 0.66667], + "85": [0, 0.68889, 0, 0, 0.72222], + "86": [0, 0.68889, 0, 0, 0.72222], + "87": [0, 0.68889, 0, 0, 1.0], + "88": [0, 0.68889, 0, 0, 0.72222], + "89": [0, 0.68889, 0, 0, 0.72222], + "90": [0, 0.68889, 0, 0, 0.66667], + "107": [0, 0.68889, 0, 0, 0.55556], + "165": [0, 0.675, 0.025, 0, 0.75], + "174": [0.15559, 0.69224, 0, 0, 0.94666], + "240": [0, 0.68889, 0, 0, 0.55556], + "295": [0, 0.68889, 0, 0, 0.54028], + "710": [0, 0.825, 0, 0, 2.33334], + "732": [0, 0.9, 0, 0, 2.33334], + "770": [0, 0.825, 0, 0, 2.33334], + "771": [0, 0.9, 0, 0, 2.33334], + "989": [0.08167, 0.58167, 0, 0, 0.77778], + "1008": [0, 0.43056, 0.04028, 0, 0.66667], + "8245": [0, 0.54986, 0, 0, 0.275], + "8463": [0, 0.68889, 0, 0, 0.54028], + "8487": [0, 0.68889, 0, 0, 0.72222], + "8498": [0, 0.68889, 0, 0, 0.55556], + "8502": [0, 0.68889, 0, 0, 0.66667], + "8503": [0, 0.68889, 0, 0, 0.44445], + "8504": [0, 0.68889, 0, 0, 0.66667], + "8513": [0, 0.68889, 0, 0, 0.63889], + "8592": [-0.03598, 0.46402, 0, 0, 0.5], + "8594": [-0.03598, 0.46402, 0, 0, 0.5], + "8602": [-0.13313, 0.36687, 0, 0, 1.0], + "8603": [-0.13313, 0.36687, 0, 0, 1.0], + "8606": [0.01354, 0.52239, 0, 0, 1.0], + "8608": [0.01354, 0.52239, 0, 0, 1.0], + "8610": [0.01354, 0.52239, 0, 0, 1.11111], + "8611": [0.01354, 0.52239, 0, 0, 1.11111], + "8619": [0, 0.54986, 0, 0, 1.0], + "8620": [0, 0.54986, 0, 0, 1.0], + "8621": [-0.13313, 0.37788, 0, 0, 1.38889], + "8622": [-0.13313, 0.36687, 0, 0, 1.0], + "8624": [0, 0.69224, 0, 0, 0.5], + "8625": [0, 0.69224, 0, 0, 0.5], + "8630": [0, 0.43056, 0, 0, 1.0], + "8631": [0, 0.43056, 0, 0, 1.0], + "8634": [0.08198, 0.58198, 0, 0, 0.77778], + "8635": [0.08198, 0.58198, 0, 0, 0.77778], + "8638": [0.19444, 0.69224, 0, 0, 0.41667], + "8639": [0.19444, 0.69224, 0, 0, 0.41667], + "8642": [0.19444, 0.69224, 0, 0, 0.41667], + "8643": [0.19444, 0.69224, 0, 0, 0.41667], + "8644": [0.1808, 0.675, 0, 0, 1.0], + "8646": [0.1808, 0.675, 0, 0, 1.0], + "8647": [0.1808, 0.675, 0, 0, 1.0], + "8648": [0.19444, 0.69224, 0, 0, 0.83334], + "8649": [0.1808, 0.675, 0, 0, 1.0], + "8650": [0.19444, 0.69224, 0, 0, 0.83334], + "8651": [0.01354, 0.52239, 0, 0, 1.0], + "8652": [0.01354, 0.52239, 0, 0, 1.0], + "8653": [-0.13313, 0.36687, 0, 0, 1.0], + "8654": [-0.13313, 0.36687, 0, 0, 1.0], + "8655": [-0.13313, 0.36687, 0, 0, 1.0], + "8666": [0.13667, 0.63667, 0, 0, 1.0], + "8667": [0.13667, 0.63667, 0, 0, 1.0], + "8669": [-0.13313, 0.37788, 0, 0, 1.0], + "8672": [-0.064, 0.437, 0, 0, 1.334], + "8674": [-0.064, 0.437, 0, 0, 1.334], + "8705": [0, 0.825, 0, 0, 0.5], + "8708": [0, 0.68889, 0, 0, 0.55556], + "8709": [0.08167, 0.58167, 0, 0, 0.77778], + "8717": [0, 0.43056, 0, 0, 0.42917], + "8722": [-0.03598, 0.46402, 0, 0, 0.5], + "8724": [0.08198, 0.69224, 0, 0, 0.77778], + "8726": [0.08167, 0.58167, 0, 0, 0.77778], + "8733": [0, 0.69224, 0, 0, 0.77778], + "8736": [0, 0.69224, 0, 0, 0.72222], + "8737": [0, 0.69224, 0, 0, 0.72222], + "8738": [0.03517, 0.52239, 0, 0, 0.72222], + "8739": [0.08167, 0.58167, 0, 0, 0.22222], + "8740": [0.25142, 0.74111, 0, 0, 0.27778], + "8741": [0.08167, 0.58167, 0, 0, 0.38889], + "8742": [0.25142, 0.74111, 0, 0, 0.5], + "8756": [0, 0.69224, 0, 0, 0.66667], + "8757": [0, 0.69224, 0, 0, 0.66667], + "8764": [-0.13313, 0.36687, 0, 0, 0.77778], + "8765": [-0.13313, 0.37788, 0, 0, 0.77778], + "8769": [-0.13313, 0.36687, 0, 0, 0.77778], + "8770": [-0.03625, 0.46375, 0, 0, 0.77778], + "8774": [0.30274, 0.79383, 0, 0, 0.77778], + "8776": [-0.01688, 0.48312, 0, 0, 0.77778], + "8778": [0.08167, 0.58167, 0, 0, 0.77778], + "8782": [0.06062, 0.54986, 0, 0, 0.77778], + "8783": [0.06062, 0.54986, 0, 0, 0.77778], + "8785": [0.08198, 0.58198, 0, 0, 0.77778], + "8786": [0.08198, 0.58198, 0, 0, 0.77778], + "8787": [0.08198, 0.58198, 0, 0, 0.77778], + "8790": [0, 0.69224, 0, 0, 0.77778], + "8791": [0.22958, 0.72958, 0, 0, 0.77778], + "8796": [0.08198, 0.91667, 0, 0, 0.77778], + "8806": [0.25583, 0.75583, 0, 0, 0.77778], + "8807": [0.25583, 0.75583, 0, 0, 0.77778], + "8808": [0.25142, 0.75726, 0, 0, 0.77778], + "8809": [0.25142, 0.75726, 0, 0, 0.77778], + "8812": [0.25583, 0.75583, 0, 0, 0.5], + "8814": [0.20576, 0.70576, 0, 0, 0.77778], + "8815": [0.20576, 0.70576, 0, 0, 0.77778], + "8816": [0.30274, 0.79383, 0, 0, 0.77778], + "8817": [0.30274, 0.79383, 0, 0, 0.77778], + "8818": [0.22958, 0.72958, 0, 0, 0.77778], + "8819": [0.22958, 0.72958, 0, 0, 0.77778], + "8822": [0.1808, 0.675, 0, 0, 0.77778], + "8823": [0.1808, 0.675, 0, 0, 0.77778], + "8828": [0.13667, 0.63667, 0, 0, 0.77778], + "8829": [0.13667, 0.63667, 0, 0, 0.77778], + "8830": [0.22958, 0.72958, 0, 0, 0.77778], + "8831": [0.22958, 0.72958, 0, 0, 0.77778], + "8832": [0.20576, 0.70576, 0, 0, 0.77778], + "8833": [0.20576, 0.70576, 0, 0, 0.77778], + "8840": [0.30274, 0.79383, 0, 0, 0.77778], + "8841": [0.30274, 0.79383, 0, 0, 0.77778], + "8842": [0.13597, 0.63597, 0, 0, 0.77778], + "8843": [0.13597, 0.63597, 0, 0, 0.77778], + "8847": [0.03517, 0.54986, 0, 0, 0.77778], + "8848": [0.03517, 0.54986, 0, 0, 0.77778], + "8858": [0.08198, 0.58198, 0, 0, 0.77778], + "8859": [0.08198, 0.58198, 0, 0, 0.77778], + "8861": [0.08198, 0.58198, 0, 0, 0.77778], + "8862": [0, 0.675, 0, 0, 0.77778], + "8863": [0, 0.675, 0, 0, 0.77778], + "8864": [0, 0.675, 0, 0, 0.77778], + "8865": [0, 0.675, 0, 0, 0.77778], + "8872": [0, 0.69224, 0, 0, 0.61111], + "8873": [0, 0.69224, 0, 0, 0.72222], + "8874": [0, 0.69224, 0, 0, 0.88889], + "8876": [0, 0.68889, 0, 0, 0.61111], + "8877": [0, 0.68889, 0, 0, 0.61111], + "8878": [0, 0.68889, 0, 0, 0.72222], + "8879": [0, 0.68889, 0, 0, 0.72222], + "8882": [0.03517, 0.54986, 0, 0, 0.77778], + "8883": [0.03517, 0.54986, 0, 0, 0.77778], + "8884": [0.13667, 0.63667, 0, 0, 0.77778], + "8885": [0.13667, 0.63667, 0, 0, 0.77778], + "8888": [0, 0.54986, 0, 0, 1.11111], + "8890": [0.19444, 0.43056, 0, 0, 0.55556], + "8891": [0.19444, 0.69224, 0, 0, 0.61111], + "8892": [0.19444, 0.69224, 0, 0, 0.61111], + "8901": [0, 0.54986, 0, 0, 0.27778], + "8903": [0.08167, 0.58167, 0, 0, 0.77778], + "8905": [0.08167, 0.58167, 0, 0, 0.77778], + "8906": [0.08167, 0.58167, 0, 0, 0.77778], + "8907": [0, 0.69224, 0, 0, 0.77778], + "8908": [0, 0.69224, 0, 0, 0.77778], + "8909": [-0.03598, 0.46402, 0, 0, 0.77778], + "8910": [0, 0.54986, 0, 0, 0.76042], + "8911": [0, 0.54986, 0, 0, 0.76042], + "8912": [0.03517, 0.54986, 0, 0, 0.77778], + "8913": [0.03517, 0.54986, 0, 0, 0.77778], + "8914": [0, 0.54986, 0, 0, 0.66667], + "8915": [0, 0.54986, 0, 0, 0.66667], + "8916": [0, 0.69224, 0, 0, 0.66667], + "8918": [0.0391, 0.5391, 0, 0, 0.77778], + "8919": [0.0391, 0.5391, 0, 0, 0.77778], + "8920": [0.03517, 0.54986, 0, 0, 1.33334], + "8921": [0.03517, 0.54986, 0, 0, 1.33334], + "8922": [0.38569, 0.88569, 0, 0, 0.77778], + "8923": [0.38569, 0.88569, 0, 0, 0.77778], + "8926": [0.13667, 0.63667, 0, 0, 0.77778], + "8927": [0.13667, 0.63667, 0, 0, 0.77778], + "8928": [0.30274, 0.79383, 0, 0, 0.77778], + "8929": [0.30274, 0.79383, 0, 0, 0.77778], + "8934": [0.23222, 0.74111, 0, 0, 0.77778], + "8935": [0.23222, 0.74111, 0, 0, 0.77778], + "8936": [0.23222, 0.74111, 0, 0, 0.77778], + "8937": [0.23222, 0.74111, 0, 0, 0.77778], + "8938": [0.20576, 0.70576, 0, 0, 0.77778], + "8939": [0.20576, 0.70576, 0, 0, 0.77778], + "8940": [0.30274, 0.79383, 0, 0, 0.77778], + "8941": [0.30274, 0.79383, 0, 0, 0.77778], + "8994": [0.19444, 0.69224, 0, 0, 0.77778], + "8995": [0.19444, 0.69224, 0, 0, 0.77778], + "9416": [0.15559, 0.69224, 0, 0, 0.90222], + "9484": [0, 0.69224, 0, 0, 0.5], + "9488": [0, 0.69224, 0, 0, 0.5], + "9492": [0, 0.37788, 0, 0, 0.5], + "9496": [0, 0.37788, 0, 0, 0.5], + "9585": [0.19444, 0.68889, 0, 0, 0.88889], + "9586": [0.19444, 0.74111, 0, 0, 0.88889], + "9632": [0, 0.675, 0, 0, 0.77778], + "9633": [0, 0.675, 0, 0, 0.77778], + "9650": [0, 0.54986, 0, 0, 0.72222], + "9651": [0, 0.54986, 0, 0, 0.72222], + "9654": [0.03517, 0.54986, 0, 0, 0.77778], + "9660": [0, 0.54986, 0, 0, 0.72222], + "9661": [0, 0.54986, 0, 0, 0.72222], + "9664": [0.03517, 0.54986, 0, 0, 0.77778], + "9674": [0.11111, 0.69224, 0, 0, 0.66667], + "9733": [0.19444, 0.69224, 0, 0, 0.94445], + "10003": [0, 0.69224, 0, 0, 0.83334], + "10016": [0, 0.69224, 0, 0, 0.83334], + "10731": [0.11111, 0.69224, 0, 0, 0.66667], + "10846": [0.19444, 0.75583, 0, 0, 0.61111], + "10877": [0.13667, 0.63667, 0, 0, 0.77778], + "10878": [0.13667, 0.63667, 0, 0, 0.77778], + "10885": [0.25583, 0.75583, 0, 0, 0.77778], + "10886": [0.25583, 0.75583, 0, 0, 0.77778], + "10887": [0.13597, 0.63597, 0, 0, 0.77778], + "10888": [0.13597, 0.63597, 0, 0, 0.77778], + "10889": [0.26167, 0.75726, 0, 0, 0.77778], + "10890": [0.26167, 0.75726, 0, 0, 0.77778], + "10891": [0.48256, 0.98256, 0, 0, 0.77778], + "10892": [0.48256, 0.98256, 0, 0, 0.77778], + "10901": [0.13667, 0.63667, 0, 0, 0.77778], + "10902": [0.13667, 0.63667, 0, 0, 0.77778], + "10933": [0.25142, 0.75726, 0, 0, 0.77778], + "10934": [0.25142, 0.75726, 0, 0, 0.77778], + "10935": [0.26167, 0.75726, 0, 0, 0.77778], + "10936": [0.26167, 0.75726, 0, 0, 0.77778], + "10937": [0.26167, 0.75726, 0, 0, 0.77778], + "10938": [0.26167, 0.75726, 0, 0, 0.77778], + "10949": [0.25583, 0.75583, 0, 0, 0.77778], + "10950": [0.25583, 0.75583, 0, 0, 0.77778], + "10955": [0.28481, 0.79383, 0, 0, 0.77778], + "10956": [0.28481, 0.79383, 0, 0, 0.77778], + "57350": [0.08167, 0.58167, 0, 0, 0.22222], + "57351": [0.08167, 0.58167, 0, 0, 0.38889], + "57352": [0.08167, 0.58167, 0, 0, 0.77778], + "57353": [0, 0.43056, 0.04028, 0, 0.66667], + "57356": [0.25142, 0.75726, 0, 0, 0.77778], + "57357": [0.25142, 0.75726, 0, 0, 0.77778], + "57358": [0.41951, 0.91951, 0, 0, 0.77778], + "57359": [0.30274, 0.79383, 0, 0, 0.77778], + "57360": [0.30274, 0.79383, 0, 0, 0.77778], + "57361": [0.41951, 0.91951, 0, 0, 0.77778], + "57366": [0.25142, 0.75726, 0, 0, 0.77778], + "57367": [0.25142, 0.75726, 0, 0, 0.77778], + "57368": [0.25142, 0.75726, 0, 0, 0.77778], + "57369": [0.25142, 0.75726, 0, 0, 0.77778], + "57370": [0.13597, 0.63597, 0, 0, 0.77778], + "57371": [0.13597, 0.63597, 0, 0, 0.77778] + }, + "Caligraphic-Regular": { + "48": [0, 0.43056, 0, 0, 0.5], + "49": [0, 0.43056, 0, 0, 0.5], + "50": [0, 0.43056, 0, 0, 0.5], + "51": [0.19444, 0.43056, 0, 0, 0.5], + "52": [0.19444, 0.43056, 0, 0, 0.5], + "53": [0.19444, 0.43056, 0, 0, 0.5], + "54": [0, 0.64444, 0, 0, 0.5], + "55": [0.19444, 0.43056, 0, 0, 0.5], + "56": [0, 0.64444, 0, 0, 0.5], + "57": [0.19444, 0.43056, 0, 0, 0.5], + "65": [0, 0.68333, 0, 0.19445, 0.79847], + "66": [0, 0.68333, 0.03041, 0.13889, 0.65681], + "67": [0, 0.68333, 0.05834, 0.13889, 0.52653], + "68": [0, 0.68333, 0.02778, 0.08334, 0.77139], + "69": [0, 0.68333, 0.08944, 0.11111, 0.52778], + "70": [0, 0.68333, 0.09931, 0.11111, 0.71875], + "71": [0.09722, 0.68333, 0.0593, 0.11111, 0.59487], + "72": [0, 0.68333, 0.00965, 0.11111, 0.84452], + "73": [0, 0.68333, 0.07382, 0, 0.54452], + "74": [0.09722, 0.68333, 0.18472, 0.16667, 0.67778], + "75": [0, 0.68333, 0.01445, 0.05556, 0.76195], + "76": [0, 0.68333, 0, 0.13889, 0.68972], + "77": [0, 0.68333, 0, 0.13889, 1.2009], + "78": [0, 0.68333, 0.14736, 0.08334, 0.82049], + "79": [0, 0.68333, 0.02778, 0.11111, 0.79611], + "80": [0, 0.68333, 0.08222, 0.08334, 0.69556], + "81": [0.09722, 0.68333, 0, 0.11111, 0.81667], + "82": [0, 0.68333, 0, 0.08334, 0.8475], + "83": [0, 0.68333, 0.075, 0.13889, 0.60556], + "84": [0, 0.68333, 0.25417, 0, 0.54464], + "85": [0, 0.68333, 0.09931, 0.08334, 0.62583], + "86": [0, 0.68333, 0.08222, 0, 0.61278], + "87": [0, 0.68333, 0.08222, 0.08334, 0.98778], + "88": [0, 0.68333, 0.14643, 0.13889, 0.7133], + "89": [0.09722, 0.68333, 0.08222, 0.08334, 0.66834], + "90": [0, 0.68333, 0.07944, 0.13889, 0.72473] + }, + "Fraktur-Regular": { + "33": [0, 0.69141, 0, 0, 0.29574], + "34": [0, 0.69141, 0, 0, 0.21471], + "38": [0, 0.69141, 0, 0, 0.73786], + "39": [0, 0.69141, 0, 0, 0.21201], + "40": [0.24982, 0.74947, 0, 0, 0.38865], + "41": [0.24982, 0.74947, 0, 0, 0.38865], + "42": [0, 0.62119, 0, 0, 0.27764], + "43": [0.08319, 0.58283, 0, 0, 0.75623], + "44": [0, 0.10803, 0, 0, 0.27764], + "45": [0.08319, 0.58283, 0, 0, 0.75623], + "46": [0, 0.10803, 0, 0, 0.27764], + "47": [0.24982, 0.74947, 0, 0, 0.50181], + "48": [0, 0.47534, 0, 0, 0.50181], + "49": [0, 0.47534, 0, 0, 0.50181], + "50": [0, 0.47534, 0, 0, 0.50181], + "51": [0.18906, 0.47534, 0, 0, 0.50181], + "52": [0.18906, 0.47534, 0, 0, 0.50181], + "53": [0.18906, 0.47534, 0, 0, 0.50181], + "54": [0, 0.69141, 0, 0, 0.50181], + "55": [0.18906, 0.47534, 0, 0, 0.50181], + "56": [0, 0.69141, 0, 0, 0.50181], + "57": [0.18906, 0.47534, 0, 0, 0.50181], + "58": [0, 0.47534, 0, 0, 0.21606], + "59": [0.12604, 0.47534, 0, 0, 0.21606], + "61": [-0.13099, 0.36866, 0, 0, 0.75623], + "63": [0, 0.69141, 0, 0, 0.36245], + "65": [0, 0.69141, 0, 0, 0.7176], + "66": [0, 0.69141, 0, 0, 0.88397], + "67": [0, 0.69141, 0, 0, 0.61254], + "68": [0, 0.69141, 0, 0, 0.83158], + "69": [0, 0.69141, 0, 0, 0.66278], + "70": [0.12604, 0.69141, 0, 0, 0.61119], + "71": [0, 0.69141, 0, 0, 0.78539], + "72": [0.06302, 0.69141, 0, 0, 0.7203], + "73": [0, 0.69141, 0, 0, 0.55448], + "74": [0.12604, 0.69141, 0, 0, 0.55231], + "75": [0, 0.69141, 0, 0, 0.66845], + "76": [0, 0.69141, 0, 0, 0.66602], + "77": [0, 0.69141, 0, 0, 1.04953], + "78": [0, 0.69141, 0, 0, 0.83212], + "79": [0, 0.69141, 0, 0, 0.82699], + "80": [0.18906, 0.69141, 0, 0, 0.82753], + "81": [0.03781, 0.69141, 0, 0, 0.82699], + "82": [0, 0.69141, 0, 0, 0.82807], + "83": [0, 0.69141, 0, 0, 0.82861], + "84": [0, 0.69141, 0, 0, 0.66899], + "85": [0, 0.69141, 0, 0, 0.64576], + "86": [0, 0.69141, 0, 0, 0.83131], + "87": [0, 0.69141, 0, 0, 1.04602], + "88": [0, 0.69141, 0, 0, 0.71922], + "89": [0.18906, 0.69141, 0, 0, 0.83293], + "90": [0.12604, 0.69141, 0, 0, 0.60201], + "91": [0.24982, 0.74947, 0, 0, 0.27764], + "93": [0.24982, 0.74947, 0, 0, 0.27764], + "94": [0, 0.69141, 0, 0, 0.49965], + "97": [0, 0.47534, 0, 0, 0.50046], + "98": [0, 0.69141, 0, 0, 0.51315], + "99": [0, 0.47534, 0, 0, 0.38946], + "100": [0, 0.62119, 0, 0, 0.49857], + "101": [0, 0.47534, 0, 0, 0.40053], + "102": [0.18906, 0.69141, 0, 0, 0.32626], + "103": [0.18906, 0.47534, 0, 0, 0.5037], + "104": [0.18906, 0.69141, 0, 0, 0.52126], + "105": [0, 0.69141, 0, 0, 0.27899], + "106": [0, 0.69141, 0, 0, 0.28088], + "107": [0, 0.69141, 0, 0, 0.38946], + "108": [0, 0.69141, 0, 0, 0.27953], + "109": [0, 0.47534, 0, 0, 0.76676], + "110": [0, 0.47534, 0, 0, 0.52666], + "111": [0, 0.47534, 0, 0, 0.48885], + "112": [0.18906, 0.52396, 0, 0, 0.50046], + "113": [0.18906, 0.47534, 0, 0, 0.48912], + "114": [0, 0.47534, 0, 0, 0.38919], + "115": [0, 0.47534, 0, 0, 0.44266], + "116": [0, 0.62119, 0, 0, 0.33301], + "117": [0, 0.47534, 0, 0, 0.5172], + "118": [0, 0.52396, 0, 0, 0.5118], + "119": [0, 0.52396, 0, 0, 0.77351], + "120": [0.18906, 0.47534, 0, 0, 0.38865], + "121": [0.18906, 0.47534, 0, 0, 0.49884], + "122": [0.18906, 0.47534, 0, 0, 0.39054], + "8216": [0, 0.69141, 0, 0, 0.21471], + "8217": [0, 0.69141, 0, 0, 0.21471], + "58112": [0, 0.62119, 0, 0, 0.49749], + "58113": [0, 0.62119, 0, 0, 0.4983], + "58114": [0.18906, 0.69141, 0, 0, 0.33328], + "58115": [0.18906, 0.69141, 0, 0, 0.32923], + "58116": [0.18906, 0.47534, 0, 0, 0.50343], + "58117": [0, 0.69141, 0, 0, 0.33301], + "58118": [0, 0.62119, 0, 0, 0.33409], + "58119": [0, 0.47534, 0, 0, 0.50073] + }, + "Main-Bold": { + "33": [0, 0.69444, 0, 0, 0.35], + "34": [0, 0.69444, 0, 0, 0.60278], + "35": [0.19444, 0.69444, 0, 0, 0.95833], + "36": [0.05556, 0.75, 0, 0, 0.575], + "37": [0.05556, 0.75, 0, 0, 0.95833], + "38": [0, 0.69444, 0, 0, 0.89444], + "39": [0, 0.69444, 0, 0, 0.31944], + "40": [0.25, 0.75, 0, 0, 0.44722], + "41": [0.25, 0.75, 0, 0, 0.44722], + "42": [0, 0.75, 0, 0, 0.575], + "43": [0.13333, 0.63333, 0, 0, 0.89444], + "44": [0.19444, 0.15556, 0, 0, 0.31944], + "45": [0, 0.44444, 0, 0, 0.38333], + "46": [0, 0.15556, 0, 0, 0.31944], + "47": [0.25, 0.75, 0, 0, 0.575], + "48": [0, 0.64444, 0, 0, 0.575], + "49": [0, 0.64444, 0, 0, 0.575], + "50": [0, 0.64444, 0, 0, 0.575], + "51": [0, 0.64444, 0, 0, 0.575], + "52": [0, 0.64444, 0, 0, 0.575], + "53": [0, 0.64444, 0, 0, 0.575], + "54": [0, 0.64444, 0, 0, 0.575], + "55": [0, 0.64444, 0, 0, 0.575], + "56": [0, 0.64444, 0, 0, 0.575], + "57": [0, 0.64444, 0, 0, 0.575], + "58": [0, 0.44444, 0, 0, 0.31944], + "59": [0.19444, 0.44444, 0, 0, 0.31944], + "60": [0.08556, 0.58556, 0, 0, 0.89444], + "61": [-0.10889, 0.39111, 0, 0, 0.89444], + "62": [0.08556, 0.58556, 0, 0, 0.89444], + "63": [0, 0.69444, 0, 0, 0.54305], + "64": [0, 0.69444, 0, 0, 0.89444], + "65": [0, 0.68611, 0, 0, 0.86944], + "66": [0, 0.68611, 0, 0, 0.81805], + "67": [0, 0.68611, 0, 0, 0.83055], + "68": [0, 0.68611, 0, 0, 0.88194], + "69": [0, 0.68611, 0, 0, 0.75555], + "70": [0, 0.68611, 0, 0, 0.72361], + "71": [0, 0.68611, 0, 0, 0.90416], + "72": [0, 0.68611, 0, 0, 0.9], + "73": [0, 0.68611, 0, 0, 0.43611], + "74": [0, 0.68611, 0, 0, 0.59444], + "75": [0, 0.68611, 0, 0, 0.90138], + "76": [0, 0.68611, 0, 0, 0.69166], + "77": [0, 0.68611, 0, 0, 1.09166], + "78": [0, 0.68611, 0, 0, 0.9], + "79": [0, 0.68611, 0, 0, 0.86388], + "80": [0, 0.68611, 0, 0, 0.78611], + "81": [0.19444, 0.68611, 0, 0, 0.86388], + "82": [0, 0.68611, 0, 0, 0.8625], + "83": [0, 0.68611, 0, 0, 0.63889], + "84": [0, 0.68611, 0, 0, 0.8], + "85": [0, 0.68611, 0, 0, 0.88472], + "86": [0, 0.68611, 0.01597, 0, 0.86944], + "87": [0, 0.68611, 0.01597, 0, 1.18888], + "88": [0, 0.68611, 0, 0, 0.86944], + "89": [0, 0.68611, 0.02875, 0, 0.86944], + "90": [0, 0.68611, 0, 0, 0.70277], + "91": [0.25, 0.75, 0, 0, 0.31944], + "92": [0.25, 0.75, 0, 0, 0.575], + "93": [0.25, 0.75, 0, 0, 0.31944], + "94": [0, 0.69444, 0, 0, 0.575], + "95": [0.31, 0.13444, 0.03194, 0, 0.575], + "97": [0, 0.44444, 0, 0, 0.55902], + "98": [0, 0.69444, 0, 0, 0.63889], + "99": [0, 0.44444, 0, 0, 0.51111], + "100": [0, 0.69444, 0, 0, 0.63889], + "101": [0, 0.44444, 0, 0, 0.52708], + "102": [0, 0.69444, 0.10903, 0, 0.35139], + "103": [0.19444, 0.44444, 0.01597, 0, 0.575], + "104": [0, 0.69444, 0, 0, 0.63889], + "105": [0, 0.69444, 0, 0, 0.31944], + "106": [0.19444, 0.69444, 0, 0, 0.35139], + "107": [0, 0.69444, 0, 0, 0.60694], + "108": [0, 0.69444, 0, 0, 0.31944], + "109": [0, 0.44444, 0, 0, 0.95833], + "110": [0, 0.44444, 0, 0, 0.63889], + "111": [0, 0.44444, 0, 0, 0.575], + "112": [0.19444, 0.44444, 0, 0, 0.63889], + "113": [0.19444, 0.44444, 0, 0, 0.60694], + "114": [0, 0.44444, 0, 0, 0.47361], + "115": [0, 0.44444, 0, 0, 0.45361], + "116": [0, 0.63492, 0, 0, 0.44722], + "117": [0, 0.44444, 0, 0, 0.63889], + "118": [0, 0.44444, 0.01597, 0, 0.60694], + "119": [0, 0.44444, 0.01597, 0, 0.83055], + "120": [0, 0.44444, 0, 0, 0.60694], + "121": [0.19444, 0.44444, 0.01597, 0, 0.60694], + "122": [0, 0.44444, 0, 0, 0.51111], + "123": [0.25, 0.75, 0, 0, 0.575], + "124": [0.25, 0.75, 0, 0, 0.31944], + "125": [0.25, 0.75, 0, 0, 0.575], + "126": [0.35, 0.34444, 0, 0, 0.575], + "168": [0, 0.69444, 0, 0, 0.575], + "172": [0, 0.44444, 0, 0, 0.76666], + "176": [0, 0.69444, 0, 0, 0.86944], + "177": [0.13333, 0.63333, 0, 0, 0.89444], + "184": [0.17014, 0, 0, 0, 0.51111], + "198": [0, 0.68611, 0, 0, 1.04166], + "215": [0.13333, 0.63333, 0, 0, 0.89444], + "216": [0.04861, 0.73472, 0, 0, 0.89444], + "223": [0, 0.69444, 0, 0, 0.59722], + "230": [0, 0.44444, 0, 0, 0.83055], + "247": [0.13333, 0.63333, 0, 0, 0.89444], + "248": [0.09722, 0.54167, 0, 0, 0.575], + "305": [0, 0.44444, 0, 0, 0.31944], + "338": [0, 0.68611, 0, 0, 1.16944], + "339": [0, 0.44444, 0, 0, 0.89444], + "567": [0.19444, 0.44444, 0, 0, 0.35139], + "710": [0, 0.69444, 0, 0, 0.575], + "711": [0, 0.63194, 0, 0, 0.575], + "713": [0, 0.59611, 0, 0, 0.575], + "714": [0, 0.69444, 0, 0, 0.575], + "715": [0, 0.69444, 0, 0, 0.575], + "728": [0, 0.69444, 0, 0, 0.575], + "729": [0, 0.69444, 0, 0, 0.31944], + "730": [0, 0.69444, 0, 0, 0.86944], + "732": [0, 0.69444, 0, 0, 0.575], + "733": [0, 0.69444, 0, 0, 0.575], + "915": [0, 0.68611, 0, 0, 0.69166], + "916": [0, 0.68611, 0, 0, 0.95833], + "920": [0, 0.68611, 0, 0, 0.89444], + "923": [0, 0.68611, 0, 0, 0.80555], + "926": [0, 0.68611, 0, 0, 0.76666], + "928": [0, 0.68611, 0, 0, 0.9], + "931": [0, 0.68611, 0, 0, 0.83055], + "933": [0, 0.68611, 0, 0, 0.89444], + "934": [0, 0.68611, 0, 0, 0.83055], + "936": [0, 0.68611, 0, 0, 0.89444], + "937": [0, 0.68611, 0, 0, 0.83055], + "8211": [0, 0.44444, 0.03194, 0, 0.575], + "8212": [0, 0.44444, 0.03194, 0, 1.14999], + "8216": [0, 0.69444, 0, 0, 0.31944], + "8217": [0, 0.69444, 0, 0, 0.31944], + "8220": [0, 0.69444, 0, 0, 0.60278], + "8221": [0, 0.69444, 0, 0, 0.60278], + "8224": [0.19444, 0.69444, 0, 0, 0.51111], + "8225": [0.19444, 0.69444, 0, 0, 0.51111], + "8242": [0, 0.55556, 0, 0, 0.34444], + "8407": [0, 0.72444, 0.15486, 0, 0.575], + "8463": [0, 0.69444, 0, 0, 0.66759], + "8465": [0, 0.69444, 0, 0, 0.83055], + "8467": [0, 0.69444, 0, 0, 0.47361], + "8472": [0.19444, 0.44444, 0, 0, 0.74027], + "8476": [0, 0.69444, 0, 0, 0.83055], + "8501": [0, 0.69444, 0, 0, 0.70277], + "8592": [-0.10889, 0.39111, 0, 0, 1.14999], + "8593": [0.19444, 0.69444, 0, 0, 0.575], + "8594": [-0.10889, 0.39111, 0, 0, 1.14999], + "8595": [0.19444, 0.69444, 0, 0, 0.575], + "8596": [-0.10889, 0.39111, 0, 0, 1.14999], + "8597": [0.25, 0.75, 0, 0, 0.575], + "8598": [0.19444, 0.69444, 0, 0, 1.14999], + "8599": [0.19444, 0.69444, 0, 0, 1.14999], + "8600": [0.19444, 0.69444, 0, 0, 1.14999], + "8601": [0.19444, 0.69444, 0, 0, 1.14999], + "8636": [-0.10889, 0.39111, 0, 0, 1.14999], + "8637": [-0.10889, 0.39111, 0, 0, 1.14999], + "8640": [-0.10889, 0.39111, 0, 0, 1.14999], + "8641": [-0.10889, 0.39111, 0, 0, 1.14999], + "8656": [-0.10889, 0.39111, 0, 0, 1.14999], + "8657": [0.19444, 0.69444, 0, 0, 0.70277], + "8658": [-0.10889, 0.39111, 0, 0, 1.14999], + "8659": [0.19444, 0.69444, 0, 0, 0.70277], + "8660": [-0.10889, 0.39111, 0, 0, 1.14999], + "8661": [0.25, 0.75, 0, 0, 0.70277], + "8704": [0, 0.69444, 0, 0, 0.63889], + "8706": [0, 0.69444, 0.06389, 0, 0.62847], + "8707": [0, 0.69444, 0, 0, 0.63889], + "8709": [0.05556, 0.75, 0, 0, 0.575], + "8711": [0, 0.68611, 0, 0, 0.95833], + "8712": [0.08556, 0.58556, 0, 0, 0.76666], + "8715": [0.08556, 0.58556, 0, 0, 0.76666], + "8722": [0.13333, 0.63333, 0, 0, 0.89444], + "8723": [0.13333, 0.63333, 0, 0, 0.89444], + "8725": [0.25, 0.75, 0, 0, 0.575], + "8726": [0.25, 0.75, 0, 0, 0.575], + "8727": [-0.02778, 0.47222, 0, 0, 0.575], + "8728": [-0.02639, 0.47361, 0, 0, 0.575], + "8729": [-0.02639, 0.47361, 0, 0, 0.575], + "8730": [0.18, 0.82, 0, 0, 0.95833], + "8733": [0, 0.44444, 0, 0, 0.89444], + "8734": [0, 0.44444, 0, 0, 1.14999], + "8736": [0, 0.69224, 0, 0, 0.72222], + "8739": [0.25, 0.75, 0, 0, 0.31944], + "8741": [0.25, 0.75, 0, 0, 0.575], + "8743": [0, 0.55556, 0, 0, 0.76666], + "8744": [0, 0.55556, 0, 0, 0.76666], + "8745": [0, 0.55556, 0, 0, 0.76666], + "8746": [0, 0.55556, 0, 0, 0.76666], + "8747": [0.19444, 0.69444, 0.12778, 0, 0.56875], + "8764": [-0.10889, 0.39111, 0, 0, 0.89444], + "8768": [0.19444, 0.69444, 0, 0, 0.31944], + "8771": [0.00222, 0.50222, 0, 0, 0.89444], + "8776": [0.02444, 0.52444, 0, 0, 0.89444], + "8781": [0.00222, 0.50222, 0, 0, 0.89444], + "8801": [0.00222, 0.50222, 0, 0, 0.89444], + "8804": [0.19667, 0.69667, 0, 0, 0.89444], + "8805": [0.19667, 0.69667, 0, 0, 0.89444], + "8810": [0.08556, 0.58556, 0, 0, 1.14999], + "8811": [0.08556, 0.58556, 0, 0, 1.14999], + "8826": [0.08556, 0.58556, 0, 0, 0.89444], + "8827": [0.08556, 0.58556, 0, 0, 0.89444], + "8834": [0.08556, 0.58556, 0, 0, 0.89444], + "8835": [0.08556, 0.58556, 0, 0, 0.89444], + "8838": [0.19667, 0.69667, 0, 0, 0.89444], + "8839": [0.19667, 0.69667, 0, 0, 0.89444], + "8846": [0, 0.55556, 0, 0, 0.76666], + "8849": [0.19667, 0.69667, 0, 0, 0.89444], + "8850": [0.19667, 0.69667, 0, 0, 0.89444], + "8851": [0, 0.55556, 0, 0, 0.76666], + "8852": [0, 0.55556, 0, 0, 0.76666], + "8853": [0.13333, 0.63333, 0, 0, 0.89444], + "8854": [0.13333, 0.63333, 0, 0, 0.89444], + "8855": [0.13333, 0.63333, 0, 0, 0.89444], + "8856": [0.13333, 0.63333, 0, 0, 0.89444], + "8857": [0.13333, 0.63333, 0, 0, 0.89444], + "8866": [0, 0.69444, 0, 0, 0.70277], + "8867": [0, 0.69444, 0, 0, 0.70277], + "8868": [0, 0.69444, 0, 0, 0.89444], + "8869": [0, 0.69444, 0, 0, 0.89444], + "8900": [-0.02639, 0.47361, 0, 0, 0.575], + "8901": [-0.02639, 0.47361, 0, 0, 0.31944], + "8902": [-0.02778, 0.47222, 0, 0, 0.575], + "8968": [0.25, 0.75, 0, 0, 0.51111], + "8969": [0.25, 0.75, 0, 0, 0.51111], + "8970": [0.25, 0.75, 0, 0, 0.51111], + "8971": [0.25, 0.75, 0, 0, 0.51111], + "8994": [-0.13889, 0.36111, 0, 0, 1.14999], + "8995": [-0.13889, 0.36111, 0, 0, 1.14999], + "9651": [0.19444, 0.69444, 0, 0, 1.02222], + "9657": [-0.02778, 0.47222, 0, 0, 0.575], + "9661": [0.19444, 0.69444, 0, 0, 1.02222], + "9667": [-0.02778, 0.47222, 0, 0, 0.575], + "9711": [0.19444, 0.69444, 0, 0, 1.14999], + "9824": [0.12963, 0.69444, 0, 0, 0.89444], + "9825": [0.12963, 0.69444, 0, 0, 0.89444], + "9826": [0.12963, 0.69444, 0, 0, 0.89444], + "9827": [0.12963, 0.69444, 0, 0, 0.89444], + "9837": [0, 0.75, 0, 0, 0.44722], + "9838": [0.19444, 0.69444, 0, 0, 0.44722], + "9839": [0.19444, 0.69444, 0, 0, 0.44722], + "10216": [0.25, 0.75, 0, 0, 0.44722], + "10217": [0.25, 0.75, 0, 0, 0.44722], + "10815": [0, 0.68611, 0, 0, 0.9], + "10927": [0.19667, 0.69667, 0, 0, 0.89444], + "10928": [0.19667, 0.69667, 0, 0, 0.89444], + "57376": [0.19444, 0.69444, 0, 0, 0] + }, + "Main-BoldItalic": { + "33": [0, 0.69444, 0.11417, 0, 0.38611], + "34": [0, 0.69444, 0.07939, 0, 0.62055], + "35": [0.19444, 0.69444, 0.06833, 0, 0.94444], + "37": [0.05556, 0.75, 0.12861, 0, 0.94444], + "38": [0, 0.69444, 0.08528, 0, 0.88555], + "39": [0, 0.69444, 0.12945, 0, 0.35555], + "40": [0.25, 0.75, 0.15806, 0, 0.47333], + "41": [0.25, 0.75, 0.03306, 0, 0.47333], + "42": [0, 0.75, 0.14333, 0, 0.59111], + "43": [0.10333, 0.60333, 0.03306, 0, 0.88555], + "44": [0.19444, 0.14722, 0, 0, 0.35555], + "45": [0, 0.44444, 0.02611, 0, 0.41444], + "46": [0, 0.14722, 0, 0, 0.35555], + "47": [0.25, 0.75, 0.15806, 0, 0.59111], + "48": [0, 0.64444, 0.13167, 0, 0.59111], + "49": [0, 0.64444, 0.13167, 0, 0.59111], + "50": [0, 0.64444, 0.13167, 0, 0.59111], + "51": [0, 0.64444, 0.13167, 0, 0.59111], + "52": [0.19444, 0.64444, 0.13167, 0, 0.59111], + "53": [0, 0.64444, 0.13167, 0, 0.59111], + "54": [0, 0.64444, 0.13167, 0, 0.59111], + "55": [0.19444, 0.64444, 0.13167, 0, 0.59111], + "56": [0, 0.64444, 0.13167, 0, 0.59111], + "57": [0, 0.64444, 0.13167, 0, 0.59111], + "58": [0, 0.44444, 0.06695, 0, 0.35555], + "59": [0.19444, 0.44444, 0.06695, 0, 0.35555], + "61": [-0.10889, 0.39111, 0.06833, 0, 0.88555], + "63": [0, 0.69444, 0.11472, 0, 0.59111], + "64": [0, 0.69444, 0.09208, 0, 0.88555], + "65": [0, 0.68611, 0, 0, 0.86555], + "66": [0, 0.68611, 0.0992, 0, 0.81666], + "67": [0, 0.68611, 0.14208, 0, 0.82666], + "68": [0, 0.68611, 0.09062, 0, 0.87555], + "69": [0, 0.68611, 0.11431, 0, 0.75666], + "70": [0, 0.68611, 0.12903, 0, 0.72722], + "71": [0, 0.68611, 0.07347, 0, 0.89527], + "72": [0, 0.68611, 0.17208, 0, 0.8961], + "73": [0, 0.68611, 0.15681, 0, 0.47166], + "74": [0, 0.68611, 0.145, 0, 0.61055], + "75": [0, 0.68611, 0.14208, 0, 0.89499], + "76": [0, 0.68611, 0, 0, 0.69777], + "77": [0, 0.68611, 0.17208, 0, 1.07277], + "78": [0, 0.68611, 0.17208, 0, 0.8961], + "79": [0, 0.68611, 0.09062, 0, 0.85499], + "80": [0, 0.68611, 0.0992, 0, 0.78721], + "81": [0.19444, 0.68611, 0.09062, 0, 0.85499], + "82": [0, 0.68611, 0.02559, 0, 0.85944], + "83": [0, 0.68611, 0.11264, 0, 0.64999], + "84": [0, 0.68611, 0.12903, 0, 0.7961], + "85": [0, 0.68611, 0.17208, 0, 0.88083], + "86": [0, 0.68611, 0.18625, 0, 0.86555], + "87": [0, 0.68611, 0.18625, 0, 1.15999], + "88": [0, 0.68611, 0.15681, 0, 0.86555], + "89": [0, 0.68611, 0.19803, 0, 0.86555], + "90": [0, 0.68611, 0.14208, 0, 0.70888], + "91": [0.25, 0.75, 0.1875, 0, 0.35611], + "93": [0.25, 0.75, 0.09972, 0, 0.35611], + "94": [0, 0.69444, 0.06709, 0, 0.59111], + "95": [0.31, 0.13444, 0.09811, 0, 0.59111], + "97": [0, 0.44444, 0.09426, 0, 0.59111], + "98": [0, 0.69444, 0.07861, 0, 0.53222], + "99": [0, 0.44444, 0.05222, 0, 0.53222], + "100": [0, 0.69444, 0.10861, 0, 0.59111], + "101": [0, 0.44444, 0.085, 0, 0.53222], + "102": [0.19444, 0.69444, 0.21778, 0, 0.4], + "103": [0.19444, 0.44444, 0.105, 0, 0.53222], + "104": [0, 0.69444, 0.09426, 0, 0.59111], + "105": [0, 0.69326, 0.11387, 0, 0.35555], + "106": [0.19444, 0.69326, 0.1672, 0, 0.35555], + "107": [0, 0.69444, 0.11111, 0, 0.53222], + "108": [0, 0.69444, 0.10861, 0, 0.29666], + "109": [0, 0.44444, 0.09426, 0, 0.94444], + "110": [0, 0.44444, 0.09426, 0, 0.64999], + "111": [0, 0.44444, 0.07861, 0, 0.59111], + "112": [0.19444, 0.44444, 0.07861, 0, 0.59111], + "113": [0.19444, 0.44444, 0.105, 0, 0.53222], + "114": [0, 0.44444, 0.11111, 0, 0.50167], + "115": [0, 0.44444, 0.08167, 0, 0.48694], + "116": [0, 0.63492, 0.09639, 0, 0.385], + "117": [0, 0.44444, 0.09426, 0, 0.62055], + "118": [0, 0.44444, 0.11111, 0, 0.53222], + "119": [0, 0.44444, 0.11111, 0, 0.76777], + "120": [0, 0.44444, 0.12583, 0, 0.56055], + "121": [0.19444, 0.44444, 0.105, 0, 0.56166], + "122": [0, 0.44444, 0.13889, 0, 0.49055], + "126": [0.35, 0.34444, 0.11472, 0, 0.59111], + "163": [0, 0.69444, 0, 0, 0.86853], + "168": [0, 0.69444, 0.11473, 0, 0.59111], + "176": [0, 0.69444, 0, 0, 0.94888], + "184": [0.17014, 0, 0, 0, 0.53222], + "198": [0, 0.68611, 0.11431, 0, 1.02277], + "216": [0.04861, 0.73472, 0.09062, 0, 0.88555], + "223": [0.19444, 0.69444, 0.09736, 0, 0.665], + "230": [0, 0.44444, 0.085, 0, 0.82666], + "248": [0.09722, 0.54167, 0.09458, 0, 0.59111], + "305": [0, 0.44444, 0.09426, 0, 0.35555], + "338": [0, 0.68611, 0.11431, 0, 1.14054], + "339": [0, 0.44444, 0.085, 0, 0.82666], + "567": [0.19444, 0.44444, 0.04611, 0, 0.385], + "710": [0, 0.69444, 0.06709, 0, 0.59111], + "711": [0, 0.63194, 0.08271, 0, 0.59111], + "713": [0, 0.59444, 0.10444, 0, 0.59111], + "714": [0, 0.69444, 0.08528, 0, 0.59111], + "715": [0, 0.69444, 0, 0, 0.59111], + "728": [0, 0.69444, 0.10333, 0, 0.59111], + "729": [0, 0.69444, 0.12945, 0, 0.35555], + "730": [0, 0.69444, 0, 0, 0.94888], + "732": [0, 0.69444, 0.11472, 0, 0.59111], + "733": [0, 0.69444, 0.11472, 0, 0.59111], + "915": [0, 0.68611, 0.12903, 0, 0.69777], + "916": [0, 0.68611, 0, 0, 0.94444], + "920": [0, 0.68611, 0.09062, 0, 0.88555], + "923": [0, 0.68611, 0, 0, 0.80666], + "926": [0, 0.68611, 0.15092, 0, 0.76777], + "928": [0, 0.68611, 0.17208, 0, 0.8961], + "931": [0, 0.68611, 0.11431, 0, 0.82666], + "933": [0, 0.68611, 0.10778, 0, 0.88555], + "934": [0, 0.68611, 0.05632, 0, 0.82666], + "936": [0, 0.68611, 0.10778, 0, 0.88555], + "937": [0, 0.68611, 0.0992, 0, 0.82666], + "8211": [0, 0.44444, 0.09811, 0, 0.59111], + "8212": [0, 0.44444, 0.09811, 0, 1.18221], + "8216": [0, 0.69444, 0.12945, 0, 0.35555], + "8217": [0, 0.69444, 0.12945, 0, 0.35555], + "8220": [0, 0.69444, 0.16772, 0, 0.62055], + "8221": [0, 0.69444, 0.07939, 0, 0.62055] + }, + "Main-Italic": { + "33": [0, 0.69444, 0.12417, 0, 0.30667], + "34": [0, 0.69444, 0.06961, 0, 0.51444], + "35": [0.19444, 0.69444, 0.06616, 0, 0.81777], + "37": [0.05556, 0.75, 0.13639, 0, 0.81777], + "38": [0, 0.69444, 0.09694, 0, 0.76666], + "39": [0, 0.69444, 0.12417, 0, 0.30667], + "40": [0.25, 0.75, 0.16194, 0, 0.40889], + "41": [0.25, 0.75, 0.03694, 0, 0.40889], + "42": [0, 0.75, 0.14917, 0, 0.51111], + "43": [0.05667, 0.56167, 0.03694, 0, 0.76666], + "44": [0.19444, 0.10556, 0, 0, 0.30667], + "45": [0, 0.43056, 0.02826, 0, 0.35778], + "46": [0, 0.10556, 0, 0, 0.30667], + "47": [0.25, 0.75, 0.16194, 0, 0.51111], + "48": [0, 0.64444, 0.13556, 0, 0.51111], + "49": [0, 0.64444, 0.13556, 0, 0.51111], + "50": [0, 0.64444, 0.13556, 0, 0.51111], + "51": [0, 0.64444, 0.13556, 0, 0.51111], + "52": [0.19444, 0.64444, 0.13556, 0, 0.51111], + "53": [0, 0.64444, 0.13556, 0, 0.51111], + "54": [0, 0.64444, 0.13556, 0, 0.51111], + "55": [0.19444, 0.64444, 0.13556, 0, 0.51111], + "56": [0, 0.64444, 0.13556, 0, 0.51111], + "57": [0, 0.64444, 0.13556, 0, 0.51111], + "58": [0, 0.43056, 0.0582, 0, 0.30667], + "59": [0.19444, 0.43056, 0.0582, 0, 0.30667], + "61": [-0.13313, 0.36687, 0.06616, 0, 0.76666], + "63": [0, 0.69444, 0.1225, 0, 0.51111], + "64": [0, 0.69444, 0.09597, 0, 0.76666], + "65": [0, 0.68333, 0, 0, 0.74333], + "66": [0, 0.68333, 0.10257, 0, 0.70389], + "67": [0, 0.68333, 0.14528, 0, 0.71555], + "68": [0, 0.68333, 0.09403, 0, 0.755], + "69": [0, 0.68333, 0.12028, 0, 0.67833], + "70": [0, 0.68333, 0.13305, 0, 0.65277], + "71": [0, 0.68333, 0.08722, 0, 0.77361], + "72": [0, 0.68333, 0.16389, 0, 0.74333], + "73": [0, 0.68333, 0.15806, 0, 0.38555], + "74": [0, 0.68333, 0.14028, 0, 0.525], + "75": [0, 0.68333, 0.14528, 0, 0.76888], + "76": [0, 0.68333, 0, 0, 0.62722], + "77": [0, 0.68333, 0.16389, 0, 0.89666], + "78": [0, 0.68333, 0.16389, 0, 0.74333], + "79": [0, 0.68333, 0.09403, 0, 0.76666], + "80": [0, 0.68333, 0.10257, 0, 0.67833], + "81": [0.19444, 0.68333, 0.09403, 0, 0.76666], + "82": [0, 0.68333, 0.03868, 0, 0.72944], + "83": [0, 0.68333, 0.11972, 0, 0.56222], + "84": [0, 0.68333, 0.13305, 0, 0.71555], + "85": [0, 0.68333, 0.16389, 0, 0.74333], + "86": [0, 0.68333, 0.18361, 0, 0.74333], + "87": [0, 0.68333, 0.18361, 0, 0.99888], + "88": [0, 0.68333, 0.15806, 0, 0.74333], + "89": [0, 0.68333, 0.19383, 0, 0.74333], + "90": [0, 0.68333, 0.14528, 0, 0.61333], + "91": [0.25, 0.75, 0.1875, 0, 0.30667], + "93": [0.25, 0.75, 0.10528, 0, 0.30667], + "94": [0, 0.69444, 0.06646, 0, 0.51111], + "95": [0.31, 0.12056, 0.09208, 0, 0.51111], + "97": [0, 0.43056, 0.07671, 0, 0.51111], + "98": [0, 0.69444, 0.06312, 0, 0.46], + "99": [0, 0.43056, 0.05653, 0, 0.46], + "100": [0, 0.69444, 0.10333, 0, 0.51111], + "101": [0, 0.43056, 0.07514, 0, 0.46], + "102": [0.19444, 0.69444, 0.21194, 0, 0.30667], + "103": [0.19444, 0.43056, 0.08847, 0, 0.46], + "104": [0, 0.69444, 0.07671, 0, 0.51111], + "105": [0, 0.65536, 0.1019, 0, 0.30667], + "106": [0.19444, 0.65536, 0.14467, 0, 0.30667], + "107": [0, 0.69444, 0.10764, 0, 0.46], + "108": [0, 0.69444, 0.10333, 0, 0.25555], + "109": [0, 0.43056, 0.07671, 0, 0.81777], + "110": [0, 0.43056, 0.07671, 0, 0.56222], + "111": [0, 0.43056, 0.06312, 0, 0.51111], + "112": [0.19444, 0.43056, 0.06312, 0, 0.51111], + "113": [0.19444, 0.43056, 0.08847, 0, 0.46], + "114": [0, 0.43056, 0.10764, 0, 0.42166], + "115": [0, 0.43056, 0.08208, 0, 0.40889], + "116": [0, 0.61508, 0.09486, 0, 0.33222], + "117": [0, 0.43056, 0.07671, 0, 0.53666], + "118": [0, 0.43056, 0.10764, 0, 0.46], + "119": [0, 0.43056, 0.10764, 0, 0.66444], + "120": [0, 0.43056, 0.12042, 0, 0.46389], + "121": [0.19444, 0.43056, 0.08847, 0, 0.48555], + "122": [0, 0.43056, 0.12292, 0, 0.40889], + "126": [0.35, 0.31786, 0.11585, 0, 0.51111], + "163": [0, 0.69444, 0, 0, 0.76909], + "168": [0, 0.66786, 0.10474, 0, 0.51111], + "176": [0, 0.69444, 0, 0, 0.83129], + "184": [0.17014, 0, 0, 0, 0.46], + "198": [0, 0.68333, 0.12028, 0, 0.88277], + "216": [0.04861, 0.73194, 0.09403, 0, 0.76666], + "223": [0.19444, 0.69444, 0.10514, 0, 0.53666], + "230": [0, 0.43056, 0.07514, 0, 0.71555], + "248": [0.09722, 0.52778, 0.09194, 0, 0.51111], + "305": [0, 0.43056, 0, 0.02778, 0.32246], + "338": [0, 0.68333, 0.12028, 0, 0.98499], + "339": [0, 0.43056, 0.07514, 0, 0.71555], + "567": [0.19444, 0.43056, 0, 0.08334, 0.38403], + "710": [0, 0.69444, 0.06646, 0, 0.51111], + "711": [0, 0.62847, 0.08295, 0, 0.51111], + "713": [0, 0.56167, 0.10333, 0, 0.51111], + "714": [0, 0.69444, 0.09694, 0, 0.51111], + "715": [0, 0.69444, 0, 0, 0.51111], + "728": [0, 0.69444, 0.10806, 0, 0.51111], + "729": [0, 0.66786, 0.11752, 0, 0.30667], + "730": [0, 0.69444, 0, 0, 0.83129], + "732": [0, 0.66786, 0.11585, 0, 0.51111], + "733": [0, 0.69444, 0.1225, 0, 0.51111], + "915": [0, 0.68333, 0.13305, 0, 0.62722], + "916": [0, 0.68333, 0, 0, 0.81777], + "920": [0, 0.68333, 0.09403, 0, 0.76666], + "923": [0, 0.68333, 0, 0, 0.69222], + "926": [0, 0.68333, 0.15294, 0, 0.66444], + "928": [0, 0.68333, 0.16389, 0, 0.74333], + "931": [0, 0.68333, 0.12028, 0, 0.71555], + "933": [0, 0.68333, 0.11111, 0, 0.76666], + "934": [0, 0.68333, 0.05986, 0, 0.71555], + "936": [0, 0.68333, 0.11111, 0, 0.76666], + "937": [0, 0.68333, 0.10257, 0, 0.71555], + "8211": [0, 0.43056, 0.09208, 0, 0.51111], + "8212": [0, 0.43056, 0.09208, 0, 1.02222], + "8216": [0, 0.69444, 0.12417, 0, 0.30667], + "8217": [0, 0.69444, 0.12417, 0, 0.30667], + "8220": [0, 0.69444, 0.1685, 0, 0.51444], + "8221": [0, 0.69444, 0.06961, 0, 0.51444], + "8463": [0, 0.68889, 0, 0, 0.54028] + }, + "Main-Regular": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0, 0, 0.27778], + "34": [0, 0.69444, 0, 0, 0.5], + "35": [0.19444, 0.69444, 0, 0, 0.83334], + "36": [0.05556, 0.75, 0, 0, 0.5], + "37": [0.05556, 0.75, 0, 0, 0.83334], + "38": [0, 0.69444, 0, 0, 0.77778], + "39": [0, 0.69444, 0, 0, 0.27778], + "40": [0.25, 0.75, 0, 0, 0.38889], + "41": [0.25, 0.75, 0, 0, 0.38889], + "42": [0, 0.75, 0, 0, 0.5], + "43": [0.08333, 0.58333, 0, 0, 0.77778], + "44": [0.19444, 0.10556, 0, 0, 0.27778], + "45": [0, 0.43056, 0, 0, 0.33333], + "46": [0, 0.10556, 0, 0, 0.27778], + "47": [0.25, 0.75, 0, 0, 0.5], + "48": [0, 0.64444, 0, 0, 0.5], + "49": [0, 0.64444, 0, 0, 0.5], + "50": [0, 0.64444, 0, 0, 0.5], + "51": [0, 0.64444, 0, 0, 0.5], + "52": [0, 0.64444, 0, 0, 0.5], + "53": [0, 0.64444, 0, 0, 0.5], + "54": [0, 0.64444, 0, 0, 0.5], + "55": [0, 0.64444, 0, 0, 0.5], + "56": [0, 0.64444, 0, 0, 0.5], + "57": [0, 0.64444, 0, 0, 0.5], + "58": [0, 0.43056, 0, 0, 0.27778], + "59": [0.19444, 0.43056, 0, 0, 0.27778], + "60": [0.0391, 0.5391, 0, 0, 0.77778], + "61": [-0.13313, 0.36687, 0, 0, 0.77778], + "62": [0.0391, 0.5391, 0, 0, 0.77778], + "63": [0, 0.69444, 0, 0, 0.47222], + "64": [0, 0.69444, 0, 0, 0.77778], + "65": [0, 0.68333, 0, 0, 0.75], + "66": [0, 0.68333, 0, 0, 0.70834], + "67": [0, 0.68333, 0, 0, 0.72222], + "68": [0, 0.68333, 0, 0, 0.76389], + "69": [0, 0.68333, 0, 0, 0.68056], + "70": [0, 0.68333, 0, 0, 0.65278], + "71": [0, 0.68333, 0, 0, 0.78472], + "72": [0, 0.68333, 0, 0, 0.75], + "73": [0, 0.68333, 0, 0, 0.36111], + "74": [0, 0.68333, 0, 0, 0.51389], + "75": [0, 0.68333, 0, 0, 0.77778], + "76": [0, 0.68333, 0, 0, 0.625], + "77": [0, 0.68333, 0, 0, 0.91667], + "78": [0, 0.68333, 0, 0, 0.75], + "79": [0, 0.68333, 0, 0, 0.77778], + "80": [0, 0.68333, 0, 0, 0.68056], + "81": [0.19444, 0.68333, 0, 0, 0.77778], + "82": [0, 0.68333, 0, 0, 0.73611], + "83": [0, 0.68333, 0, 0, 0.55556], + "84": [0, 0.68333, 0, 0, 0.72222], + "85": [0, 0.68333, 0, 0, 0.75], + "86": [0, 0.68333, 0.01389, 0, 0.75], + "87": [0, 0.68333, 0.01389, 0, 1.02778], + "88": [0, 0.68333, 0, 0, 0.75], + "89": [0, 0.68333, 0.025, 0, 0.75], + "90": [0, 0.68333, 0, 0, 0.61111], + "91": [0.25, 0.75, 0, 0, 0.27778], + "92": [0.25, 0.75, 0, 0, 0.5], + "93": [0.25, 0.75, 0, 0, 0.27778], + "94": [0, 0.69444, 0, 0, 0.5], + "95": [0.31, 0.12056, 0.02778, 0, 0.5], + "97": [0, 0.43056, 0, 0, 0.5], + "98": [0, 0.69444, 0, 0, 0.55556], + "99": [0, 0.43056, 0, 0, 0.44445], + "100": [0, 0.69444, 0, 0, 0.55556], + "101": [0, 0.43056, 0, 0, 0.44445], + "102": [0, 0.69444, 0.07778, 0, 0.30556], + "103": [0.19444, 0.43056, 0.01389, 0, 0.5], + "104": [0, 0.69444, 0, 0, 0.55556], + "105": [0, 0.66786, 0, 0, 0.27778], + "106": [0.19444, 0.66786, 0, 0, 0.30556], + "107": [0, 0.69444, 0, 0, 0.52778], + "108": [0, 0.69444, 0, 0, 0.27778], + "109": [0, 0.43056, 0, 0, 0.83334], + "110": [0, 0.43056, 0, 0, 0.55556], + "111": [0, 0.43056, 0, 0, 0.5], + "112": [0.19444, 0.43056, 0, 0, 0.55556], + "113": [0.19444, 0.43056, 0, 0, 0.52778], + "114": [0, 0.43056, 0, 0, 0.39167], + "115": [0, 0.43056, 0, 0, 0.39445], + "116": [0, 0.61508, 0, 0, 0.38889], + "117": [0, 0.43056, 0, 0, 0.55556], + "118": [0, 0.43056, 0.01389, 0, 0.52778], + "119": [0, 0.43056, 0.01389, 0, 0.72222], + "120": [0, 0.43056, 0, 0, 0.52778], + "121": [0.19444, 0.43056, 0.01389, 0, 0.52778], + "122": [0, 0.43056, 0, 0, 0.44445], + "123": [0.25, 0.75, 0, 0, 0.5], + "124": [0.25, 0.75, 0, 0, 0.27778], + "125": [0.25, 0.75, 0, 0, 0.5], + "126": [0.35, 0.31786, 0, 0, 0.5], + "160": [0, 0, 0, 0, 0.25], + "167": [0.19444, 0.69444, 0, 0, 0.44445], + "168": [0, 0.66786, 0, 0, 0.5], + "172": [0, 0.43056, 0, 0, 0.66667], + "176": [0, 0.69444, 0, 0, 0.75], + "177": [0.08333, 0.58333, 0, 0, 0.77778], + "182": [0.19444, 0.69444, 0, 0, 0.61111], + "184": [0.17014, 0, 0, 0, 0.44445], + "198": [0, 0.68333, 0, 0, 0.90278], + "215": [0.08333, 0.58333, 0, 0, 0.77778], + "216": [0.04861, 0.73194, 0, 0, 0.77778], + "223": [0, 0.69444, 0, 0, 0.5], + "230": [0, 0.43056, 0, 0, 0.72222], + "247": [0.08333, 0.58333, 0, 0, 0.77778], + "248": [0.09722, 0.52778, 0, 0, 0.5], + "305": [0, 0.43056, 0, 0, 0.27778], + "338": [0, 0.68333, 0, 0, 1.01389], + "339": [0, 0.43056, 0, 0, 0.77778], + "567": [0.19444, 0.43056, 0, 0, 0.30556], + "710": [0, 0.69444, 0, 0, 0.5], + "711": [0, 0.62847, 0, 0, 0.5], + "713": [0, 0.56778, 0, 0, 0.5], + "714": [0, 0.69444, 0, 0, 0.5], + "715": [0, 0.69444, 0, 0, 0.5], + "728": [0, 0.69444, 0, 0, 0.5], + "729": [0, 0.66786, 0, 0, 0.27778], + "730": [0, 0.69444, 0, 0, 0.75], + "732": [0, 0.66786, 0, 0, 0.5], + "733": [0, 0.69444, 0, 0, 0.5], + "915": [0, 0.68333, 0, 0, 0.625], + "916": [0, 0.68333, 0, 0, 0.83334], + "920": [0, 0.68333, 0, 0, 0.77778], + "923": [0, 0.68333, 0, 0, 0.69445], + "926": [0, 0.68333, 0, 0, 0.66667], + "928": [0, 0.68333, 0, 0, 0.75], + "931": [0, 0.68333, 0, 0, 0.72222], + "933": [0, 0.68333, 0, 0, 0.77778], + "934": [0, 0.68333, 0, 0, 0.72222], + "936": [0, 0.68333, 0, 0, 0.77778], + "937": [0, 0.68333, 0, 0, 0.72222], + "8211": [0, 0.43056, 0.02778, 0, 0.5], + "8212": [0, 0.43056, 0.02778, 0, 1.0], + "8216": [0, 0.69444, 0, 0, 0.27778], + "8217": [0, 0.69444, 0, 0, 0.27778], + "8220": [0, 0.69444, 0, 0, 0.5], + "8221": [0, 0.69444, 0, 0, 0.5], + "8224": [0.19444, 0.69444, 0, 0, 0.44445], + "8225": [0.19444, 0.69444, 0, 0, 0.44445], + "8230": [0, 0.12, 0, 0, 1.172], + "8242": [0, 0.55556, 0, 0, 0.275], + "8407": [0, 0.71444, 0.15382, 0, 0.5], + "8463": [0, 0.68889, 0, 0, 0.54028], + "8465": [0, 0.69444, 0, 0, 0.72222], + "8467": [0, 0.69444, 0, 0.11111, 0.41667], + "8472": [0.19444, 0.43056, 0, 0.11111, 0.63646], + "8476": [0, 0.69444, 0, 0, 0.72222], + "8501": [0, 0.69444, 0, 0, 0.61111], + "8592": [-0.13313, 0.36687, 0, 0, 1.0], + "8593": [0.19444, 0.69444, 0, 0, 0.5], + "8594": [-0.13313, 0.36687, 0, 0, 1.0], + "8595": [0.19444, 0.69444, 0, 0, 0.5], + "8596": [-0.13313, 0.36687, 0, 0, 1.0], + "8597": [0.25, 0.75, 0, 0, 0.5], + "8598": [0.19444, 0.69444, 0, 0, 1.0], + "8599": [0.19444, 0.69444, 0, 0, 1.0], + "8600": [0.19444, 0.69444, 0, 0, 1.0], + "8601": [0.19444, 0.69444, 0, 0, 1.0], + "8614": [0.011, 0.511, 0, 0, 1.0], + "8617": [0.011, 0.511, 0, 0, 1.126], + "8618": [0.011, 0.511, 0, 0, 1.126], + "8636": [-0.13313, 0.36687, 0, 0, 1.0], + "8637": [-0.13313, 0.36687, 0, 0, 1.0], + "8640": [-0.13313, 0.36687, 0, 0, 1.0], + "8641": [-0.13313, 0.36687, 0, 0, 1.0], + "8652": [0.011, 0.671, 0, 0, 1.0], + "8656": [-0.13313, 0.36687, 0, 0, 1.0], + "8657": [0.19444, 0.69444, 0, 0, 0.61111], + "8658": [-0.13313, 0.36687, 0, 0, 1.0], + "8659": [0.19444, 0.69444, 0, 0, 0.61111], + "8660": [-0.13313, 0.36687, 0, 0, 1.0], + "8661": [0.25, 0.75, 0, 0, 0.61111], + "8704": [0, 0.69444, 0, 0, 0.55556], + "8706": [0, 0.69444, 0.05556, 0.08334, 0.5309], + "8707": [0, 0.69444, 0, 0, 0.55556], + "8709": [0.05556, 0.75, 0, 0, 0.5], + "8711": [0, 0.68333, 0, 0, 0.83334], + "8712": [0.0391, 0.5391, 0, 0, 0.66667], + "8715": [0.0391, 0.5391, 0, 0, 0.66667], + "8722": [0.08333, 0.58333, 0, 0, 0.77778], + "8723": [0.08333, 0.58333, 0, 0, 0.77778], + "8725": [0.25, 0.75, 0, 0, 0.5], + "8726": [0.25, 0.75, 0, 0, 0.5], + "8727": [-0.03472, 0.46528, 0, 0, 0.5], + "8728": [-0.05555, 0.44445, 0, 0, 0.5], + "8729": [-0.05555, 0.44445, 0, 0, 0.5], + "8730": [0.2, 0.8, 0, 0, 0.83334], + "8733": [0, 0.43056, 0, 0, 0.77778], + "8734": [0, 0.43056, 0, 0, 1.0], + "8736": [0, 0.69224, 0, 0, 0.72222], + "8739": [0.25, 0.75, 0, 0, 0.27778], + "8741": [0.25, 0.75, 0, 0, 0.5], + "8743": [0, 0.55556, 0, 0, 0.66667], + "8744": [0, 0.55556, 0, 0, 0.66667], + "8745": [0, 0.55556, 0, 0, 0.66667], + "8746": [0, 0.55556, 0, 0, 0.66667], + "8747": [0.19444, 0.69444, 0.11111, 0, 0.41667], + "8764": [-0.13313, 0.36687, 0, 0, 0.77778], + "8768": [0.19444, 0.69444, 0, 0, 0.27778], + "8771": [-0.03625, 0.46375, 0, 0, 0.77778], + "8773": [-0.022, 0.589, 0, 0, 1.0], + "8776": [-0.01688, 0.48312, 0, 0, 0.77778], + "8781": [-0.03625, 0.46375, 0, 0, 0.77778], + "8784": [-0.133, 0.67, 0, 0, 0.778], + "8801": [-0.03625, 0.46375, 0, 0, 0.77778], + "8804": [0.13597, 0.63597, 0, 0, 0.77778], + "8805": [0.13597, 0.63597, 0, 0, 0.77778], + "8810": [0.0391, 0.5391, 0, 0, 1.0], + "8811": [0.0391, 0.5391, 0, 0, 1.0], + "8826": [0.0391, 0.5391, 0, 0, 0.77778], + "8827": [0.0391, 0.5391, 0, 0, 0.77778], + "8834": [0.0391, 0.5391, 0, 0, 0.77778], + "8835": [0.0391, 0.5391, 0, 0, 0.77778], + "8838": [0.13597, 0.63597, 0, 0, 0.77778], + "8839": [0.13597, 0.63597, 0, 0, 0.77778], + "8846": [0, 0.55556, 0, 0, 0.66667], + "8849": [0.13597, 0.63597, 0, 0, 0.77778], + "8850": [0.13597, 0.63597, 0, 0, 0.77778], + "8851": [0, 0.55556, 0, 0, 0.66667], + "8852": [0, 0.55556, 0, 0, 0.66667], + "8853": [0.08333, 0.58333, 0, 0, 0.77778], + "8854": [0.08333, 0.58333, 0, 0, 0.77778], + "8855": [0.08333, 0.58333, 0, 0, 0.77778], + "8856": [0.08333, 0.58333, 0, 0, 0.77778], + "8857": [0.08333, 0.58333, 0, 0, 0.77778], + "8866": [0, 0.69444, 0, 0, 0.61111], + "8867": [0, 0.69444, 0, 0, 0.61111], + "8868": [0, 0.69444, 0, 0, 0.77778], + "8869": [0, 0.69444, 0, 0, 0.77778], + "8872": [0.249, 0.75, 0, 0, 0.867], + "8900": [-0.05555, 0.44445, 0, 0, 0.5], + "8901": [-0.05555, 0.44445, 0, 0, 0.27778], + "8902": [-0.03472, 0.46528, 0, 0, 0.5], + "8904": [0.005, 0.505, 0, 0, 0.9], + "8942": [0.03, 0.9, 0, 0, 0.278], + "8943": [-0.19, 0.31, 0, 0, 1.172], + "8945": [-0.1, 0.82, 0, 0, 1.282], + "8968": [0.25, 0.75, 0, 0, 0.44445], + "8969": [0.25, 0.75, 0, 0, 0.44445], + "8970": [0.25, 0.75, 0, 0, 0.44445], + "8971": [0.25, 0.75, 0, 0, 0.44445], + "8994": [-0.14236, 0.35764, 0, 0, 1.0], + "8995": [-0.14236, 0.35764, 0, 0, 1.0], + "9136": [0.244, 0.744, 0, 0, 0.412], + "9137": [0.244, 0.744, 0, 0, 0.412], + "9651": [0.19444, 0.69444, 0, 0, 0.88889], + "9657": [-0.03472, 0.46528, 0, 0, 0.5], + "9661": [0.19444, 0.69444, 0, 0, 0.88889], + "9667": [-0.03472, 0.46528, 0, 0, 0.5], + "9711": [0.19444, 0.69444, 0, 0, 1.0], + "9824": [0.12963, 0.69444, 0, 0, 0.77778], + "9825": [0.12963, 0.69444, 0, 0, 0.77778], + "9826": [0.12963, 0.69444, 0, 0, 0.77778], + "9827": [0.12963, 0.69444, 0, 0, 0.77778], + "9837": [0, 0.75, 0, 0, 0.38889], + "9838": [0.19444, 0.69444, 0, 0, 0.38889], + "9839": [0.19444, 0.69444, 0, 0, 0.38889], + "10216": [0.25, 0.75, 0, 0, 0.38889], + "10217": [0.25, 0.75, 0, 0, 0.38889], + "10222": [0.244, 0.744, 0, 0, 0.412], + "10223": [0.244, 0.744, 0, 0, 0.412], + "10229": [0.011, 0.511, 0, 0, 1.609], + "10230": [0.011, 0.511, 0, 0, 1.638], + "10231": [0.011, 0.511, 0, 0, 1.859], + "10232": [0.024, 0.525, 0, 0, 1.609], + "10233": [0.024, 0.525, 0, 0, 1.638], + "10234": [0.024, 0.525, 0, 0, 1.858], + "10236": [0.011, 0.511, 0, 0, 1.638], + "10815": [0, 0.68333, 0, 0, 0.75], + "10927": [0.13597, 0.63597, 0, 0, 0.77778], + "10928": [0.13597, 0.63597, 0, 0, 0.77778], + "57376": [0.19444, 0.69444, 0, 0, 0] + }, + "Math-BoldItalic": { + "65": [0, 0.68611, 0, 0, 0.86944], + "66": [0, 0.68611, 0.04835, 0, 0.8664], + "67": [0, 0.68611, 0.06979, 0, 0.81694], + "68": [0, 0.68611, 0.03194, 0, 0.93812], + "69": [0, 0.68611, 0.05451, 0, 0.81007], + "70": [0, 0.68611, 0.15972, 0, 0.68889], + "71": [0, 0.68611, 0, 0, 0.88673], + "72": [0, 0.68611, 0.08229, 0, 0.98229], + "73": [0, 0.68611, 0.07778, 0, 0.51111], + "74": [0, 0.68611, 0.10069, 0, 0.63125], + "75": [0, 0.68611, 0.06979, 0, 0.97118], + "76": [0, 0.68611, 0, 0, 0.75555], + "77": [0, 0.68611, 0.11424, 0, 1.14201], + "78": [0, 0.68611, 0.11424, 0, 0.95034], + "79": [0, 0.68611, 0.03194, 0, 0.83666], + "80": [0, 0.68611, 0.15972, 0, 0.72309], + "81": [0.19444, 0.68611, 0, 0, 0.86861], + "82": [0, 0.68611, 0.00421, 0, 0.87235], + "83": [0, 0.68611, 0.05382, 0, 0.69271], + "84": [0, 0.68611, 0.15972, 0, 0.63663], + "85": [0, 0.68611, 0.11424, 0, 0.80027], + "86": [0, 0.68611, 0.25555, 0, 0.67778], + "87": [0, 0.68611, 0.15972, 0, 1.09305], + "88": [0, 0.68611, 0.07778, 0, 0.94722], + "89": [0, 0.68611, 0.25555, 0, 0.67458], + "90": [0, 0.68611, 0.06979, 0, 0.77257], + "97": [0, 0.44444, 0, 0, 0.63287], + "98": [0, 0.69444, 0, 0, 0.52083], + "99": [0, 0.44444, 0, 0, 0.51342], + "100": [0, 0.69444, 0, 0, 0.60972], + "101": [0, 0.44444, 0, 0, 0.55361], + "102": [0.19444, 0.69444, 0.11042, 0, 0.56806], + "103": [0.19444, 0.44444, 0.03704, 0, 0.5449], + "104": [0, 0.69444, 0, 0, 0.66759], + "105": [0, 0.69326, 0, 0, 0.4048], + "106": [0.19444, 0.69326, 0.0622, 0, 0.47083], + "107": [0, 0.69444, 0.01852, 0, 0.6037], + "108": [0, 0.69444, 0.0088, 0, 0.34815], + "109": [0, 0.44444, 0, 0, 1.0324], + "110": [0, 0.44444, 0, 0, 0.71296], + "111": [0, 0.44444, 0, 0, 0.58472], + "112": [0.19444, 0.44444, 0, 0, 0.60092], + "113": [0.19444, 0.44444, 0.03704, 0, 0.54213], + "114": [0, 0.44444, 0.03194, 0, 0.5287], + "115": [0, 0.44444, 0, 0, 0.53125], + "116": [0, 0.63492, 0, 0, 0.41528], + "117": [0, 0.44444, 0, 0, 0.68102], + "118": [0, 0.44444, 0.03704, 0, 0.56666], + "119": [0, 0.44444, 0.02778, 0, 0.83148], + "120": [0, 0.44444, 0, 0, 0.65903], + "121": [0.19444, 0.44444, 0.03704, 0, 0.59028], + "122": [0, 0.44444, 0.04213, 0, 0.55509], + "915": [0, 0.68611, 0.15972, 0, 0.65694], + "916": [0, 0.68611, 0, 0, 0.95833], + "920": [0, 0.68611, 0.03194, 0, 0.86722], + "923": [0, 0.68611, 0, 0, 0.80555], + "926": [0, 0.68611, 0.07458, 0, 0.84125], + "928": [0, 0.68611, 0.08229, 0, 0.98229], + "931": [0, 0.68611, 0.05451, 0, 0.88507], + "933": [0, 0.68611, 0.15972, 0, 0.67083], + "934": [0, 0.68611, 0, 0, 0.76666], + "936": [0, 0.68611, 0.11653, 0, 0.71402], + "937": [0, 0.68611, 0.04835, 0, 0.8789], + "945": [0, 0.44444, 0, 0, 0.76064], + "946": [0.19444, 0.69444, 0.03403, 0, 0.65972], + "947": [0.19444, 0.44444, 0.06389, 0, 0.59003], + "948": [0, 0.69444, 0.03819, 0, 0.52222], + "949": [0, 0.44444, 0, 0, 0.52882], + "950": [0.19444, 0.69444, 0.06215, 0, 0.50833], + "951": [0.19444, 0.44444, 0.03704, 0, 0.6], + "952": [0, 0.69444, 0.03194, 0, 0.5618], + "953": [0, 0.44444, 0, 0, 0.41204], + "954": [0, 0.44444, 0, 0, 0.66759], + "955": [0, 0.69444, 0, 0, 0.67083], + "956": [0.19444, 0.44444, 0, 0, 0.70787], + "957": [0, 0.44444, 0.06898, 0, 0.57685], + "958": [0.19444, 0.69444, 0.03021, 0, 0.50833], + "959": [0, 0.44444, 0, 0, 0.58472], + "960": [0, 0.44444, 0.03704, 0, 0.68241], + "961": [0.19444, 0.44444, 0, 0, 0.6118], + "962": [0.09722, 0.44444, 0.07917, 0, 0.42361], + "963": [0, 0.44444, 0.03704, 0, 0.68588], + "964": [0, 0.44444, 0.13472, 0, 0.52083], + "965": [0, 0.44444, 0.03704, 0, 0.63055], + "966": [0.19444, 0.44444, 0, 0, 0.74722], + "967": [0.19444, 0.44444, 0, 0, 0.71805], + "968": [0.19444, 0.69444, 0.03704, 0, 0.75833], + "969": [0, 0.44444, 0.03704, 0, 0.71782], + "977": [0, 0.69444, 0, 0, 0.69155], + "981": [0.19444, 0.69444, 0, 0, 0.7125], + "982": [0, 0.44444, 0.03194, 0, 0.975], + "1009": [0.19444, 0.44444, 0, 0, 0.6118], + "1013": [0, 0.44444, 0, 0, 0.48333] + }, + "Math-Italic": { + "65": [0, 0.68333, 0, 0.13889, 0.75], + "66": [0, 0.68333, 0.05017, 0.08334, 0.75851], + "67": [0, 0.68333, 0.07153, 0.08334, 0.71472], + "68": [0, 0.68333, 0.02778, 0.05556, 0.82792], + "69": [0, 0.68333, 0.05764, 0.08334, 0.7382], + "70": [0, 0.68333, 0.13889, 0.08334, 0.64306], + "71": [0, 0.68333, 0, 0.08334, 0.78625], + "72": [0, 0.68333, 0.08125, 0.05556, 0.83125], + "73": [0, 0.68333, 0.07847, 0.11111, 0.43958], + "74": [0, 0.68333, 0.09618, 0.16667, 0.55451], + "75": [0, 0.68333, 0.07153, 0.05556, 0.84931], + "76": [0, 0.68333, 0, 0.02778, 0.68056], + "77": [0, 0.68333, 0.10903, 0.08334, 0.97014], + "78": [0, 0.68333, 0.10903, 0.08334, 0.80347], + "79": [0, 0.68333, 0.02778, 0.08334, 0.76278], + "80": [0, 0.68333, 0.13889, 0.08334, 0.64201], + "81": [0.19444, 0.68333, 0, 0.08334, 0.79056], + "82": [0, 0.68333, 0.00773, 0.08334, 0.75929], + "83": [0, 0.68333, 0.05764, 0.08334, 0.6132], + "84": [0, 0.68333, 0.13889, 0.08334, 0.58438], + "85": [0, 0.68333, 0.10903, 0.02778, 0.68278], + "86": [0, 0.68333, 0.22222, 0, 0.58333], + "87": [0, 0.68333, 0.13889, 0, 0.94445], + "88": [0, 0.68333, 0.07847, 0.08334, 0.82847], + "89": [0, 0.68333, 0.22222, 0, 0.58056], + "90": [0, 0.68333, 0.07153, 0.08334, 0.68264], + "97": [0, 0.43056, 0, 0, 0.52859], + "98": [0, 0.69444, 0, 0, 0.42917], + "99": [0, 0.43056, 0, 0.05556, 0.43276], + "100": [0, 0.69444, 0, 0.16667, 0.52049], + "101": [0, 0.43056, 0, 0.05556, 0.46563], + "102": [0.19444, 0.69444, 0.10764, 0.16667, 0.48959], + "103": [0.19444, 0.43056, 0.03588, 0.02778, 0.47697], + "104": [0, 0.69444, 0, 0, 0.57616], + "105": [0, 0.65952, 0, 0, 0.34451], + "106": [0.19444, 0.65952, 0.05724, 0, 0.41181], + "107": [0, 0.69444, 0.03148, 0, 0.5206], + "108": [0, 0.69444, 0.01968, 0.08334, 0.29838], + "109": [0, 0.43056, 0, 0, 0.87801], + "110": [0, 0.43056, 0, 0, 0.60023], + "111": [0, 0.43056, 0, 0.05556, 0.48472], + "112": [0.19444, 0.43056, 0, 0.08334, 0.50313], + "113": [0.19444, 0.43056, 0.03588, 0.08334, 0.44641], + "114": [0, 0.43056, 0.02778, 0.05556, 0.45116], + "115": [0, 0.43056, 0, 0.05556, 0.46875], + "116": [0, 0.61508, 0, 0.08334, 0.36111], + "117": [0, 0.43056, 0, 0.02778, 0.57246], + "118": [0, 0.43056, 0.03588, 0.02778, 0.48472], + "119": [0, 0.43056, 0.02691, 0.08334, 0.71592], + "120": [0, 0.43056, 0, 0.02778, 0.57153], + "121": [0.19444, 0.43056, 0.03588, 0.05556, 0.49028], + "122": [0, 0.43056, 0.04398, 0.05556, 0.46505], + "915": [0, 0.68333, 0.13889, 0.08334, 0.61528], + "916": [0, 0.68333, 0, 0.16667, 0.83334], + "920": [0, 0.68333, 0.02778, 0.08334, 0.76278], + "923": [0, 0.68333, 0, 0.16667, 0.69445], + "926": [0, 0.68333, 0.07569, 0.08334, 0.74236], + "928": [0, 0.68333, 0.08125, 0.05556, 0.83125], + "931": [0, 0.68333, 0.05764, 0.08334, 0.77986], + "933": [0, 0.68333, 0.13889, 0.05556, 0.58333], + "934": [0, 0.68333, 0, 0.08334, 0.66667], + "936": [0, 0.68333, 0.11, 0.05556, 0.61222], + "937": [0, 0.68333, 0.05017, 0.08334, 0.7724], + "945": [0, 0.43056, 0.0037, 0.02778, 0.6397], + "946": [0.19444, 0.69444, 0.05278, 0.08334, 0.56563], + "947": [0.19444, 0.43056, 0.05556, 0, 0.51773], + "948": [0, 0.69444, 0.03785, 0.05556, 0.44444], + "949": [0, 0.43056, 0, 0.08334, 0.46632], + "950": [0.19444, 0.69444, 0.07378, 0.08334, 0.4375], + "951": [0.19444, 0.43056, 0.03588, 0.05556, 0.49653], + "952": [0, 0.69444, 0.02778, 0.08334, 0.46944], + "953": [0, 0.43056, 0, 0.05556, 0.35394], + "954": [0, 0.43056, 0, 0, 0.57616], + "955": [0, 0.69444, 0, 0, 0.58334], + "956": [0.19444, 0.43056, 0, 0.02778, 0.60255], + "957": [0, 0.43056, 0.06366, 0.02778, 0.49398], + "958": [0.19444, 0.69444, 0.04601, 0.11111, 0.4375], + "959": [0, 0.43056, 0, 0.05556, 0.48472], + "960": [0, 0.43056, 0.03588, 0, 0.57003], + "961": [0.19444, 0.43056, 0, 0.08334, 0.51702], + "962": [0.09722, 0.43056, 0.07986, 0.08334, 0.36285], + "963": [0, 0.43056, 0.03588, 0, 0.57141], + "964": [0, 0.43056, 0.1132, 0.02778, 0.43715], + "965": [0, 0.43056, 0.03588, 0.02778, 0.54028], + "966": [0.19444, 0.43056, 0, 0.08334, 0.65417], + "967": [0.19444, 0.43056, 0, 0.05556, 0.62569], + "968": [0.19444, 0.69444, 0.03588, 0.11111, 0.65139], + "969": [0, 0.43056, 0.03588, 0, 0.62245], + "977": [0, 0.69444, 0, 0.08334, 0.59144], + "981": [0.19444, 0.69444, 0, 0.08334, 0.59583], + "982": [0, 0.43056, 0.02778, 0, 0.82813], + "1009": [0.19444, 0.43056, 0, 0.08334, 0.51702], + "1013": [0, 0.43056, 0, 0.05556, 0.4059] + }, + "Math-Regular": { + "65": [0, 0.68333, 0, 0.13889, 0.75], + "66": [0, 0.68333, 0.05017, 0.08334, 0.75851], + "67": [0, 0.68333, 0.07153, 0.08334, 0.71472], + "68": [0, 0.68333, 0.02778, 0.05556, 0.82792], + "69": [0, 0.68333, 0.05764, 0.08334, 0.7382], + "70": [0, 0.68333, 0.13889, 0.08334, 0.64306], + "71": [0, 0.68333, 0, 0.08334, 0.78625], + "72": [0, 0.68333, 0.08125, 0.05556, 0.83125], + "73": [0, 0.68333, 0.07847, 0.11111, 0.43958], + "74": [0, 0.68333, 0.09618, 0.16667, 0.55451], + "75": [0, 0.68333, 0.07153, 0.05556, 0.84931], + "76": [0, 0.68333, 0, 0.02778, 0.68056], + "77": [0, 0.68333, 0.10903, 0.08334, 0.97014], + "78": [0, 0.68333, 0.10903, 0.08334, 0.80347], + "79": [0, 0.68333, 0.02778, 0.08334, 0.76278], + "80": [0, 0.68333, 0.13889, 0.08334, 0.64201], + "81": [0.19444, 0.68333, 0, 0.08334, 0.79056], + "82": [0, 0.68333, 0.00773, 0.08334, 0.75929], + "83": [0, 0.68333, 0.05764, 0.08334, 0.6132], + "84": [0, 0.68333, 0.13889, 0.08334, 0.58438], + "85": [0, 0.68333, 0.10903, 0.02778, 0.68278], + "86": [0, 0.68333, 0.22222, 0, 0.58333], + "87": [0, 0.68333, 0.13889, 0, 0.94445], + "88": [0, 0.68333, 0.07847, 0.08334, 0.82847], + "89": [0, 0.68333, 0.22222, 0, 0.58056], + "90": [0, 0.68333, 0.07153, 0.08334, 0.68264], + "97": [0, 0.43056, 0, 0, 0.52859], + "98": [0, 0.69444, 0, 0, 0.42917], + "99": [0, 0.43056, 0, 0.05556, 0.43276], + "100": [0, 0.69444, 0, 0.16667, 0.52049], + "101": [0, 0.43056, 0, 0.05556, 0.46563], + "102": [0.19444, 0.69444, 0.10764, 0.16667, 0.48959], + "103": [0.19444, 0.43056, 0.03588, 0.02778, 0.47697], + "104": [0, 0.69444, 0, 0, 0.57616], + "105": [0, 0.65952, 0, 0, 0.34451], + "106": [0.19444, 0.65952, 0.05724, 0, 0.41181], + "107": [0, 0.69444, 0.03148, 0, 0.5206], + "108": [0, 0.69444, 0.01968, 0.08334, 0.29838], + "109": [0, 0.43056, 0, 0, 0.87801], + "110": [0, 0.43056, 0, 0, 0.60023], + "111": [0, 0.43056, 0, 0.05556, 0.48472], + "112": [0.19444, 0.43056, 0, 0.08334, 0.50313], + "113": [0.19444, 0.43056, 0.03588, 0.08334, 0.44641], + "114": [0, 0.43056, 0.02778, 0.05556, 0.45116], + "115": [0, 0.43056, 0, 0.05556, 0.46875], + "116": [0, 0.61508, 0, 0.08334, 0.36111], + "117": [0, 0.43056, 0, 0.02778, 0.57246], + "118": [0, 0.43056, 0.03588, 0.02778, 0.48472], + "119": [0, 0.43056, 0.02691, 0.08334, 0.71592], + "120": [0, 0.43056, 0, 0.02778, 0.57153], + "121": [0.19444, 0.43056, 0.03588, 0.05556, 0.49028], + "122": [0, 0.43056, 0.04398, 0.05556, 0.46505], + "915": [0, 0.68333, 0.13889, 0.08334, 0.61528], + "916": [0, 0.68333, 0, 0.16667, 0.83334], + "920": [0, 0.68333, 0.02778, 0.08334, 0.76278], + "923": [0, 0.68333, 0, 0.16667, 0.69445], + "926": [0, 0.68333, 0.07569, 0.08334, 0.74236], + "928": [0, 0.68333, 0.08125, 0.05556, 0.83125], + "931": [0, 0.68333, 0.05764, 0.08334, 0.77986], + "933": [0, 0.68333, 0.13889, 0.05556, 0.58333], + "934": [0, 0.68333, 0, 0.08334, 0.66667], + "936": [0, 0.68333, 0.11, 0.05556, 0.61222], + "937": [0, 0.68333, 0.05017, 0.08334, 0.7724], + "945": [0, 0.43056, 0.0037, 0.02778, 0.6397], + "946": [0.19444, 0.69444, 0.05278, 0.08334, 0.56563], + "947": [0.19444, 0.43056, 0.05556, 0, 0.51773], + "948": [0, 0.69444, 0.03785, 0.05556, 0.44444], + "949": [0, 0.43056, 0, 0.08334, 0.46632], + "950": [0.19444, 0.69444, 0.07378, 0.08334, 0.4375], + "951": [0.19444, 0.43056, 0.03588, 0.05556, 0.49653], + "952": [0, 0.69444, 0.02778, 0.08334, 0.46944], + "953": [0, 0.43056, 0, 0.05556, 0.35394], + "954": [0, 0.43056, 0, 0, 0.57616], + "955": [0, 0.69444, 0, 0, 0.58334], + "956": [0.19444, 0.43056, 0, 0.02778, 0.60255], + "957": [0, 0.43056, 0.06366, 0.02778, 0.49398], + "958": [0.19444, 0.69444, 0.04601, 0.11111, 0.4375], + "959": [0, 0.43056, 0, 0.05556, 0.48472], + "960": [0, 0.43056, 0.03588, 0, 0.57003], + "961": [0.19444, 0.43056, 0, 0.08334, 0.51702], + "962": [0.09722, 0.43056, 0.07986, 0.08334, 0.36285], + "963": [0, 0.43056, 0.03588, 0, 0.57141], + "964": [0, 0.43056, 0.1132, 0.02778, 0.43715], + "965": [0, 0.43056, 0.03588, 0.02778, 0.54028], + "966": [0.19444, 0.43056, 0, 0.08334, 0.65417], + "967": [0.19444, 0.43056, 0, 0.05556, 0.62569], + "968": [0.19444, 0.69444, 0.03588, 0.11111, 0.65139], + "969": [0, 0.43056, 0.03588, 0, 0.62245], + "977": [0, 0.69444, 0, 0.08334, 0.59144], + "981": [0.19444, 0.69444, 0, 0.08334, 0.59583], + "982": [0, 0.43056, 0.02778, 0, 0.82813], + "1009": [0.19444, 0.43056, 0, 0.08334, 0.51702], + "1013": [0, 0.43056, 0, 0.05556, 0.4059] + }, + "SansSerif-Bold": { + "33": [0, 0.69444, 0, 0, 0.36667], + "34": [0, 0.69444, 0, 0, 0.55834], + "35": [0.19444, 0.69444, 0, 0, 0.91667], + "36": [0.05556, 0.75, 0, 0, 0.55], + "37": [0.05556, 0.75, 0, 0, 1.02912], + "38": [0, 0.69444, 0, 0, 0.83056], + "39": [0, 0.69444, 0, 0, 0.30556], + "40": [0.25, 0.75, 0, 0, 0.42778], + "41": [0.25, 0.75, 0, 0, 0.42778], + "42": [0, 0.75, 0, 0, 0.55], + "43": [0.11667, 0.61667, 0, 0, 0.85556], + "44": [0.10556, 0.13056, 0, 0, 0.30556], + "45": [0, 0.45833, 0, 0, 0.36667], + "46": [0, 0.13056, 0, 0, 0.30556], + "47": [0.25, 0.75, 0, 0, 0.55], + "48": [0, 0.69444, 0, 0, 0.55], + "49": [0, 0.69444, 0, 0, 0.55], + "50": [0, 0.69444, 0, 0, 0.55], + "51": [0, 0.69444, 0, 0, 0.55], + "52": [0, 0.69444, 0, 0, 0.55], + "53": [0, 0.69444, 0, 0, 0.55], + "54": [0, 0.69444, 0, 0, 0.55], + "55": [0, 0.69444, 0, 0, 0.55], + "56": [0, 0.69444, 0, 0, 0.55], + "57": [0, 0.69444, 0, 0, 0.55], + "58": [0, 0.45833, 0, 0, 0.30556], + "59": [0.10556, 0.45833, 0, 0, 0.30556], + "61": [-0.09375, 0.40625, 0, 0, 0.85556], + "63": [0, 0.69444, 0, 0, 0.51945], + "64": [0, 0.69444, 0, 0, 0.73334], + "65": [0, 0.69444, 0, 0, 0.73334], + "66": [0, 0.69444, 0, 0, 0.73334], + "67": [0, 0.69444, 0, 0, 0.70278], + "68": [0, 0.69444, 0, 0, 0.79445], + "69": [0, 0.69444, 0, 0, 0.64167], + "70": [0, 0.69444, 0, 0, 0.61111], + "71": [0, 0.69444, 0, 0, 0.73334], + "72": [0, 0.69444, 0, 0, 0.79445], + "73": [0, 0.69444, 0, 0, 0.33056], + "74": [0, 0.69444, 0, 0, 0.51945], + "75": [0, 0.69444, 0, 0, 0.76389], + "76": [0, 0.69444, 0, 0, 0.58056], + "77": [0, 0.69444, 0, 0, 0.97778], + "78": [0, 0.69444, 0, 0, 0.79445], + "79": [0, 0.69444, 0, 0, 0.79445], + "80": [0, 0.69444, 0, 0, 0.70278], + "81": [0.10556, 0.69444, 0, 0, 0.79445], + "82": [0, 0.69444, 0, 0, 0.70278], + "83": [0, 0.69444, 0, 0, 0.61111], + "84": [0, 0.69444, 0, 0, 0.73334], + "85": [0, 0.69444, 0, 0, 0.76389], + "86": [0, 0.69444, 0.01528, 0, 0.73334], + "87": [0, 0.69444, 0.01528, 0, 1.03889], + "88": [0, 0.69444, 0, 0, 0.73334], + "89": [0, 0.69444, 0.0275, 0, 0.73334], + "90": [0, 0.69444, 0, 0, 0.67223], + "91": [0.25, 0.75, 0, 0, 0.34306], + "93": [0.25, 0.75, 0, 0, 0.34306], + "94": [0, 0.69444, 0, 0, 0.55], + "95": [0.35, 0.10833, 0.03056, 0, 0.55], + "97": [0, 0.45833, 0, 0, 0.525], + "98": [0, 0.69444, 0, 0, 0.56111], + "99": [0, 0.45833, 0, 0, 0.48889], + "100": [0, 0.69444, 0, 0, 0.56111], + "101": [0, 0.45833, 0, 0, 0.51111], + "102": [0, 0.69444, 0.07639, 0, 0.33611], + "103": [0.19444, 0.45833, 0.01528, 0, 0.55], + "104": [0, 0.69444, 0, 0, 0.56111], + "105": [0, 0.69444, 0, 0, 0.25556], + "106": [0.19444, 0.69444, 0, 0, 0.28611], + "107": [0, 0.69444, 0, 0, 0.53056], + "108": [0, 0.69444, 0, 0, 0.25556], + "109": [0, 0.45833, 0, 0, 0.86667], + "110": [0, 0.45833, 0, 0, 0.56111], + "111": [0, 0.45833, 0, 0, 0.55], + "112": [0.19444, 0.45833, 0, 0, 0.56111], + "113": [0.19444, 0.45833, 0, 0, 0.56111], + "114": [0, 0.45833, 0.01528, 0, 0.37222], + "115": [0, 0.45833, 0, 0, 0.42167], + "116": [0, 0.58929, 0, 0, 0.40417], + "117": [0, 0.45833, 0, 0, 0.56111], + "118": [0, 0.45833, 0.01528, 0, 0.5], + "119": [0, 0.45833, 0.01528, 0, 0.74445], + "120": [0, 0.45833, 0, 0, 0.5], + "121": [0.19444, 0.45833, 0.01528, 0, 0.5], + "122": [0, 0.45833, 0, 0, 0.47639], + "126": [0.35, 0.34444, 0, 0, 0.55], + "168": [0, 0.69444, 0, 0, 0.55], + "176": [0, 0.69444, 0, 0, 0.73334], + "180": [0, 0.69444, 0, 0, 0.55], + "184": [0.17014, 0, 0, 0, 0.48889], + "305": [0, 0.45833, 0, 0, 0.25556], + "567": [0.19444, 0.45833, 0, 0, 0.28611], + "710": [0, 0.69444, 0, 0, 0.55], + "711": [0, 0.63542, 0, 0, 0.55], + "713": [0, 0.63778, 0, 0, 0.55], + "728": [0, 0.69444, 0, 0, 0.55], + "729": [0, 0.69444, 0, 0, 0.30556], + "730": [0, 0.69444, 0, 0, 0.73334], + "732": [0, 0.69444, 0, 0, 0.55], + "733": [0, 0.69444, 0, 0, 0.55], + "915": [0, 0.69444, 0, 0, 0.58056], + "916": [0, 0.69444, 0, 0, 0.91667], + "920": [0, 0.69444, 0, 0, 0.85556], + "923": [0, 0.69444, 0, 0, 0.67223], + "926": [0, 0.69444, 0, 0, 0.73334], + "928": [0, 0.69444, 0, 0, 0.79445], + "931": [0, 0.69444, 0, 0, 0.79445], + "933": [0, 0.69444, 0, 0, 0.85556], + "934": [0, 0.69444, 0, 0, 0.79445], + "936": [0, 0.69444, 0, 0, 0.85556], + "937": [0, 0.69444, 0, 0, 0.79445], + "8211": [0, 0.45833, 0.03056, 0, 0.55], + "8212": [0, 0.45833, 0.03056, 0, 1.10001], + "8216": [0, 0.69444, 0, 0, 0.30556], + "8217": [0, 0.69444, 0, 0, 0.30556], + "8220": [0, 0.69444, 0, 0, 0.55834], + "8221": [0, 0.69444, 0, 0, 0.55834] + }, + "SansSerif-Italic": { + "33": [0, 0.69444, 0.05733, 0, 0.31945], + "34": [0, 0.69444, 0.00316, 0, 0.5], + "35": [0.19444, 0.69444, 0.05087, 0, 0.83334], + "36": [0.05556, 0.75, 0.11156, 0, 0.5], + "37": [0.05556, 0.75, 0.03126, 0, 0.83334], + "38": [0, 0.69444, 0.03058, 0, 0.75834], + "39": [0, 0.69444, 0.07816, 0, 0.27778], + "40": [0.25, 0.75, 0.13164, 0, 0.38889], + "41": [0.25, 0.75, 0.02536, 0, 0.38889], + "42": [0, 0.75, 0.11775, 0, 0.5], + "43": [0.08333, 0.58333, 0.02536, 0, 0.77778], + "44": [0.125, 0.08333, 0, 0, 0.27778], + "45": [0, 0.44444, 0.01946, 0, 0.33333], + "46": [0, 0.08333, 0, 0, 0.27778], + "47": [0.25, 0.75, 0.13164, 0, 0.5], + "48": [0, 0.65556, 0.11156, 0, 0.5], + "49": [0, 0.65556, 0.11156, 0, 0.5], + "50": [0, 0.65556, 0.11156, 0, 0.5], + "51": [0, 0.65556, 0.11156, 0, 0.5], + "52": [0, 0.65556, 0.11156, 0, 0.5], + "53": [0, 0.65556, 0.11156, 0, 0.5], + "54": [0, 0.65556, 0.11156, 0, 0.5], + "55": [0, 0.65556, 0.11156, 0, 0.5], + "56": [0, 0.65556, 0.11156, 0, 0.5], + "57": [0, 0.65556, 0.11156, 0, 0.5], + "58": [0, 0.44444, 0.02502, 0, 0.27778], + "59": [0.125, 0.44444, 0.02502, 0, 0.27778], + "61": [-0.13, 0.37, 0.05087, 0, 0.77778], + "63": [0, 0.69444, 0.11809, 0, 0.47222], + "64": [0, 0.69444, 0.07555, 0, 0.66667], + "65": [0, 0.69444, 0, 0, 0.66667], + "66": [0, 0.69444, 0.08293, 0, 0.66667], + "67": [0, 0.69444, 0.11983, 0, 0.63889], + "68": [0, 0.69444, 0.07555, 0, 0.72223], + "69": [0, 0.69444, 0.11983, 0, 0.59722], + "70": [0, 0.69444, 0.13372, 0, 0.56945], + "71": [0, 0.69444, 0.11983, 0, 0.66667], + "72": [0, 0.69444, 0.08094, 0, 0.70834], + "73": [0, 0.69444, 0.13372, 0, 0.27778], + "74": [0, 0.69444, 0.08094, 0, 0.47222], + "75": [0, 0.69444, 0.11983, 0, 0.69445], + "76": [0, 0.69444, 0, 0, 0.54167], + "77": [0, 0.69444, 0.08094, 0, 0.875], + "78": [0, 0.69444, 0.08094, 0, 0.70834], + "79": [0, 0.69444, 0.07555, 0, 0.73611], + "80": [0, 0.69444, 0.08293, 0, 0.63889], + "81": [0.125, 0.69444, 0.07555, 0, 0.73611], + "82": [0, 0.69444, 0.08293, 0, 0.64584], + "83": [0, 0.69444, 0.09205, 0, 0.55556], + "84": [0, 0.69444, 0.13372, 0, 0.68056], + "85": [0, 0.69444, 0.08094, 0, 0.6875], + "86": [0, 0.69444, 0.1615, 0, 0.66667], + "87": [0, 0.69444, 0.1615, 0, 0.94445], + "88": [0, 0.69444, 0.13372, 0, 0.66667], + "89": [0, 0.69444, 0.17261, 0, 0.66667], + "90": [0, 0.69444, 0.11983, 0, 0.61111], + "91": [0.25, 0.75, 0.15942, 0, 0.28889], + "93": [0.25, 0.75, 0.08719, 0, 0.28889], + "94": [0, 0.69444, 0.0799, 0, 0.5], + "95": [0.35, 0.09444, 0.08616, 0, 0.5], + "97": [0, 0.44444, 0.00981, 0, 0.48056], + "98": [0, 0.69444, 0.03057, 0, 0.51667], + "99": [0, 0.44444, 0.08336, 0, 0.44445], + "100": [0, 0.69444, 0.09483, 0, 0.51667], + "101": [0, 0.44444, 0.06778, 0, 0.44445], + "102": [0, 0.69444, 0.21705, 0, 0.30556], + "103": [0.19444, 0.44444, 0.10836, 0, 0.5], + "104": [0, 0.69444, 0.01778, 0, 0.51667], + "105": [0, 0.67937, 0.09718, 0, 0.23889], + "106": [0.19444, 0.67937, 0.09162, 0, 0.26667], + "107": [0, 0.69444, 0.08336, 0, 0.48889], + "108": [0, 0.69444, 0.09483, 0, 0.23889], + "109": [0, 0.44444, 0.01778, 0, 0.79445], + "110": [0, 0.44444, 0.01778, 0, 0.51667], + "111": [0, 0.44444, 0.06613, 0, 0.5], + "112": [0.19444, 0.44444, 0.0389, 0, 0.51667], + "113": [0.19444, 0.44444, 0.04169, 0, 0.51667], + "114": [0, 0.44444, 0.10836, 0, 0.34167], + "115": [0, 0.44444, 0.0778, 0, 0.38333], + "116": [0, 0.57143, 0.07225, 0, 0.36111], + "117": [0, 0.44444, 0.04169, 0, 0.51667], + "118": [0, 0.44444, 0.10836, 0, 0.46111], + "119": [0, 0.44444, 0.10836, 0, 0.68334], + "120": [0, 0.44444, 0.09169, 0, 0.46111], + "121": [0.19444, 0.44444, 0.10836, 0, 0.46111], + "122": [0, 0.44444, 0.08752, 0, 0.43472], + "126": [0.35, 0.32659, 0.08826, 0, 0.5], + "168": [0, 0.67937, 0.06385, 0, 0.5], + "176": [0, 0.69444, 0, 0, 0.73752], + "184": [0.17014, 0, 0, 0, 0.44445], + "305": [0, 0.44444, 0.04169, 0, 0.23889], + "567": [0.19444, 0.44444, 0.04169, 0, 0.26667], + "710": [0, 0.69444, 0.0799, 0, 0.5], + "711": [0, 0.63194, 0.08432, 0, 0.5], + "713": [0, 0.60889, 0.08776, 0, 0.5], + "714": [0, 0.69444, 0.09205, 0, 0.5], + "715": [0, 0.69444, 0, 0, 0.5], + "728": [0, 0.69444, 0.09483, 0, 0.5], + "729": [0, 0.67937, 0.07774, 0, 0.27778], + "730": [0, 0.69444, 0, 0, 0.73752], + "732": [0, 0.67659, 0.08826, 0, 0.5], + "733": [0, 0.69444, 0.09205, 0, 0.5], + "915": [0, 0.69444, 0.13372, 0, 0.54167], + "916": [0, 0.69444, 0, 0, 0.83334], + "920": [0, 0.69444, 0.07555, 0, 0.77778], + "923": [0, 0.69444, 0, 0, 0.61111], + "926": [0, 0.69444, 0.12816, 0, 0.66667], + "928": [0, 0.69444, 0.08094, 0, 0.70834], + "931": [0, 0.69444, 0.11983, 0, 0.72222], + "933": [0, 0.69444, 0.09031, 0, 0.77778], + "934": [0, 0.69444, 0.04603, 0, 0.72222], + "936": [0, 0.69444, 0.09031, 0, 0.77778], + "937": [0, 0.69444, 0.08293, 0, 0.72222], + "8211": [0, 0.44444, 0.08616, 0, 0.5], + "8212": [0, 0.44444, 0.08616, 0, 1.0], + "8216": [0, 0.69444, 0.07816, 0, 0.27778], + "8217": [0, 0.69444, 0.07816, 0, 0.27778], + "8220": [0, 0.69444, 0.14205, 0, 0.5], + "8221": [0, 0.69444, 0.00316, 0, 0.5] + }, + "SansSerif-Regular": { + "33": [0, 0.69444, 0, 0, 0.31945], + "34": [0, 0.69444, 0, 0, 0.5], + "35": [0.19444, 0.69444, 0, 0, 0.83334], + "36": [0.05556, 0.75, 0, 0, 0.5], + "37": [0.05556, 0.75, 0, 0, 0.83334], + "38": [0, 0.69444, 0, 0, 0.75834], + "39": [0, 0.69444, 0, 0, 0.27778], + "40": [0.25, 0.75, 0, 0, 0.38889], + "41": [0.25, 0.75, 0, 0, 0.38889], + "42": [0, 0.75, 0, 0, 0.5], + "43": [0.08333, 0.58333, 0, 0, 0.77778], + "44": [0.125, 0.08333, 0, 0, 0.27778], + "45": [0, 0.44444, 0, 0, 0.33333], + "46": [0, 0.08333, 0, 0, 0.27778], + "47": [0.25, 0.75, 0, 0, 0.5], + "48": [0, 0.65556, 0, 0, 0.5], + "49": [0, 0.65556, 0, 0, 0.5], + "50": [0, 0.65556, 0, 0, 0.5], + "51": [0, 0.65556, 0, 0, 0.5], + "52": [0, 0.65556, 0, 0, 0.5], + "53": [0, 0.65556, 0, 0, 0.5], + "54": [0, 0.65556, 0, 0, 0.5], + "55": [0, 0.65556, 0, 0, 0.5], + "56": [0, 0.65556, 0, 0, 0.5], + "57": [0, 0.65556, 0, 0, 0.5], + "58": [0, 0.44444, 0, 0, 0.27778], + "59": [0.125, 0.44444, 0, 0, 0.27778], + "61": [-0.13, 0.37, 0, 0, 0.77778], + "63": [0, 0.69444, 0, 0, 0.47222], + "64": [0, 0.69444, 0, 0, 0.66667], + "65": [0, 0.69444, 0, 0, 0.66667], + "66": [0, 0.69444, 0, 0, 0.66667], + "67": [0, 0.69444, 0, 0, 0.63889], + "68": [0, 0.69444, 0, 0, 0.72223], + "69": [0, 0.69444, 0, 0, 0.59722], + "70": [0, 0.69444, 0, 0, 0.56945], + "71": [0, 0.69444, 0, 0, 0.66667], + "72": [0, 0.69444, 0, 0, 0.70834], + "73": [0, 0.69444, 0, 0, 0.27778], + "74": [0, 0.69444, 0, 0, 0.47222], + "75": [0, 0.69444, 0, 0, 0.69445], + "76": [0, 0.69444, 0, 0, 0.54167], + "77": [0, 0.69444, 0, 0, 0.875], + "78": [0, 0.69444, 0, 0, 0.70834], + "79": [0, 0.69444, 0, 0, 0.73611], + "80": [0, 0.69444, 0, 0, 0.63889], + "81": [0.125, 0.69444, 0, 0, 0.73611], + "82": [0, 0.69444, 0, 0, 0.64584], + "83": [0, 0.69444, 0, 0, 0.55556], + "84": [0, 0.69444, 0, 0, 0.68056], + "85": [0, 0.69444, 0, 0, 0.6875], + "86": [0, 0.69444, 0.01389, 0, 0.66667], + "87": [0, 0.69444, 0.01389, 0, 0.94445], + "88": [0, 0.69444, 0, 0, 0.66667], + "89": [0, 0.69444, 0.025, 0, 0.66667], + "90": [0, 0.69444, 0, 0, 0.61111], + "91": [0.25, 0.75, 0, 0, 0.28889], + "93": [0.25, 0.75, 0, 0, 0.28889], + "94": [0, 0.69444, 0, 0, 0.5], + "95": [0.35, 0.09444, 0.02778, 0, 0.5], + "97": [0, 0.44444, 0, 0, 0.48056], + "98": [0, 0.69444, 0, 0, 0.51667], + "99": [0, 0.44444, 0, 0, 0.44445], + "100": [0, 0.69444, 0, 0, 0.51667], + "101": [0, 0.44444, 0, 0, 0.44445], + "102": [0, 0.69444, 0.06944, 0, 0.30556], + "103": [0.19444, 0.44444, 0.01389, 0, 0.5], + "104": [0, 0.69444, 0, 0, 0.51667], + "105": [0, 0.67937, 0, 0, 0.23889], + "106": [0.19444, 0.67937, 0, 0, 0.26667], + "107": [0, 0.69444, 0, 0, 0.48889], + "108": [0, 0.69444, 0, 0, 0.23889], + "109": [0, 0.44444, 0, 0, 0.79445], + "110": [0, 0.44444, 0, 0, 0.51667], + "111": [0, 0.44444, 0, 0, 0.5], + "112": [0.19444, 0.44444, 0, 0, 0.51667], + "113": [0.19444, 0.44444, 0, 0, 0.51667], + "114": [0, 0.44444, 0.01389, 0, 0.34167], + "115": [0, 0.44444, 0, 0, 0.38333], + "116": [0, 0.57143, 0, 0, 0.36111], + "117": [0, 0.44444, 0, 0, 0.51667], + "118": [0, 0.44444, 0.01389, 0, 0.46111], + "119": [0, 0.44444, 0.01389, 0, 0.68334], + "120": [0, 0.44444, 0, 0, 0.46111], + "121": [0.19444, 0.44444, 0.01389, 0, 0.46111], + "122": [0, 0.44444, 0, 0, 0.43472], + "126": [0.35, 0.32659, 0, 0, 0.5], + "168": [0, 0.67937, 0, 0, 0.5], + "176": [0, 0.69444, 0, 0, 0.66667], + "184": [0.17014, 0, 0, 0, 0.44445], + "305": [0, 0.44444, 0, 0, 0.23889], + "567": [0.19444, 0.44444, 0, 0, 0.26667], + "710": [0, 0.69444, 0, 0, 0.5], + "711": [0, 0.63194, 0, 0, 0.5], + "713": [0, 0.60889, 0, 0, 0.5], + "714": [0, 0.69444, 0, 0, 0.5], + "715": [0, 0.69444, 0, 0, 0.5], + "728": [0, 0.69444, 0, 0, 0.5], + "729": [0, 0.67937, 0, 0, 0.27778], + "730": [0, 0.69444, 0, 0, 0.66667], + "732": [0, 0.67659, 0, 0, 0.5], + "733": [0, 0.69444, 0, 0, 0.5], + "915": [0, 0.69444, 0, 0, 0.54167], + "916": [0, 0.69444, 0, 0, 0.83334], + "920": [0, 0.69444, 0, 0, 0.77778], + "923": [0, 0.69444, 0, 0, 0.61111], + "926": [0, 0.69444, 0, 0, 0.66667], + "928": [0, 0.69444, 0, 0, 0.70834], + "931": [0, 0.69444, 0, 0, 0.72222], + "933": [0, 0.69444, 0, 0, 0.77778], + "934": [0, 0.69444, 0, 0, 0.72222], + "936": [0, 0.69444, 0, 0, 0.77778], + "937": [0, 0.69444, 0, 0, 0.72222], + "8211": [0, 0.44444, 0.02778, 0, 0.5], + "8212": [0, 0.44444, 0.02778, 0, 1.0], + "8216": [0, 0.69444, 0, 0, 0.27778], + "8217": [0, 0.69444, 0, 0, 0.27778], + "8220": [0, 0.69444, 0, 0, 0.5], + "8221": [0, 0.69444, 0, 0, 0.5] + }, + "Script-Regular": { + "65": [0, 0.7, 0.22925, 0, 0.80253], + "66": [0, 0.7, 0.04087, 0, 0.90757], + "67": [0, 0.7, 0.1689, 0, 0.66619], + "68": [0, 0.7, 0.09371, 0, 0.77443], + "69": [0, 0.7, 0.18583, 0, 0.56162], + "70": [0, 0.7, 0.13634, 0, 0.89544], + "71": [0, 0.7, 0.17322, 0, 0.60961], + "72": [0, 0.7, 0.29694, 0, 0.96919], + "73": [0, 0.7, 0.19189, 0, 0.80907], + "74": [0.27778, 0.7, 0.19189, 0, 1.05159], + "75": [0, 0.7, 0.31259, 0, 0.91364], + "76": [0, 0.7, 0.19189, 0, 0.87373], + "77": [0, 0.7, 0.15981, 0, 1.08031], + "78": [0, 0.7, 0.3525, 0, 0.9015], + "79": [0, 0.7, 0.08078, 0, 0.73787], + "80": [0, 0.7, 0.08078, 0, 1.01262], + "81": [0, 0.7, 0.03305, 0, 0.88282], + "82": [0, 0.7, 0.06259, 0, 0.85], + "83": [0, 0.7, 0.19189, 0, 0.86767], + "84": [0, 0.7, 0.29087, 0, 0.74697], + "85": [0, 0.7, 0.25815, 0, 0.79996], + "86": [0, 0.7, 0.27523, 0, 0.62204], + "87": [0, 0.7, 0.27523, 0, 0.80532], + "88": [0, 0.7, 0.26006, 0, 0.94445], + "89": [0, 0.7, 0.2939, 0, 0.70961], + "90": [0, 0.7, 0.24037, 0, 0.8212] + }, + "Size1-Regular": { + "40": [0.35001, 0.85, 0, 0, 0.45834], + "41": [0.35001, 0.85, 0, 0, 0.45834], + "47": [0.35001, 0.85, 0, 0, 0.57778], + "91": [0.35001, 0.85, 0, 0, 0.41667], + "92": [0.35001, 0.85, 0, 0, 0.57778], + "93": [0.35001, 0.85, 0, 0, 0.41667], + "123": [0.35001, 0.85, 0, 0, 0.58334], + "125": [0.35001, 0.85, 0, 0, 0.58334], + "710": [0, 0.72222, 0, 0, 0.55556], + "732": [0, 0.72222, 0, 0, 0.55556], + "770": [0, 0.72222, 0, 0, 0.55556], + "771": [0, 0.72222, 0, 0, 0.55556], + "8214": [-0.00099, 0.601, 0, 0, 0.77778], + "8593": [1e-05, 0.6, 0, 0, 0.66667], + "8595": [1e-05, 0.6, 0, 0, 0.66667], + "8657": [1e-05, 0.6, 0, 0, 0.77778], + "8659": [1e-05, 0.6, 0, 0, 0.77778], + "8719": [0.25001, 0.75, 0, 0, 0.94445], + "8720": [0.25001, 0.75, 0, 0, 0.94445], + "8721": [0.25001, 0.75, 0, 0, 1.05556], + "8730": [0.35001, 0.85, 0, 0, 1.0], + "8739": [-0.00599, 0.606, 0, 0, 0.33333], + "8741": [-0.00599, 0.606, 0, 0, 0.55556], + "8747": [0.30612, 0.805, 0.19445, 0, 0.47222], + "8748": [0.306, 0.805, 0.19445, 0, 0.47222], + "8749": [0.306, 0.805, 0.19445, 0, 0.47222], + "8750": [0.30612, 0.805, 0.19445, 0, 0.47222], + "8896": [0.25001, 0.75, 0, 0, 0.83334], + "8897": [0.25001, 0.75, 0, 0, 0.83334], + "8898": [0.25001, 0.75, 0, 0, 0.83334], + "8899": [0.25001, 0.75, 0, 0, 0.83334], + "8968": [0.35001, 0.85, 0, 0, 0.47222], + "8969": [0.35001, 0.85, 0, 0, 0.47222], + "8970": [0.35001, 0.85, 0, 0, 0.47222], + "8971": [0.35001, 0.85, 0, 0, 0.47222], + "9168": [-0.00099, 0.601, 0, 0, 0.66667], + "10216": [0.35001, 0.85, 0, 0, 0.47222], + "10217": [0.35001, 0.85, 0, 0, 0.47222], + "10752": [0.25001, 0.75, 0, 0, 1.11111], + "10753": [0.25001, 0.75, 0, 0, 1.11111], + "10754": [0.25001, 0.75, 0, 0, 1.11111], + "10756": [0.25001, 0.75, 0, 0, 0.83334], + "10758": [0.25001, 0.75, 0, 0, 0.83334] + }, + "Size2-Regular": { + "40": [0.65002, 1.15, 0, 0, 0.59722], + "41": [0.65002, 1.15, 0, 0, 0.59722], + "47": [0.65002, 1.15, 0, 0, 0.81111], + "91": [0.65002, 1.15, 0, 0, 0.47222], + "92": [0.65002, 1.15, 0, 0, 0.81111], + "93": [0.65002, 1.15, 0, 0, 0.47222], + "123": [0.65002, 1.15, 0, 0, 0.66667], + "125": [0.65002, 1.15, 0, 0, 0.66667], + "710": [0, 0.75, 0, 0, 1.0], + "732": [0, 0.75, 0, 0, 1.0], + "770": [0, 0.75, 0, 0, 1.0], + "771": [0, 0.75, 0, 0, 1.0], + "8719": [0.55001, 1.05, 0, 0, 1.27778], + "8720": [0.55001, 1.05, 0, 0, 1.27778], + "8721": [0.55001, 1.05, 0, 0, 1.44445], + "8730": [0.65002, 1.15, 0, 0, 1.0], + "8747": [0.86225, 1.36, 0.44445, 0, 0.55556], + "8748": [0.862, 1.36, 0.44445, 0, 0.55556], + "8749": [0.862, 1.36, 0.44445, 0, 0.55556], + "8750": [0.86225, 1.36, 0.44445, 0, 0.55556], + "8896": [0.55001, 1.05, 0, 0, 1.11111], + "8897": [0.55001, 1.05, 0, 0, 1.11111], + "8898": [0.55001, 1.05, 0, 0, 1.11111], + "8899": [0.55001, 1.05, 0, 0, 1.11111], + "8968": [0.65002, 1.15, 0, 0, 0.52778], + "8969": [0.65002, 1.15, 0, 0, 0.52778], + "8970": [0.65002, 1.15, 0, 0, 0.52778], + "8971": [0.65002, 1.15, 0, 0, 0.52778], + "10216": [0.65002, 1.15, 0, 0, 0.61111], + "10217": [0.65002, 1.15, 0, 0, 0.61111], + "10752": [0.55001, 1.05, 0, 0, 1.51112], + "10753": [0.55001, 1.05, 0, 0, 1.51112], + "10754": [0.55001, 1.05, 0, 0, 1.51112], + "10756": [0.55001, 1.05, 0, 0, 1.11111], + "10758": [0.55001, 1.05, 0, 0, 1.11111] + }, + "Size3-Regular": { + "40": [0.95003, 1.45, 0, 0, 0.73611], + "41": [0.95003, 1.45, 0, 0, 0.73611], + "47": [0.95003, 1.45, 0, 0, 1.04445], + "91": [0.95003, 1.45, 0, 0, 0.52778], + "92": [0.95003, 1.45, 0, 0, 1.04445], + "93": [0.95003, 1.45, 0, 0, 0.52778], + "123": [0.95003, 1.45, 0, 0, 0.75], + "125": [0.95003, 1.45, 0, 0, 0.75], + "710": [0, 0.75, 0, 0, 1.44445], + "732": [0, 0.75, 0, 0, 1.44445], + "770": [0, 0.75, 0, 0, 1.44445], + "771": [0, 0.75, 0, 0, 1.44445], + "8730": [0.95003, 1.45, 0, 0, 1.0], + "8968": [0.95003, 1.45, 0, 0, 0.58334], + "8969": [0.95003, 1.45, 0, 0, 0.58334], + "8970": [0.95003, 1.45, 0, 0, 0.58334], + "8971": [0.95003, 1.45, 0, 0, 0.58334], + "10216": [0.95003, 1.45, 0, 0, 0.75], + "10217": [0.95003, 1.45, 0, 0, 0.75] + }, + "Size4-Regular": { + "40": [1.25003, 1.75, 0, 0, 0.79167], + "41": [1.25003, 1.75, 0, 0, 0.79167], + "47": [1.25003, 1.75, 0, 0, 1.27778], + "91": [1.25003, 1.75, 0, 0, 0.58334], + "92": [1.25003, 1.75, 0, 0, 1.27778], + "93": [1.25003, 1.75, 0, 0, 0.58334], + "123": [1.25003, 1.75, 0, 0, 0.80556], + "125": [1.25003, 1.75, 0, 0, 0.80556], + "710": [0, 0.825, 0, 0, 1.8889], + "732": [0, 0.825, 0, 0, 1.8889], + "770": [0, 0.825, 0, 0, 1.8889], + "771": [0, 0.825, 0, 0, 1.8889], + "8730": [1.25003, 1.75, 0, 0, 1.0], + "8968": [1.25003, 1.75, 0, 0, 0.63889], + "8969": [1.25003, 1.75, 0, 0, 0.63889], + "8970": [1.25003, 1.75, 0, 0, 0.63889], + "8971": [1.25003, 1.75, 0, 0, 0.63889], + "9115": [0.64502, 1.155, 0, 0, 0.875], + "9116": [1e-05, 0.6, 0, 0, 0.875], + "9117": [0.64502, 1.155, 0, 0, 0.875], + "9118": [0.64502, 1.155, 0, 0, 0.875], + "9119": [1e-05, 0.6, 0, 0, 0.875], + "9120": [0.64502, 1.155, 0, 0, 0.875], + "9121": [0.64502, 1.155, 0, 0, 0.66667], + "9122": [-0.00099, 0.601, 0, 0, 0.66667], + "9123": [0.64502, 1.155, 0, 0, 0.66667], + "9124": [0.64502, 1.155, 0, 0, 0.66667], + "9125": [-0.00099, 0.601, 0, 0, 0.66667], + "9126": [0.64502, 1.155, 0, 0, 0.66667], + "9127": [1e-05, 0.9, 0, 0, 0.88889], + "9128": [0.65002, 1.15, 0, 0, 0.88889], + "9129": [0.90001, 0, 0, 0, 0.88889], + "9130": [0, 0.3, 0, 0, 0.88889], + "9131": [1e-05, 0.9, 0, 0, 0.88889], + "9132": [0.65002, 1.15, 0, 0, 0.88889], + "9133": [0.90001, 0, 0, 0, 0.88889], + "9143": [0.88502, 0.915, 0, 0, 1.05556], + "10216": [1.25003, 1.75, 0, 0, 0.80556], + "10217": [1.25003, 1.75, 0, 0, 0.80556], + "57344": [-0.00499, 0.605, 0, 0, 1.05556], + "57345": [-0.00499, 0.605, 0, 0, 1.05556], + "57680": [0, 0.12, 0, 0, 0.45], + "57681": [0, 0.12, 0, 0, 0.45], + "57682": [0, 0.12, 0, 0, 0.45], + "57683": [0, 0.12, 0, 0, 0.45] + }, + "Typewriter-Regular": { + "32": [0, 0, 0, 0, 0.525], + "33": [0, 0.61111, 0, 0, 0.525], + "34": [0, 0.61111, 0, 0, 0.525], + "35": [0, 0.61111, 0, 0, 0.525], + "36": [0.08333, 0.69444, 0, 0, 0.525], + "37": [0.08333, 0.69444, 0, 0, 0.525], + "38": [0, 0.61111, 0, 0, 0.525], + "39": [0, 0.61111, 0, 0, 0.525], + "40": [0.08333, 0.69444, 0, 0, 0.525], + "41": [0.08333, 0.69444, 0, 0, 0.525], + "42": [0, 0.52083, 0, 0, 0.525], + "43": [-0.08056, 0.53055, 0, 0, 0.525], + "44": [0.13889, 0.125, 0, 0, 0.525], + "45": [-0.08056, 0.53055, 0, 0, 0.525], + "46": [0, 0.125, 0, 0, 0.525], + "47": [0.08333, 0.69444, 0, 0, 0.525], + "48": [0, 0.61111, 0, 0, 0.525], + "49": [0, 0.61111, 0, 0, 0.525], + "50": [0, 0.61111, 0, 0, 0.525], + "51": [0, 0.61111, 0, 0, 0.525], + "52": [0, 0.61111, 0, 0, 0.525], + "53": [0, 0.61111, 0, 0, 0.525], + "54": [0, 0.61111, 0, 0, 0.525], + "55": [0, 0.61111, 0, 0, 0.525], + "56": [0, 0.61111, 0, 0, 0.525], + "57": [0, 0.61111, 0, 0, 0.525], + "58": [0, 0.43056, 0, 0, 0.525], + "59": [0.13889, 0.43056, 0, 0, 0.525], + "60": [-0.05556, 0.55556, 0, 0, 0.525], + "61": [-0.19549, 0.41562, 0, 0, 0.525], + "62": [-0.05556, 0.55556, 0, 0, 0.525], + "63": [0, 0.61111, 0, 0, 0.525], + "64": [0, 0.61111, 0, 0, 0.525], + "65": [0, 0.61111, 0, 0, 0.525], + "66": [0, 0.61111, 0, 0, 0.525], + "67": [0, 0.61111, 0, 0, 0.525], + "68": [0, 0.61111, 0, 0, 0.525], + "69": [0, 0.61111, 0, 0, 0.525], + "70": [0, 0.61111, 0, 0, 0.525], + "71": [0, 0.61111, 0, 0, 0.525], + "72": [0, 0.61111, 0, 0, 0.525], + "73": [0, 0.61111, 0, 0, 0.525], + "74": [0, 0.61111, 0, 0, 0.525], + "75": [0, 0.61111, 0, 0, 0.525], + "76": [0, 0.61111, 0, 0, 0.525], + "77": [0, 0.61111, 0, 0, 0.525], + "78": [0, 0.61111, 0, 0, 0.525], + "79": [0, 0.61111, 0, 0, 0.525], + "80": [0, 0.61111, 0, 0, 0.525], + "81": [0.13889, 0.61111, 0, 0, 0.525], + "82": [0, 0.61111, 0, 0, 0.525], + "83": [0, 0.61111, 0, 0, 0.525], + "84": [0, 0.61111, 0, 0, 0.525], + "85": [0, 0.61111, 0, 0, 0.525], + "86": [0, 0.61111, 0, 0, 0.525], + "87": [0, 0.61111, 0, 0, 0.525], + "88": [0, 0.61111, 0, 0, 0.525], + "89": [0, 0.61111, 0, 0, 0.525], + "90": [0, 0.61111, 0, 0, 0.525], + "91": [0.08333, 0.69444, 0, 0, 0.525], + "92": [0.08333, 0.69444, 0, 0, 0.525], + "93": [0.08333, 0.69444, 0, 0, 0.525], + "94": [0, 0.61111, 0, 0, 0.525], + "95": [0.09514, 0, 0, 0, 0.525], + "96": [0, 0.61111, 0, 0, 0.525], + "97": [0, 0.43056, 0, 0, 0.525], + "98": [0, 0.61111, 0, 0, 0.525], + "99": [0, 0.43056, 0, 0, 0.525], + "100": [0, 0.61111, 0, 0, 0.525], + "101": [0, 0.43056, 0, 0, 0.525], + "102": [0, 0.61111, 0, 0, 0.525], + "103": [0.22222, 0.43056, 0, 0, 0.525], + "104": [0, 0.61111, 0, 0, 0.525], + "105": [0, 0.61111, 0, 0, 0.525], + "106": [0.22222, 0.61111, 0, 0, 0.525], + "107": [0, 0.61111, 0, 0, 0.525], + "108": [0, 0.61111, 0, 0, 0.525], + "109": [0, 0.43056, 0, 0, 0.525], + "110": [0, 0.43056, 0, 0, 0.525], + "111": [0, 0.43056, 0, 0, 0.525], + "112": [0.22222, 0.43056, 0, 0, 0.525], + "113": [0.22222, 0.43056, 0, 0, 0.525], + "114": [0, 0.43056, 0, 0, 0.525], + "115": [0, 0.43056, 0, 0, 0.525], + "116": [0, 0.55358, 0, 0, 0.525], + "117": [0, 0.43056, 0, 0, 0.525], + "118": [0, 0.43056, 0, 0, 0.525], + "119": [0, 0.43056, 0, 0, 0.525], + "120": [0, 0.43056, 0, 0, 0.525], + "121": [0.22222, 0.43056, 0, 0, 0.525], + "122": [0, 0.43056, 0, 0, 0.525], + "123": [0.08333, 0.69444, 0, 0, 0.525], + "124": [0.08333, 0.69444, 0, 0, 0.525], + "125": [0.08333, 0.69444, 0, 0, 0.525], + "126": [0, 0.61111, 0, 0, 0.525], + "127": [0, 0.61111, 0, 0, 0.525], + "160": [0, 0, 0, 0, 0.525], + "176": [0, 0.61111, 0, 0, 0.525], + "184": [0.19445, 0, 0, 0, 0.525], + "305": [0, 0.43056, 0, 0, 0.525], + "567": [0.22222, 0.43056, 0, 0, 0.525], + "711": [0, 0.56597, 0, 0, 0.525], + "713": [0, 0.56555, 0, 0, 0.525], + "714": [0, 0.61111, 0, 0, 0.525], + "715": [0, 0.61111, 0, 0, 0.525], + "728": [0, 0.61111, 0, 0, 0.525], + "730": [0, 0.61111, 0, 0, 0.525], + "770": [0, 0.61111, 0, 0, 0.525], + "771": [0, 0.61111, 0, 0, 0.525], + "776": [0, 0.61111, 0, 0, 0.525], + "915": [0, 0.61111, 0, 0, 0.525], + "916": [0, 0.61111, 0, 0, 0.525], + "920": [0, 0.61111, 0, 0, 0.525], + "923": [0, 0.61111, 0, 0, 0.525], + "926": [0, 0.61111, 0, 0, 0.525], + "928": [0, 0.61111, 0, 0, 0.525], + "931": [0, 0.61111, 0, 0, 0.525], + "933": [0, 0.61111, 0, 0, 0.525], + "934": [0, 0.61111, 0, 0, 0.525], + "936": [0, 0.61111, 0, 0, 0.525], + "937": [0, 0.61111, 0, 0, 0.525], + "8216": [0, 0.61111, 0, 0, 0.525], + "8217": [0, 0.61111, 0, 0, 0.525], + "8242": [0, 0.61111, 0, 0, 0.525], + "9251": [0.11111, 0.21944, 0, 0, 0.525] + } +}); +// CONCATENATED MODULE: ./src/fontMetrics.js + + +/** + * This file contains metrics regarding fonts and individual symbols. The sigma + * and xi variables, as well as the metricMap map contain data extracted from + * TeX, TeX font metrics, and the TTF files. These data are then exposed via the + * `metrics` variable and the getCharacterMetrics function. + */ +// In TeX, there are actually three sets of dimensions, one for each of +// textstyle (size index 5 and higher: >=9pt), scriptstyle (size index 3 and 4: +// 7-8pt), and scriptscriptstyle (size index 1 and 2: 5-6pt). These are +// provided in the the arrays below, in that order. +// +// The font metrics are stored in fonts cmsy10, cmsy7, and cmsy5 respsectively. +// This was determined by running the following script: +// +// latex -interaction=nonstopmode \ +// '\documentclass{article}\usepackage{amsmath}\begin{document}' \ +// '$a$ \expandafter\show\the\textfont2' \ +// '\expandafter\show\the\scriptfont2' \ +// '\expandafter\show\the\scriptscriptfont2' \ +// '\stop' +// +// The metrics themselves were retreived using the following commands: +// +// tftopl cmsy10 +// tftopl cmsy7 +// tftopl cmsy5 +// +// The output of each of these commands is quite lengthy. The only part we +// care about is the FONTDIMEN section. Each value is measured in EMs. +var sigmasAndXis = { + slant: [0.250, 0.250, 0.250], + // sigma1 + space: [0.000, 0.000, 0.000], + // sigma2 + stretch: [0.000, 0.000, 0.000], + // sigma3 + shrink: [0.000, 0.000, 0.000], + // sigma4 + xHeight: [0.431, 0.431, 0.431], + // sigma5 + quad: [1.000, 1.171, 1.472], + // sigma6 + extraSpace: [0.000, 0.000, 0.000], + // sigma7 + num1: [0.677, 0.732, 0.925], + // sigma8 + num2: [0.394, 0.384, 0.387], + // sigma9 + num3: [0.444, 0.471, 0.504], + // sigma10 + denom1: [0.686, 0.752, 1.025], + // sigma11 + denom2: [0.345, 0.344, 0.532], + // sigma12 + sup1: [0.413, 0.503, 0.504], + // sigma13 + sup2: [0.363, 0.431, 0.404], + // sigma14 + sup3: [0.289, 0.286, 0.294], + // sigma15 + sub1: [0.150, 0.143, 0.200], + // sigma16 + sub2: [0.247, 0.286, 0.400], + // sigma17 + supDrop: [0.386, 0.353, 0.494], + // sigma18 + subDrop: [0.050, 0.071, 0.100], + // sigma19 + delim1: [2.390, 1.700, 1.980], + // sigma20 + delim2: [1.010, 1.157, 1.420], + // sigma21 + axisHeight: [0.250, 0.250, 0.250], + // sigma22 + // These font metrics are extracted from TeX by using tftopl on cmex10.tfm; + // they correspond to the font parameters of the extension fonts (family 3). + // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to + // match cmex7, we'd use cmex7.tfm values for script and scriptscript + // values. + defaultRuleThickness: [0.04, 0.049, 0.049], + // xi8; cmex7: 0.049 + bigOpSpacing1: [0.111, 0.111, 0.111], + // xi9 + bigOpSpacing2: [0.166, 0.166, 0.166], + // xi10 + bigOpSpacing3: [0.2, 0.2, 0.2], + // xi11 + bigOpSpacing4: [0.6, 0.611, 0.611], + // xi12; cmex7: 0.611 + bigOpSpacing5: [0.1, 0.143, 0.143], + // xi13; cmex7: 0.143 + // The \sqrt rule width is taken from the height of the surd character. + // Since we use the same font at all sizes, this thickness doesn't scale. + sqrtRuleThickness: [0.04, 0.04, 0.04], + // This value determines how large a pt is, for metrics which are defined + // in terms of pts. + // This value is also used in katex.less; if you change it make sure the + // values match. + ptPerEm: [10.0, 10.0, 10.0], + // The space between adjacent `|` columns in an array definition. From + // `\showthe\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm. + doubleRuleSep: [0.2, 0.2, 0.2], + // The width of separator lines in {array} environments. From + // `\showthe\arrayrulewidth` in LaTeX. Equals 0.4 / ptPerEm. + arrayRuleWidth: [0.04, 0.04, 0.04], + // Two values from LaTeX source2e: + fboxsep: [0.3, 0.3, 0.3], + // 3 pt / ptPerEm + fboxrule: [0.04, 0.04, 0.04] // 0.4 pt / ptPerEm + +}; // This map contains a mapping from font name and character code to character +// metrics, including height, depth, italic correction, and skew (kern from the +// character to the corresponding \skewchar) +// This map is generated via `make metrics`. It should not be changed manually. + + // These are very rough approximations. We default to Times New Roman which +// should have Latin-1 and Cyrillic characters, but may not depending on the +// operating system. The metrics do not account for extra height from the +// accents. In the case of Cyrillic characters which have both ascenders and +// descenders we prefer approximations with ascenders, primarily to prevent +// the fraction bar or root line from intersecting the glyph. +// TODO(kevinb) allow union of multiple glyph metrics for better accuracy. + +var extraCharacterMap = { + // Latin-1 + 'Å': 'A', + 'Ç': 'C', + 'Ð': 'D', + 'Þ': 'o', + 'å': 'a', + 'ç': 'c', + 'ð': 'd', + 'þ': 'o', + // Cyrillic + 'А': 'A', + 'Б': 'B', + 'В': 'B', + 'Г': 'F', + 'Д': 'A', + 'Е': 'E', + 'Ж': 'K', + 'З': '3', + 'И': 'N', + 'Й': 'N', + 'К': 'K', + 'Л': 'N', + 'М': 'M', + 'Н': 'H', + 'О': 'O', + 'П': 'N', + 'Р': 'P', + 'С': 'C', + 'Т': 'T', + 'У': 'y', + 'Ф': 'O', + 'Х': 'X', + 'Ц': 'U', + 'Ч': 'h', + 'Ш': 'W', + 'Щ': 'W', + 'Ъ': 'B', + 'Ы': 'X', + 'Ь': 'B', + 'Э': '3', + 'Ю': 'X', + 'Я': 'R', + 'а': 'a', + 'б': 'b', + 'в': 'a', + 'г': 'r', + 'д': 'y', + 'е': 'e', + 'ж': 'm', + 'з': 'e', + 'и': 'n', + 'й': 'n', + 'к': 'n', + 'л': 'n', + 'м': 'm', + 'н': 'n', + 'о': 'o', + 'п': 'n', + 'р': 'p', + 'с': 'c', + 'т': 'o', + 'у': 'y', + 'ф': 'b', + 'х': 'x', + 'ц': 'n', + 'ч': 'n', + 'ш': 'w', + 'щ': 'w', + 'ъ': 'a', + 'ы': 'm', + 'ь': 'a', + 'э': 'e', + 'ю': 'm', + 'я': 'r' +}; + +/** + * This function adds new font metrics to default metricMap + * It can also override existing metrics + */ +function setFontMetrics(fontName, metrics) { + fontMetricsData[fontName] = metrics; +} +/** + * This function is a convenience function for looking up information in the + * metricMap table. It takes a character as a string, and a font. + * + * Note: the `width` property may be undefined if fontMetricsData.js wasn't + * built using `Make extended_metrics`. + */ + +function getCharacterMetrics(character, font, mode) { + if (!fontMetricsData[font]) { + throw new Error("Font metrics not found for font: " + font + "."); + } + + var ch = character.charCodeAt(0); + var metrics = fontMetricsData[font][ch]; + + if (!metrics && character[0] in extraCharacterMap) { + ch = extraCharacterMap[character[0]].charCodeAt(0); + metrics = fontMetricsData[font][ch]; + } + + if (!metrics && mode === 'text') { + // We don't typically have font metrics for Asian scripts. + // But since we support them in text mode, we need to return + // some sort of metrics. + // So if the character is in a script we support but we + // don't have metrics for it, just use the metrics for + // the Latin capital letter M. This is close enough because + // we (currently) only care about the height of the glpyh + // not its width. + if (supportedCodepoint(ch)) { + metrics = fontMetricsData[font][77]; // 77 is the charcode for 'M' + } + } + + if (metrics) { + return { + depth: metrics[0], + height: metrics[1], + italic: metrics[2], + skew: metrics[3], + width: metrics[4] + }; + } +} +var fontMetricsBySizeIndex = {}; +/** + * Get the font metrics for a given size. + */ + +function getGlobalMetrics(size) { + var sizeIndex; + + if (size >= 5) { + sizeIndex = 0; + } else if (size >= 3) { + sizeIndex = 1; + } else { + sizeIndex = 2; + } + + if (!fontMetricsBySizeIndex[sizeIndex]) { + var metrics = fontMetricsBySizeIndex[sizeIndex] = { + cssEmPerMu: sigmasAndXis.quad[sizeIndex] / 18 + }; + + for (var key in sigmasAndXis) { + if (sigmasAndXis.hasOwnProperty(key)) { + metrics[key] = sigmasAndXis[key][sizeIndex]; + } + } + } + + return fontMetricsBySizeIndex[sizeIndex]; +} +// CONCATENATED MODULE: ./src/symbols.js +/** + * This file holds a list of all no-argument functions and single-character + * symbols (like 'a' or ';'). + * + * For each of the symbols, there are three properties they can have: + * - font (required): the font to be used for this symbol. Either "main" (the + normal font), or "ams" (the ams fonts). + * - group (required): the ParseNode group type the symbol should have (i.e. + "textord", "mathord", etc). + See https://github.com/KaTeX/KaTeX/wiki/Examining-TeX#group-types + * - replace: the character that this symbol or function should be + * replaced with (i.e. "\phi" has a replace value of "\u03d5", the phi + * character in the main font). + * + * The outermost map in the table indicates what mode the symbols should be + * accepted in (e.g. "math" or "text"). + */ +// Some of these have a "-token" suffix since these are also used as `ParseNode` +// types for raw text tokens, and we want to avoid conflicts with higher-level +// `ParseNode` types. These `ParseNode`s are constructed within `Parser` by +// looking up the `symbols` map. +var ATOMS = { + "bin": 1, + "close": 1, + "inner": 1, + "open": 1, + "punct": 1, + "rel": 1 +}; +var NON_ATOMS = { + "accent-token": 1, + "mathord": 1, + "op-token": 1, + "spacing": 1, + "textord": 1 +}; +var symbols = { + "math": {}, + "text": {} +}; +/* harmony default export */ var src_symbols = (symbols); +/** `acceptUnicodeChar = true` is only applicable if `replace` is set. */ + +function defineSymbol(mode, font, group, replace, name, acceptUnicodeChar) { + symbols[mode][name] = { + font: font, + group: group, + replace: replace + }; + + if (acceptUnicodeChar && replace) { + symbols[mode][replace] = symbols[mode][name]; + } +} // Some abbreviations for commonly used strings. +// This helps minify the code, and also spotting typos using jshint. +// modes: + +var symbols_math = "math"; +var symbols_text = "text"; // fonts: + +var main = "main"; +var ams = "ams"; // groups: + +var symbols_accent = "accent-token"; +var bin = "bin"; +var symbols_close = "close"; +var symbols_inner = "inner"; +var mathord = "mathord"; +var op = "op-token"; +var symbols_open = "open"; +var punct = "punct"; +var rel = "rel"; +var symbols_spacing = "spacing"; +var symbols_textord = "textord"; // Now comes the symbol table +// Relation Symbols + +defineSymbol(symbols_math, main, rel, "\u2261", "\\equiv", true); +defineSymbol(symbols_math, main, rel, "\u227A", "\\prec", true); +defineSymbol(symbols_math, main, rel, "\u227B", "\\succ", true); +defineSymbol(symbols_math, main, rel, "\u223C", "\\sim", true); +defineSymbol(symbols_math, main, rel, "\u22A5", "\\perp"); +defineSymbol(symbols_math, main, rel, "\u2AAF", "\\preceq", true); +defineSymbol(symbols_math, main, rel, "\u2AB0", "\\succeq", true); +defineSymbol(symbols_math, main, rel, "\u2243", "\\simeq", true); +defineSymbol(symbols_math, main, rel, "\u2223", "\\mid", true); +defineSymbol(symbols_math, main, rel, "\u226A", "\\ll", true); +defineSymbol(symbols_math, main, rel, "\u226B", "\\gg", true); +defineSymbol(symbols_math, main, rel, "\u224D", "\\asymp", true); +defineSymbol(symbols_math, main, rel, "\u2225", "\\parallel"); +defineSymbol(symbols_math, main, rel, "\u22C8", "\\bowtie", true); +defineSymbol(symbols_math, main, rel, "\u2323", "\\smile", true); +defineSymbol(symbols_math, main, rel, "\u2291", "\\sqsubseteq", true); +defineSymbol(symbols_math, main, rel, "\u2292", "\\sqsupseteq", true); +defineSymbol(symbols_math, main, rel, "\u2250", "\\doteq", true); +defineSymbol(symbols_math, main, rel, "\u2322", "\\frown", true); +defineSymbol(symbols_math, main, rel, "\u220B", "\\ni", true); +defineSymbol(symbols_math, main, rel, "\u221D", "\\propto", true); +defineSymbol(symbols_math, main, rel, "\u22A2", "\\vdash", true); +defineSymbol(symbols_math, main, rel, "\u22A3", "\\dashv", true); +defineSymbol(symbols_math, main, rel, "\u220B", "\\owns"); // Punctuation + +defineSymbol(symbols_math, main, punct, ".", "\\ldotp"); +defineSymbol(symbols_math, main, punct, "\u22C5", "\\cdotp"); // Misc Symbols + +defineSymbol(symbols_math, main, symbols_textord, "#", "\\#"); +defineSymbol(symbols_text, main, symbols_textord, "#", "\\#"); +defineSymbol(symbols_math, main, symbols_textord, "&", "\\&"); +defineSymbol(symbols_text, main, symbols_textord, "&", "\\&"); +defineSymbol(symbols_math, main, symbols_textord, "\u2135", "\\aleph", true); +defineSymbol(symbols_math, main, symbols_textord, "\u2200", "\\forall", true); +defineSymbol(symbols_math, main, symbols_textord, "\u210F", "\\hbar", true); +defineSymbol(symbols_math, main, symbols_textord, "\u2203", "\\exists", true); +defineSymbol(symbols_math, main, symbols_textord, "\u2207", "\\nabla", true); +defineSymbol(symbols_math, main, symbols_textord, "\u266D", "\\flat", true); +defineSymbol(symbols_math, main, symbols_textord, "\u2113", "\\ell", true); +defineSymbol(symbols_math, main, symbols_textord, "\u266E", "\\natural", true); +defineSymbol(symbols_math, main, symbols_textord, "\u2663", "\\clubsuit", true); +defineSymbol(symbols_math, main, symbols_textord, "\u2118", "\\wp", true); +defineSymbol(symbols_math, main, symbols_textord, "\u266F", "\\sharp", true); +defineSymbol(symbols_math, main, symbols_textord, "\u2662", "\\diamondsuit", true); +defineSymbol(symbols_math, main, symbols_textord, "\u211C", "\\Re", true); +defineSymbol(symbols_math, main, symbols_textord, "\u2661", "\\heartsuit", true); +defineSymbol(symbols_math, main, symbols_textord, "\u2111", "\\Im", true); +defineSymbol(symbols_math, main, symbols_textord, "\u2660", "\\spadesuit", true); +defineSymbol(symbols_text, main, symbols_textord, "\xA7", "\\S", true); +defineSymbol(symbols_text, main, symbols_textord, "\xB6", "\\P", true); // Math and Text + +defineSymbol(symbols_math, main, symbols_textord, "\u2020", "\\dag"); +defineSymbol(symbols_text, main, symbols_textord, "\u2020", "\\dag"); +defineSymbol(symbols_text, main, symbols_textord, "\u2020", "\\textdagger"); +defineSymbol(symbols_math, main, symbols_textord, "\u2021", "\\ddag"); +defineSymbol(symbols_text, main, symbols_textord, "\u2021", "\\ddag"); +defineSymbol(symbols_text, main, symbols_textord, "\u2021", "\\textdaggerdbl"); // Large Delimiters + +defineSymbol(symbols_math, main, symbols_close, "\u23B1", "\\rmoustache", true); +defineSymbol(symbols_math, main, symbols_open, "\u23B0", "\\lmoustache", true); +defineSymbol(symbols_math, main, symbols_close, "\u27EF", "\\rgroup", true); +defineSymbol(symbols_math, main, symbols_open, "\u27EE", "\\lgroup", true); // Binary Operators + +defineSymbol(symbols_math, main, bin, "\u2213", "\\mp", true); +defineSymbol(symbols_math, main, bin, "\u2296", "\\ominus", true); +defineSymbol(symbols_math, main, bin, "\u228E", "\\uplus", true); +defineSymbol(symbols_math, main, bin, "\u2293", "\\sqcap", true); +defineSymbol(symbols_math, main, bin, "\u2217", "\\ast"); +defineSymbol(symbols_math, main, bin, "\u2294", "\\sqcup", true); +defineSymbol(symbols_math, main, bin, "\u25EF", "\\bigcirc"); +defineSymbol(symbols_math, main, bin, "\u2219", "\\bullet"); +defineSymbol(symbols_math, main, bin, "\u2021", "\\ddagger"); +defineSymbol(symbols_math, main, bin, "\u2240", "\\wr", true); +defineSymbol(symbols_math, main, bin, "\u2A3F", "\\amalg"); +defineSymbol(symbols_math, main, bin, "&", "\\And"); // from amsmath +// Arrow Symbols + +defineSymbol(symbols_math, main, rel, "\u27F5", "\\longleftarrow", true); +defineSymbol(symbols_math, main, rel, "\u21D0", "\\Leftarrow", true); +defineSymbol(symbols_math, main, rel, "\u27F8", "\\Longleftarrow", true); +defineSymbol(symbols_math, main, rel, "\u27F6", "\\longrightarrow", true); +defineSymbol(symbols_math, main, rel, "\u21D2", "\\Rightarrow", true); +defineSymbol(symbols_math, main, rel, "\u27F9", "\\Longrightarrow", true); +defineSymbol(symbols_math, main, rel, "\u2194", "\\leftrightarrow", true); +defineSymbol(symbols_math, main, rel, "\u27F7", "\\longleftrightarrow", true); +defineSymbol(symbols_math, main, rel, "\u21D4", "\\Leftrightarrow", true); +defineSymbol(symbols_math, main, rel, "\u27FA", "\\Longleftrightarrow", true); +defineSymbol(symbols_math, main, rel, "\u21A6", "\\mapsto", true); +defineSymbol(symbols_math, main, rel, "\u27FC", "\\longmapsto", true); +defineSymbol(symbols_math, main, rel, "\u2197", "\\nearrow", true); +defineSymbol(symbols_math, main, rel, "\u21A9", "\\hookleftarrow", true); +defineSymbol(symbols_math, main, rel, "\u21AA", "\\hookrightarrow", true); +defineSymbol(symbols_math, main, rel, "\u2198", "\\searrow", true); +defineSymbol(symbols_math, main, rel, "\u21BC", "\\leftharpoonup", true); +defineSymbol(symbols_math, main, rel, "\u21C0", "\\rightharpoonup", true); +defineSymbol(symbols_math, main, rel, "\u2199", "\\swarrow", true); +defineSymbol(symbols_math, main, rel, "\u21BD", "\\leftharpoondown", true); +defineSymbol(symbols_math, main, rel, "\u21C1", "\\rightharpoondown", true); +defineSymbol(symbols_math, main, rel, "\u2196", "\\nwarrow", true); +defineSymbol(symbols_math, main, rel, "\u21CC", "\\rightleftharpoons", true); // AMS Negated Binary Relations + +defineSymbol(symbols_math, ams, rel, "\u226E", "\\nless", true); // Symbol names preceeded by "@" each have a corresponding macro. + +defineSymbol(symbols_math, ams, rel, "\uE010", "\\@nleqslant"); +defineSymbol(symbols_math, ams, rel, "\uE011", "\\@nleqq"); +defineSymbol(symbols_math, ams, rel, "\u2A87", "\\lneq", true); +defineSymbol(symbols_math, ams, rel, "\u2268", "\\lneqq", true); +defineSymbol(symbols_math, ams, rel, "\uE00C", "\\@lvertneqq"); +defineSymbol(symbols_math, ams, rel, "\u22E6", "\\lnsim", true); +defineSymbol(symbols_math, ams, rel, "\u2A89", "\\lnapprox", true); +defineSymbol(symbols_math, ams, rel, "\u2280", "\\nprec", true); // unicode-math maps \u22e0 to \npreccurlyeq. We'll use the AMS synonym. + +defineSymbol(symbols_math, ams, rel, "\u22E0", "\\npreceq", true); +defineSymbol(symbols_math, ams, rel, "\u22E8", "\\precnsim", true); +defineSymbol(symbols_math, ams, rel, "\u2AB9", "\\precnapprox", true); +defineSymbol(symbols_math, ams, rel, "\u2241", "\\nsim", true); +defineSymbol(symbols_math, ams, rel, "\uE006", "\\@nshortmid"); +defineSymbol(symbols_math, ams, rel, "\u2224", "\\nmid", true); +defineSymbol(symbols_math, ams, rel, "\u22AC", "\\nvdash", true); +defineSymbol(symbols_math, ams, rel, "\u22AD", "\\nvDash", true); +defineSymbol(symbols_math, ams, rel, "\u22EA", "\\ntriangleleft"); +defineSymbol(symbols_math, ams, rel, "\u22EC", "\\ntrianglelefteq", true); +defineSymbol(symbols_math, ams, rel, "\u228A", "\\subsetneq", true); +defineSymbol(symbols_math, ams, rel, "\uE01A", "\\@varsubsetneq"); +defineSymbol(symbols_math, ams, rel, "\u2ACB", "\\subsetneqq", true); +defineSymbol(symbols_math, ams, rel, "\uE017", "\\@varsubsetneqq"); +defineSymbol(symbols_math, ams, rel, "\u226F", "\\ngtr", true); +defineSymbol(symbols_math, ams, rel, "\uE00F", "\\@ngeqslant"); +defineSymbol(symbols_math, ams, rel, "\uE00E", "\\@ngeqq"); +defineSymbol(symbols_math, ams, rel, "\u2A88", "\\gneq", true); +defineSymbol(symbols_math, ams, rel, "\u2269", "\\gneqq", true); +defineSymbol(symbols_math, ams, rel, "\uE00D", "\\@gvertneqq"); +defineSymbol(symbols_math, ams, rel, "\u22E7", "\\gnsim", true); +defineSymbol(symbols_math, ams, rel, "\u2A8A", "\\gnapprox", true); +defineSymbol(symbols_math, ams, rel, "\u2281", "\\nsucc", true); // unicode-math maps \u22e1 to \nsucccurlyeq. We'll use the AMS synonym. + +defineSymbol(symbols_math, ams, rel, "\u22E1", "\\nsucceq", true); +defineSymbol(symbols_math, ams, rel, "\u22E9", "\\succnsim", true); +defineSymbol(symbols_math, ams, rel, "\u2ABA", "\\succnapprox", true); // unicode-math maps \u2246 to \simneqq. We'll use the AMS synonym. + +defineSymbol(symbols_math, ams, rel, "\u2246", "\\ncong", true); +defineSymbol(symbols_math, ams, rel, "\uE007", "\\@nshortparallel"); +defineSymbol(symbols_math, ams, rel, "\u2226", "\\nparallel", true); +defineSymbol(symbols_math, ams, rel, "\u22AF", "\\nVDash", true); +defineSymbol(symbols_math, ams, rel, "\u22EB", "\\ntriangleright"); +defineSymbol(symbols_math, ams, rel, "\u22ED", "\\ntrianglerighteq", true); +defineSymbol(symbols_math, ams, rel, "\uE018", "\\@nsupseteqq"); +defineSymbol(symbols_math, ams, rel, "\u228B", "\\supsetneq", true); +defineSymbol(symbols_math, ams, rel, "\uE01B", "\\@varsupsetneq"); +defineSymbol(symbols_math, ams, rel, "\u2ACC", "\\supsetneqq", true); +defineSymbol(symbols_math, ams, rel, "\uE019", "\\@varsupsetneqq"); +defineSymbol(symbols_math, ams, rel, "\u22AE", "\\nVdash", true); +defineSymbol(symbols_math, ams, rel, "\u2AB5", "\\precneqq", true); +defineSymbol(symbols_math, ams, rel, "\u2AB6", "\\succneqq", true); +defineSymbol(symbols_math, ams, rel, "\uE016", "\\@nsubseteqq"); +defineSymbol(symbols_math, ams, bin, "\u22B4", "\\unlhd"); +defineSymbol(symbols_math, ams, bin, "\u22B5", "\\unrhd"); // AMS Negated Arrows + +defineSymbol(symbols_math, ams, rel, "\u219A", "\\nleftarrow", true); +defineSymbol(symbols_math, ams, rel, "\u219B", "\\nrightarrow", true); +defineSymbol(symbols_math, ams, rel, "\u21CD", "\\nLeftarrow", true); +defineSymbol(symbols_math, ams, rel, "\u21CF", "\\nRightarrow", true); +defineSymbol(symbols_math, ams, rel, "\u21AE", "\\nleftrightarrow", true); +defineSymbol(symbols_math, ams, rel, "\u21CE", "\\nLeftrightarrow", true); // AMS Misc + +defineSymbol(symbols_math, ams, rel, "\u25B3", "\\vartriangle"); +defineSymbol(symbols_math, ams, symbols_textord, "\u210F", "\\hslash"); +defineSymbol(symbols_math, ams, symbols_textord, "\u25BD", "\\triangledown"); +defineSymbol(symbols_math, ams, symbols_textord, "\u25CA", "\\lozenge"); +defineSymbol(symbols_math, ams, symbols_textord, "\u24C8", "\\circledS"); +defineSymbol(symbols_math, ams, symbols_textord, "\xAE", "\\circledR"); +defineSymbol(symbols_text, ams, symbols_textord, "\xAE", "\\circledR"); +defineSymbol(symbols_math, ams, symbols_textord, "\u2221", "\\measuredangle", true); +defineSymbol(symbols_math, ams, symbols_textord, "\u2204", "\\nexists"); +defineSymbol(symbols_math, ams, symbols_textord, "\u2127", "\\mho"); +defineSymbol(symbols_math, ams, symbols_textord, "\u2132", "\\Finv", true); +defineSymbol(symbols_math, ams, symbols_textord, "\u2141", "\\Game", true); +defineSymbol(symbols_math, ams, symbols_textord, "\u2035", "\\backprime"); +defineSymbol(symbols_math, ams, symbols_textord, "\u25B2", "\\blacktriangle"); +defineSymbol(symbols_math, ams, symbols_textord, "\u25BC", "\\blacktriangledown"); +defineSymbol(symbols_math, ams, symbols_textord, "\u25A0", "\\blacksquare"); +defineSymbol(symbols_math, ams, symbols_textord, "\u29EB", "\\blacklozenge"); +defineSymbol(symbols_math, ams, symbols_textord, "\u2605", "\\bigstar"); +defineSymbol(symbols_math, ams, symbols_textord, "\u2222", "\\sphericalangle", true); +defineSymbol(symbols_math, ams, symbols_textord, "\u2201", "\\complement", true); // unicode-math maps U+F0 (ð) to \matheth. We map to AMS function \eth + +defineSymbol(symbols_math, ams, symbols_textord, "\xF0", "\\eth", true); +defineSymbol(symbols_math, ams, symbols_textord, "\u2571", "\\diagup"); +defineSymbol(symbols_math, ams, symbols_textord, "\u2572", "\\diagdown"); +defineSymbol(symbols_math, ams, symbols_textord, "\u25A1", "\\square"); +defineSymbol(symbols_math, ams, symbols_textord, "\u25A1", "\\Box"); +defineSymbol(symbols_math, ams, symbols_textord, "\u25CA", "\\Diamond"); // unicode-math maps U+A5 to \mathyen. We map to AMS function \yen + +defineSymbol(symbols_math, ams, symbols_textord, "\xA5", "\\yen", true); +defineSymbol(symbols_text, ams, symbols_textord, "\xA5", "\\yen", true); +defineSymbol(symbols_math, ams, symbols_textord, "\u2713", "\\checkmark", true); +defineSymbol(symbols_text, ams, symbols_textord, "\u2713", "\\checkmark"); // AMS Hebrew + +defineSymbol(symbols_math, ams, symbols_textord, "\u2136", "\\beth", true); +defineSymbol(symbols_math, ams, symbols_textord, "\u2138", "\\daleth", true); +defineSymbol(symbols_math, ams, symbols_textord, "\u2137", "\\gimel", true); // AMS Greek + +defineSymbol(symbols_math, ams, symbols_textord, "\u03DD", "\\digamma", true); +defineSymbol(symbols_math, ams, symbols_textord, "\u03F0", "\\varkappa"); // AMS Delimiters + +defineSymbol(symbols_math, ams, symbols_open, "\u250C", "\\ulcorner", true); +defineSymbol(symbols_math, ams, symbols_close, "\u2510", "\\urcorner", true); +defineSymbol(symbols_math, ams, symbols_open, "\u2514", "\\llcorner", true); +defineSymbol(symbols_math, ams, symbols_close, "\u2518", "\\lrcorner", true); // AMS Binary Relations + +defineSymbol(symbols_math, ams, rel, "\u2266", "\\leqq", true); +defineSymbol(symbols_math, ams, rel, "\u2A7D", "\\leqslant", true); +defineSymbol(symbols_math, ams, rel, "\u2A95", "\\eqslantless", true); +defineSymbol(symbols_math, ams, rel, "\u2272", "\\lesssim", true); +defineSymbol(symbols_math, ams, rel, "\u2A85", "\\lessapprox", true); +defineSymbol(symbols_math, ams, rel, "\u224A", "\\approxeq", true); +defineSymbol(symbols_math, ams, bin, "\u22D6", "\\lessdot"); +defineSymbol(symbols_math, ams, rel, "\u22D8", "\\lll", true); +defineSymbol(symbols_math, ams, rel, "\u2276", "\\lessgtr", true); +defineSymbol(symbols_math, ams, rel, "\u22DA", "\\lesseqgtr", true); +defineSymbol(symbols_math, ams, rel, "\u2A8B", "\\lesseqqgtr", true); +defineSymbol(symbols_math, ams, rel, "\u2251", "\\doteqdot"); +defineSymbol(symbols_math, ams, rel, "\u2253", "\\risingdotseq", true); +defineSymbol(symbols_math, ams, rel, "\u2252", "\\fallingdotseq", true); +defineSymbol(symbols_math, ams, rel, "\u223D", "\\backsim", true); +defineSymbol(symbols_math, ams, rel, "\u22CD", "\\backsimeq", true); +defineSymbol(symbols_math, ams, rel, "\u2AC5", "\\subseteqq", true); +defineSymbol(symbols_math, ams, rel, "\u22D0", "\\Subset", true); +defineSymbol(symbols_math, ams, rel, "\u228F", "\\sqsubset", true); +defineSymbol(symbols_math, ams, rel, "\u227C", "\\preccurlyeq", true); +defineSymbol(symbols_math, ams, rel, "\u22DE", "\\curlyeqprec", true); +defineSymbol(symbols_math, ams, rel, "\u227E", "\\precsim", true); +defineSymbol(symbols_math, ams, rel, "\u2AB7", "\\precapprox", true); +defineSymbol(symbols_math, ams, rel, "\u22B2", "\\vartriangleleft"); +defineSymbol(symbols_math, ams, rel, "\u22B4", "\\trianglelefteq"); +defineSymbol(symbols_math, ams, rel, "\u22A8", "\\vDash", true); +defineSymbol(symbols_math, ams, rel, "\u22AA", "\\Vvdash", true); +defineSymbol(symbols_math, ams, rel, "\u2323", "\\smallsmile"); +defineSymbol(symbols_math, ams, rel, "\u2322", "\\smallfrown"); +defineSymbol(symbols_math, ams, rel, "\u224F", "\\bumpeq", true); +defineSymbol(symbols_math, ams, rel, "\u224E", "\\Bumpeq", true); +defineSymbol(symbols_math, ams, rel, "\u2267", "\\geqq", true); +defineSymbol(symbols_math, ams, rel, "\u2A7E", "\\geqslant", true); +defineSymbol(symbols_math, ams, rel, "\u2A96", "\\eqslantgtr", true); +defineSymbol(symbols_math, ams, rel, "\u2273", "\\gtrsim", true); +defineSymbol(symbols_math, ams, rel, "\u2A86", "\\gtrapprox", true); +defineSymbol(symbols_math, ams, bin, "\u22D7", "\\gtrdot"); +defineSymbol(symbols_math, ams, rel, "\u22D9", "\\ggg", true); +defineSymbol(symbols_math, ams, rel, "\u2277", "\\gtrless", true); +defineSymbol(symbols_math, ams, rel, "\u22DB", "\\gtreqless", true); +defineSymbol(symbols_math, ams, rel, "\u2A8C", "\\gtreqqless", true); +defineSymbol(symbols_math, ams, rel, "\u2256", "\\eqcirc", true); +defineSymbol(symbols_math, ams, rel, "\u2257", "\\circeq", true); +defineSymbol(symbols_math, ams, rel, "\u225C", "\\triangleq", true); +defineSymbol(symbols_math, ams, rel, "\u223C", "\\thicksim"); +defineSymbol(symbols_math, ams, rel, "\u2248", "\\thickapprox"); +defineSymbol(symbols_math, ams, rel, "\u2AC6", "\\supseteqq", true); +defineSymbol(symbols_math, ams, rel, "\u22D1", "\\Supset", true); +defineSymbol(symbols_math, ams, rel, "\u2290", "\\sqsupset", true); +defineSymbol(symbols_math, ams, rel, "\u227D", "\\succcurlyeq", true); +defineSymbol(symbols_math, ams, rel, "\u22DF", "\\curlyeqsucc", true); +defineSymbol(symbols_math, ams, rel, "\u227F", "\\succsim", true); +defineSymbol(symbols_math, ams, rel, "\u2AB8", "\\succapprox", true); +defineSymbol(symbols_math, ams, rel, "\u22B3", "\\vartriangleright"); +defineSymbol(symbols_math, ams, rel, "\u22B5", "\\trianglerighteq"); +defineSymbol(symbols_math, ams, rel, "\u22A9", "\\Vdash", true); +defineSymbol(symbols_math, ams, rel, "\u2223", "\\shortmid"); +defineSymbol(symbols_math, ams, rel, "\u2225", "\\shortparallel"); +defineSymbol(symbols_math, ams, rel, "\u226C", "\\between", true); +defineSymbol(symbols_math, ams, rel, "\u22D4", "\\pitchfork", true); +defineSymbol(symbols_math, ams, rel, "\u221D", "\\varpropto"); +defineSymbol(symbols_math, ams, rel, "\u25C0", "\\blacktriangleleft"); // unicode-math says that \therefore is a mathord atom. +// We kept the amssymb atom type, which is rel. + +defineSymbol(symbols_math, ams, rel, "\u2234", "\\therefore", true); +defineSymbol(symbols_math, ams, rel, "\u220D", "\\backepsilon"); +defineSymbol(symbols_math, ams, rel, "\u25B6", "\\blacktriangleright"); // unicode-math says that \because is a mathord atom. +// We kept the amssymb atom type, which is rel. + +defineSymbol(symbols_math, ams, rel, "\u2235", "\\because", true); +defineSymbol(symbols_math, ams, rel, "\u22D8", "\\llless"); +defineSymbol(symbols_math, ams, rel, "\u22D9", "\\gggtr"); +defineSymbol(symbols_math, ams, bin, "\u22B2", "\\lhd"); +defineSymbol(symbols_math, ams, bin, "\u22B3", "\\rhd"); +defineSymbol(symbols_math, ams, rel, "\u2242", "\\eqsim", true); +defineSymbol(symbols_math, main, rel, "\u22C8", "\\Join"); +defineSymbol(symbols_math, ams, rel, "\u2251", "\\Doteq", true); // AMS Binary Operators + +defineSymbol(symbols_math, ams, bin, "\u2214", "\\dotplus", true); +defineSymbol(symbols_math, ams, bin, "\u2216", "\\smallsetminus"); +defineSymbol(symbols_math, ams, bin, "\u22D2", "\\Cap", true); +defineSymbol(symbols_math, ams, bin, "\u22D3", "\\Cup", true); +defineSymbol(symbols_math, ams, bin, "\u2A5E", "\\doublebarwedge", true); +defineSymbol(symbols_math, ams, bin, "\u229F", "\\boxminus", true); +defineSymbol(symbols_math, ams, bin, "\u229E", "\\boxplus", true); +defineSymbol(symbols_math, ams, bin, "\u22C7", "\\divideontimes", true); +defineSymbol(symbols_math, ams, bin, "\u22C9", "\\ltimes", true); +defineSymbol(symbols_math, ams, bin, "\u22CA", "\\rtimes", true); +defineSymbol(symbols_math, ams, bin, "\u22CB", "\\leftthreetimes", true); +defineSymbol(symbols_math, ams, bin, "\u22CC", "\\rightthreetimes", true); +defineSymbol(symbols_math, ams, bin, "\u22CF", "\\curlywedge", true); +defineSymbol(symbols_math, ams, bin, "\u22CE", "\\curlyvee", true); +defineSymbol(symbols_math, ams, bin, "\u229D", "\\circleddash", true); +defineSymbol(symbols_math, ams, bin, "\u229B", "\\circledast", true); +defineSymbol(symbols_math, ams, bin, "\u22C5", "\\centerdot"); +defineSymbol(symbols_math, ams, bin, "\u22BA", "\\intercal", true); +defineSymbol(symbols_math, ams, bin, "\u22D2", "\\doublecap"); +defineSymbol(symbols_math, ams, bin, "\u22D3", "\\doublecup"); +defineSymbol(symbols_math, ams, bin, "\u22A0", "\\boxtimes", true); // AMS Arrows +// Note: unicode-math maps \u21e2 to their own function \rightdasharrow. +// We'll map it to AMS function \dashrightarrow. It produces the same atom. + +defineSymbol(symbols_math, ams, rel, "\u21E2", "\\dashrightarrow", true); // unicode-math maps \u21e0 to \leftdasharrow. We'll use the AMS synonym. + +defineSymbol(symbols_math, ams, rel, "\u21E0", "\\dashleftarrow", true); +defineSymbol(symbols_math, ams, rel, "\u21C7", "\\leftleftarrows", true); +defineSymbol(symbols_math, ams, rel, "\u21C6", "\\leftrightarrows", true); +defineSymbol(symbols_math, ams, rel, "\u21DA", "\\Lleftarrow", true); +defineSymbol(symbols_math, ams, rel, "\u219E", "\\twoheadleftarrow", true); +defineSymbol(symbols_math, ams, rel, "\u21A2", "\\leftarrowtail", true); +defineSymbol(symbols_math, ams, rel, "\u21AB", "\\looparrowleft", true); +defineSymbol(symbols_math, ams, rel, "\u21CB", "\\leftrightharpoons", true); +defineSymbol(symbols_math, ams, rel, "\u21B6", "\\curvearrowleft", true); // unicode-math maps \u21ba to \acwopencirclearrow. We'll use the AMS synonym. + +defineSymbol(symbols_math, ams, rel, "\u21BA", "\\circlearrowleft", true); +defineSymbol(symbols_math, ams, rel, "\u21B0", "\\Lsh", true); +defineSymbol(symbols_math, ams, rel, "\u21C8", "\\upuparrows", true); +defineSymbol(symbols_math, ams, rel, "\u21BF", "\\upharpoonleft", true); +defineSymbol(symbols_math, ams, rel, "\u21C3", "\\downharpoonleft", true); +defineSymbol(symbols_math, ams, rel, "\u22B8", "\\multimap", true); +defineSymbol(symbols_math, ams, rel, "\u21AD", "\\leftrightsquigarrow", true); +defineSymbol(symbols_math, ams, rel, "\u21C9", "\\rightrightarrows", true); +defineSymbol(symbols_math, ams, rel, "\u21C4", "\\rightleftarrows", true); +defineSymbol(symbols_math, ams, rel, "\u21A0", "\\twoheadrightarrow", true); +defineSymbol(symbols_math, ams, rel, "\u21A3", "\\rightarrowtail", true); +defineSymbol(symbols_math, ams, rel, "\u21AC", "\\looparrowright", true); +defineSymbol(symbols_math, ams, rel, "\u21B7", "\\curvearrowright", true); // unicode-math maps \u21bb to \cwopencirclearrow. We'll use the AMS synonym. + +defineSymbol(symbols_math, ams, rel, "\u21BB", "\\circlearrowright", true); +defineSymbol(symbols_math, ams, rel, "\u21B1", "\\Rsh", true); +defineSymbol(symbols_math, ams, rel, "\u21CA", "\\downdownarrows", true); +defineSymbol(symbols_math, ams, rel, "\u21BE", "\\upharpoonright", true); +defineSymbol(symbols_math, ams, rel, "\u21C2", "\\downharpoonright", true); +defineSymbol(symbols_math, ams, rel, "\u21DD", "\\rightsquigarrow", true); +defineSymbol(symbols_math, ams, rel, "\u21DD", "\\leadsto"); +defineSymbol(symbols_math, ams, rel, "\u21DB", "\\Rrightarrow", true); +defineSymbol(symbols_math, ams, rel, "\u21BE", "\\restriction"); +defineSymbol(symbols_math, main, symbols_textord, "\u2018", "`"); +defineSymbol(symbols_math, main, symbols_textord, "$", "\\$"); +defineSymbol(symbols_text, main, symbols_textord, "$", "\\$"); +defineSymbol(symbols_text, main, symbols_textord, "$", "\\textdollar"); +defineSymbol(symbols_math, main, symbols_textord, "%", "\\%"); +defineSymbol(symbols_text, main, symbols_textord, "%", "\\%"); +defineSymbol(symbols_math, main, symbols_textord, "_", "\\_"); +defineSymbol(symbols_text, main, symbols_textord, "_", "\\_"); +defineSymbol(symbols_text, main, symbols_textord, "_", "\\textunderscore"); +defineSymbol(symbols_math, main, symbols_textord, "\u2220", "\\angle", true); +defineSymbol(symbols_math, main, symbols_textord, "\u221E", "\\infty", true); +defineSymbol(symbols_math, main, symbols_textord, "\u2032", "\\prime"); +defineSymbol(symbols_math, main, symbols_textord, "\u25B3", "\\triangle"); +defineSymbol(symbols_math, main, symbols_textord, "\u0393", "\\Gamma", true); +defineSymbol(symbols_math, main, symbols_textord, "\u0394", "\\Delta", true); +defineSymbol(symbols_math, main, symbols_textord, "\u0398", "\\Theta", true); +defineSymbol(symbols_math, main, symbols_textord, "\u039B", "\\Lambda", true); +defineSymbol(symbols_math, main, symbols_textord, "\u039E", "\\Xi", true); +defineSymbol(symbols_math, main, symbols_textord, "\u03A0", "\\Pi", true); +defineSymbol(symbols_math, main, symbols_textord, "\u03A3", "\\Sigma", true); +defineSymbol(symbols_math, main, symbols_textord, "\u03A5", "\\Upsilon", true); +defineSymbol(symbols_math, main, symbols_textord, "\u03A6", "\\Phi", true); +defineSymbol(symbols_math, main, symbols_textord, "\u03A8", "\\Psi", true); +defineSymbol(symbols_math, main, symbols_textord, "\u03A9", "\\Omega", true); +defineSymbol(symbols_math, main, symbols_textord, "A", "\u0391"); +defineSymbol(symbols_math, main, symbols_textord, "B", "\u0392"); +defineSymbol(symbols_math, main, symbols_textord, "E", "\u0395"); +defineSymbol(symbols_math, main, symbols_textord, "Z", "\u0396"); +defineSymbol(symbols_math, main, symbols_textord, "H", "\u0397"); +defineSymbol(symbols_math, main, symbols_textord, "I", "\u0399"); +defineSymbol(symbols_math, main, symbols_textord, "K", "\u039A"); +defineSymbol(symbols_math, main, symbols_textord, "M", "\u039C"); +defineSymbol(symbols_math, main, symbols_textord, "N", "\u039D"); +defineSymbol(symbols_math, main, symbols_textord, "O", "\u039F"); +defineSymbol(symbols_math, main, symbols_textord, "P", "\u03A1"); +defineSymbol(symbols_math, main, symbols_textord, "T", "\u03A4"); +defineSymbol(symbols_math, main, symbols_textord, "X", "\u03A7"); +defineSymbol(symbols_math, main, symbols_textord, "\xAC", "\\neg", true); +defineSymbol(symbols_math, main, symbols_textord, "\xAC", "\\lnot"); +defineSymbol(symbols_math, main, symbols_textord, "\u22A4", "\\top"); +defineSymbol(symbols_math, main, symbols_textord, "\u22A5", "\\bot"); +defineSymbol(symbols_math, main, symbols_textord, "\u2205", "\\emptyset"); +defineSymbol(symbols_math, ams, symbols_textord, "\u2205", "\\varnothing"); +defineSymbol(symbols_math, main, mathord, "\u03B1", "\\alpha", true); +defineSymbol(symbols_math, main, mathord, "\u03B2", "\\beta", true); +defineSymbol(symbols_math, main, mathord, "\u03B3", "\\gamma", true); +defineSymbol(symbols_math, main, mathord, "\u03B4", "\\delta", true); +defineSymbol(symbols_math, main, mathord, "\u03F5", "\\epsilon", true); +defineSymbol(symbols_math, main, mathord, "\u03B6", "\\zeta", true); +defineSymbol(symbols_math, main, mathord, "\u03B7", "\\eta", true); +defineSymbol(symbols_math, main, mathord, "\u03B8", "\\theta", true); +defineSymbol(symbols_math, main, mathord, "\u03B9", "\\iota", true); +defineSymbol(symbols_math, main, mathord, "\u03BA", "\\kappa", true); +defineSymbol(symbols_math, main, mathord, "\u03BB", "\\lambda", true); +defineSymbol(symbols_math, main, mathord, "\u03BC", "\\mu", true); +defineSymbol(symbols_math, main, mathord, "\u03BD", "\\nu", true); +defineSymbol(symbols_math, main, mathord, "\u03BE", "\\xi", true); +defineSymbol(symbols_math, main, mathord, "\u03BF", "\\omicron", true); +defineSymbol(symbols_math, main, mathord, "\u03C0", "\\pi", true); +defineSymbol(symbols_math, main, mathord, "\u03C1", "\\rho", true); +defineSymbol(symbols_math, main, mathord, "\u03C3", "\\sigma", true); +defineSymbol(symbols_math, main, mathord, "\u03C4", "\\tau", true); +defineSymbol(symbols_math, main, mathord, "\u03C5", "\\upsilon", true); +defineSymbol(symbols_math, main, mathord, "\u03D5", "\\phi", true); +defineSymbol(symbols_math, main, mathord, "\u03C7", "\\chi", true); +defineSymbol(symbols_math, main, mathord, "\u03C8", "\\psi", true); +defineSymbol(symbols_math, main, mathord, "\u03C9", "\\omega", true); +defineSymbol(symbols_math, main, mathord, "\u03B5", "\\varepsilon", true); +defineSymbol(symbols_math, main, mathord, "\u03D1", "\\vartheta", true); +defineSymbol(symbols_math, main, mathord, "\u03D6", "\\varpi", true); +defineSymbol(symbols_math, main, mathord, "\u03F1", "\\varrho", true); +defineSymbol(symbols_math, main, mathord, "\u03C2", "\\varsigma", true); +defineSymbol(symbols_math, main, mathord, "\u03C6", "\\varphi", true); +defineSymbol(symbols_math, main, bin, "\u2217", "*"); +defineSymbol(symbols_math, main, bin, "+", "+"); +defineSymbol(symbols_math, main, bin, "\u2212", "-"); +defineSymbol(symbols_math, main, bin, "\u22C5", "\\cdot", true); +defineSymbol(symbols_math, main, bin, "\u2218", "\\circ"); +defineSymbol(symbols_math, main, bin, "\xF7", "\\div", true); +defineSymbol(symbols_math, main, bin, "\xB1", "\\pm", true); +defineSymbol(symbols_math, main, bin, "\xD7", "\\times", true); +defineSymbol(symbols_math, main, bin, "\u2229", "\\cap", true); +defineSymbol(symbols_math, main, bin, "\u222A", "\\cup", true); +defineSymbol(symbols_math, main, bin, "\u2216", "\\setminus"); +defineSymbol(symbols_math, main, bin, "\u2227", "\\land"); +defineSymbol(symbols_math, main, bin, "\u2228", "\\lor"); +defineSymbol(symbols_math, main, bin, "\u2227", "\\wedge", true); +defineSymbol(symbols_math, main, bin, "\u2228", "\\vee", true); +defineSymbol(symbols_math, main, symbols_textord, "\u221A", "\\surd"); +defineSymbol(symbols_math, main, symbols_open, "(", "("); +defineSymbol(symbols_math, main, symbols_open, "[", "["); +defineSymbol(symbols_math, main, symbols_open, "\u27E8", "\\langle", true); +defineSymbol(symbols_math, main, symbols_open, "\u2223", "\\lvert"); +defineSymbol(symbols_math, main, symbols_open, "\u2225", "\\lVert"); +defineSymbol(symbols_math, main, symbols_close, ")", ")"); +defineSymbol(symbols_math, main, symbols_close, "]", "]"); +defineSymbol(symbols_math, main, symbols_close, "?", "?"); +defineSymbol(symbols_math, main, symbols_close, "!", "!"); +defineSymbol(symbols_math, main, symbols_close, "\u27E9", "\\rangle", true); +defineSymbol(symbols_math, main, symbols_close, "\u2223", "\\rvert"); +defineSymbol(symbols_math, main, symbols_close, "\u2225", "\\rVert"); +defineSymbol(symbols_math, main, rel, "=", "="); +defineSymbol(symbols_math, main, rel, "<", "<"); +defineSymbol(symbols_math, main, rel, ">", ">"); +defineSymbol(symbols_math, main, rel, ":", ":"); +defineSymbol(symbols_math, main, rel, "\u2248", "\\approx", true); +defineSymbol(symbols_math, main, rel, "\u2245", "\\cong", true); +defineSymbol(symbols_math, main, rel, "\u2265", "\\ge"); +defineSymbol(symbols_math, main, rel, "\u2265", "\\geq", true); +defineSymbol(symbols_math, main, rel, "\u2190", "\\gets"); +defineSymbol(symbols_math, main, rel, ">", "\\gt"); +defineSymbol(symbols_math, main, rel, "\u2208", "\\in", true); +defineSymbol(symbols_math, main, rel, "\uE020", "\\@not"); +defineSymbol(symbols_math, main, rel, "\u2282", "\\subset", true); +defineSymbol(symbols_math, main, rel, "\u2283", "\\supset", true); +defineSymbol(symbols_math, main, rel, "\u2286", "\\subseteq", true); +defineSymbol(symbols_math, main, rel, "\u2287", "\\supseteq", true); +defineSymbol(symbols_math, ams, rel, "\u2288", "\\nsubseteq", true); +defineSymbol(symbols_math, ams, rel, "\u2289", "\\nsupseteq", true); +defineSymbol(symbols_math, main, rel, "\u22A8", "\\models"); +defineSymbol(symbols_math, main, rel, "\u2190", "\\leftarrow", true); +defineSymbol(symbols_math, main, rel, "\u2264", "\\le"); +defineSymbol(symbols_math, main, rel, "\u2264", "\\leq", true); +defineSymbol(symbols_math, main, rel, "<", "\\lt"); +defineSymbol(symbols_math, main, rel, "\u2192", "\\rightarrow", true); +defineSymbol(symbols_math, main, rel, "\u2192", "\\to"); +defineSymbol(symbols_math, ams, rel, "\u2271", "\\ngeq", true); +defineSymbol(symbols_math, ams, rel, "\u2270", "\\nleq", true); +defineSymbol(symbols_math, main, symbols_spacing, "\xA0", "\\ "); +defineSymbol(symbols_math, main, symbols_spacing, "\xA0", "~"); +defineSymbol(symbols_math, main, symbols_spacing, "\xA0", "\\space"); // Ref: LaTeX Source 2e: \DeclareRobustCommand{\nobreakspace}{% + +defineSymbol(symbols_math, main, symbols_spacing, "\xA0", "\\nobreakspace"); +defineSymbol(symbols_text, main, symbols_spacing, "\xA0", "\\ "); +defineSymbol(symbols_text, main, symbols_spacing, "\xA0", "~"); +defineSymbol(symbols_text, main, symbols_spacing, "\xA0", "\\space"); +defineSymbol(symbols_text, main, symbols_spacing, "\xA0", "\\nobreakspace"); +defineSymbol(symbols_math, main, symbols_spacing, null, "\\nobreak"); +defineSymbol(symbols_math, main, symbols_spacing, null, "\\allowbreak"); +defineSymbol(symbols_math, main, punct, ",", ","); +defineSymbol(symbols_math, main, punct, ";", ";"); +defineSymbol(symbols_math, ams, bin, "\u22BC", "\\barwedge", true); +defineSymbol(symbols_math, ams, bin, "\u22BB", "\\veebar", true); +defineSymbol(symbols_math, main, bin, "\u2299", "\\odot", true); +defineSymbol(symbols_math, main, bin, "\u2295", "\\oplus", true); +defineSymbol(symbols_math, main, bin, "\u2297", "\\otimes", true); +defineSymbol(symbols_math, main, symbols_textord, "\u2202", "\\partial", true); +defineSymbol(symbols_math, main, bin, "\u2298", "\\oslash", true); +defineSymbol(symbols_math, ams, bin, "\u229A", "\\circledcirc", true); +defineSymbol(symbols_math, ams, bin, "\u22A1", "\\boxdot", true); +defineSymbol(symbols_math, main, bin, "\u25B3", "\\bigtriangleup"); +defineSymbol(symbols_math, main, bin, "\u25BD", "\\bigtriangledown"); +defineSymbol(symbols_math, main, bin, "\u2020", "\\dagger"); +defineSymbol(symbols_math, main, bin, "\u22C4", "\\diamond"); +defineSymbol(symbols_math, main, bin, "\u22C6", "\\star"); +defineSymbol(symbols_math, main, bin, "\u25C3", "\\triangleleft"); +defineSymbol(symbols_math, main, bin, "\u25B9", "\\triangleright"); +defineSymbol(symbols_math, main, symbols_open, "{", "\\{"); +defineSymbol(symbols_text, main, symbols_textord, "{", "\\{"); +defineSymbol(symbols_text, main, symbols_textord, "{", "\\textbraceleft"); +defineSymbol(symbols_math, main, symbols_close, "}", "\\}"); +defineSymbol(symbols_text, main, symbols_textord, "}", "\\}"); +defineSymbol(symbols_text, main, symbols_textord, "}", "\\textbraceright"); +defineSymbol(symbols_math, main, symbols_open, "{", "\\lbrace"); +defineSymbol(symbols_math, main, symbols_close, "}", "\\rbrace"); +defineSymbol(symbols_math, main, symbols_open, "[", "\\lbrack"); +defineSymbol(symbols_text, main, symbols_textord, "[", "\\lbrack"); +defineSymbol(symbols_math, main, symbols_close, "]", "\\rbrack"); +defineSymbol(symbols_text, main, symbols_textord, "]", "\\rbrack"); +defineSymbol(symbols_math, main, symbols_open, "(", "\\lparen"); +defineSymbol(symbols_math, main, symbols_close, ")", "\\rparen"); +defineSymbol(symbols_text, main, symbols_textord, "<", "\\textless"); // in T1 fontenc + +defineSymbol(symbols_text, main, symbols_textord, ">", "\\textgreater"); // in T1 fontenc + +defineSymbol(symbols_math, main, symbols_open, "\u230A", "\\lfloor", true); +defineSymbol(symbols_math, main, symbols_close, "\u230B", "\\rfloor", true); +defineSymbol(symbols_math, main, symbols_open, "\u2308", "\\lceil", true); +defineSymbol(symbols_math, main, symbols_close, "\u2309", "\\rceil", true); +defineSymbol(symbols_math, main, symbols_textord, "\\", "\\backslash"); +defineSymbol(symbols_math, main, symbols_textord, "\u2223", "|"); +defineSymbol(symbols_math, main, symbols_textord, "\u2223", "\\vert"); +defineSymbol(symbols_text, main, symbols_textord, "|", "\\textbar"); // in T1 fontenc + +defineSymbol(symbols_math, main, symbols_textord, "\u2225", "\\|"); +defineSymbol(symbols_math, main, symbols_textord, "\u2225", "\\Vert"); +defineSymbol(symbols_text, main, symbols_textord, "\u2225", "\\textbardbl"); +defineSymbol(symbols_text, main, symbols_textord, "~", "\\textasciitilde"); +defineSymbol(symbols_text, main, symbols_textord, "\\", "\\textbackslash"); +defineSymbol(symbols_text, main, symbols_textord, "^", "\\textasciicircum"); +defineSymbol(symbols_math, main, rel, "\u2191", "\\uparrow", true); +defineSymbol(symbols_math, main, rel, "\u21D1", "\\Uparrow", true); +defineSymbol(symbols_math, main, rel, "\u2193", "\\downarrow", true); +defineSymbol(symbols_math, main, rel, "\u21D3", "\\Downarrow", true); +defineSymbol(symbols_math, main, rel, "\u2195", "\\updownarrow", true); +defineSymbol(symbols_math, main, rel, "\u21D5", "\\Updownarrow", true); +defineSymbol(symbols_math, main, op, "\u2210", "\\coprod"); +defineSymbol(symbols_math, main, op, "\u22C1", "\\bigvee"); +defineSymbol(symbols_math, main, op, "\u22C0", "\\bigwedge"); +defineSymbol(symbols_math, main, op, "\u2A04", "\\biguplus"); +defineSymbol(symbols_math, main, op, "\u22C2", "\\bigcap"); +defineSymbol(symbols_math, main, op, "\u22C3", "\\bigcup"); +defineSymbol(symbols_math, main, op, "\u222B", "\\int"); +defineSymbol(symbols_math, main, op, "\u222B", "\\intop"); +defineSymbol(symbols_math, main, op, "\u222C", "\\iint"); +defineSymbol(symbols_math, main, op, "\u222D", "\\iiint"); +defineSymbol(symbols_math, main, op, "\u220F", "\\prod"); +defineSymbol(symbols_math, main, op, "\u2211", "\\sum"); +defineSymbol(symbols_math, main, op, "\u2A02", "\\bigotimes"); +defineSymbol(symbols_math, main, op, "\u2A01", "\\bigoplus"); +defineSymbol(symbols_math, main, op, "\u2A00", "\\bigodot"); +defineSymbol(symbols_math, main, op, "\u222E", "\\oint"); +defineSymbol(symbols_math, main, op, "\u222F", "\\oiint"); +defineSymbol(symbols_math, main, op, "\u2230", "\\oiiint"); +defineSymbol(symbols_math, main, op, "\u2A06", "\\bigsqcup"); +defineSymbol(symbols_math, main, op, "\u222B", "\\smallint"); +defineSymbol(symbols_text, main, symbols_inner, "\u2026", "\\textellipsis"); +defineSymbol(symbols_math, main, symbols_inner, "\u2026", "\\mathellipsis"); +defineSymbol(symbols_text, main, symbols_inner, "\u2026", "\\ldots", true); +defineSymbol(symbols_math, main, symbols_inner, "\u2026", "\\ldots", true); +defineSymbol(symbols_math, main, symbols_inner, "\u22EF", "\\@cdots", true); +defineSymbol(symbols_math, main, symbols_inner, "\u22F1", "\\ddots", true); +defineSymbol(symbols_math, main, symbols_textord, "\u22EE", "\\varvdots"); // \vdots is a macro + +defineSymbol(symbols_math, main, symbols_accent, "\u02CA", "\\acute"); +defineSymbol(symbols_math, main, symbols_accent, "\u02CB", "\\grave"); +defineSymbol(symbols_math, main, symbols_accent, "\xA8", "\\ddot"); +defineSymbol(symbols_math, main, symbols_accent, "~", "\\tilde"); +defineSymbol(symbols_math, main, symbols_accent, "\u02C9", "\\bar"); +defineSymbol(symbols_math, main, symbols_accent, "\u02D8", "\\breve"); +defineSymbol(symbols_math, main, symbols_accent, "\u02C7", "\\check"); +defineSymbol(symbols_math, main, symbols_accent, "^", "\\hat"); +defineSymbol(symbols_math, main, symbols_accent, "\u20D7", "\\vec"); +defineSymbol(symbols_math, main, symbols_accent, "\u02D9", "\\dot"); +defineSymbol(symbols_math, main, symbols_accent, "\u02DA", "\\mathring"); +defineSymbol(symbols_math, main, mathord, "\u0131", "\\imath", true); +defineSymbol(symbols_math, main, mathord, "\u0237", "\\jmath", true); +defineSymbol(symbols_text, main, symbols_textord, "\u0131", "\\i", true); +defineSymbol(symbols_text, main, symbols_textord, "\u0237", "\\j", true); +defineSymbol(symbols_text, main, symbols_textord, "\xDF", "\\ss", true); +defineSymbol(symbols_text, main, symbols_textord, "\xE6", "\\ae", true); +defineSymbol(symbols_text, main, symbols_textord, "\xE6", "\\ae", true); +defineSymbol(symbols_text, main, symbols_textord, "\u0153", "\\oe", true); +defineSymbol(symbols_text, main, symbols_textord, "\xF8", "\\o", true); +defineSymbol(symbols_text, main, symbols_textord, "\xC6", "\\AE", true); +defineSymbol(symbols_text, main, symbols_textord, "\u0152", "\\OE", true); +defineSymbol(symbols_text, main, symbols_textord, "\xD8", "\\O", true); +defineSymbol(symbols_text, main, symbols_accent, "\u02CA", "\\'"); // acute + +defineSymbol(symbols_text, main, symbols_accent, "\u02CB", "\\`"); // grave + +defineSymbol(symbols_text, main, symbols_accent, "\u02C6", "\\^"); // circumflex + +defineSymbol(symbols_text, main, symbols_accent, "\u02DC", "\\~"); // tilde + +defineSymbol(symbols_text, main, symbols_accent, "\u02C9", "\\="); // macron + +defineSymbol(symbols_text, main, symbols_accent, "\u02D8", "\\u"); // breve + +defineSymbol(symbols_text, main, symbols_accent, "\u02D9", "\\."); // dot above + +defineSymbol(symbols_text, main, symbols_accent, "\u02DA", "\\r"); // ring above + +defineSymbol(symbols_text, main, symbols_accent, "\u02C7", "\\v"); // caron + +defineSymbol(symbols_text, main, symbols_accent, "\xA8", '\\"'); // diaresis + +defineSymbol(symbols_text, main, symbols_accent, "\u02DD", "\\H"); // double acute + +defineSymbol(symbols_text, main, symbols_accent, "\u25EF", "\\textcircled"); // \bigcirc glyph +// These ligatures are detected and created in Parser.js's `formLigatures`. + +var ligatures = { + "--": true, + "---": true, + "``": true, + "''": true +}; +defineSymbol(symbols_text, main, symbols_textord, "\u2013", "--"); +defineSymbol(symbols_text, main, symbols_textord, "\u2013", "\\textendash"); +defineSymbol(symbols_text, main, symbols_textord, "\u2014", "---"); +defineSymbol(symbols_text, main, symbols_textord, "\u2014", "\\textemdash"); +defineSymbol(symbols_text, main, symbols_textord, "\u2018", "`"); +defineSymbol(symbols_text, main, symbols_textord, "\u2018", "\\textquoteleft"); +defineSymbol(symbols_text, main, symbols_textord, "\u2019", "'"); +defineSymbol(symbols_text, main, symbols_textord, "\u2019", "\\textquoteright"); +defineSymbol(symbols_text, main, symbols_textord, "\u201C", "``"); +defineSymbol(symbols_text, main, symbols_textord, "\u201C", "\\textquotedblleft"); +defineSymbol(symbols_text, main, symbols_textord, "\u201D", "''"); +defineSymbol(symbols_text, main, symbols_textord, "\u201D", "\\textquotedblright"); // \degree from gensymb package + +defineSymbol(symbols_math, main, symbols_textord, "\xB0", "\\degree", true); +defineSymbol(symbols_text, main, symbols_textord, "\xB0", "\\degree"); // \textdegree from inputenc package + +defineSymbol(symbols_text, main, symbols_textord, "\xB0", "\\textdegree", true); // TODO: In LaTeX, \pounds can generate a different character in text and math +// mode, but among our fonts, only Main-Italic defines this character "163". + +defineSymbol(symbols_math, main, mathord, "\xA3", "\\pounds"); +defineSymbol(symbols_math, main, mathord, "\xA3", "\\mathsterling", true); +defineSymbol(symbols_text, main, mathord, "\xA3", "\\pounds"); +defineSymbol(symbols_text, main, mathord, "\xA3", "\\textsterling", true); +defineSymbol(symbols_math, ams, symbols_textord, "\u2720", "\\maltese"); +defineSymbol(symbols_text, ams, symbols_textord, "\u2720", "\\maltese"); +defineSymbol(symbols_text, main, symbols_spacing, "\xA0", "\\ "); +defineSymbol(symbols_text, main, symbols_spacing, "\xA0", " "); +defineSymbol(symbols_text, main, symbols_spacing, "\xA0", "~"); // There are lots of symbols which are the same, so we add them in afterwards. +// All of these are textords in math mode + +var mathTextSymbols = "0123456789/@.\""; + +for (var symbols_i = 0; symbols_i < mathTextSymbols.length; symbols_i++) { + var symbols_ch = mathTextSymbols.charAt(symbols_i); + defineSymbol(symbols_math, main, symbols_textord, symbols_ch, symbols_ch); +} // All of these are textords in text mode + + +var textSymbols = "0123456789!@*()-=+[]<>|\";:?/.,"; + +for (var src_symbols_i = 0; src_symbols_i < textSymbols.length; src_symbols_i++) { + var _ch = textSymbols.charAt(src_symbols_i); + + defineSymbol(symbols_text, main, symbols_textord, _ch, _ch); +} // All of these are textords in text mode, and mathords in math mode + + +var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + +for (var symbols_i2 = 0; symbols_i2 < letters.length; symbols_i2++) { + var _ch2 = letters.charAt(symbols_i2); + + defineSymbol(symbols_math, main, mathord, _ch2, _ch2); + defineSymbol(symbols_text, main, symbols_textord, _ch2, _ch2); +} // Blackboard bold and script letters in Unicode range + + +defineSymbol(symbols_math, ams, symbols_textord, "C", "\u2102"); // blackboard bold + +defineSymbol(symbols_text, ams, symbols_textord, "C", "\u2102"); +defineSymbol(symbols_math, ams, symbols_textord, "H", "\u210D"); +defineSymbol(symbols_text, ams, symbols_textord, "H", "\u210D"); +defineSymbol(symbols_math, ams, symbols_textord, "N", "\u2115"); +defineSymbol(symbols_text, ams, symbols_textord, "N", "\u2115"); +defineSymbol(symbols_math, ams, symbols_textord, "P", "\u2119"); +defineSymbol(symbols_text, ams, symbols_textord, "P", "\u2119"); +defineSymbol(symbols_math, ams, symbols_textord, "Q", "\u211A"); +defineSymbol(symbols_text, ams, symbols_textord, "Q", "\u211A"); +defineSymbol(symbols_math, ams, symbols_textord, "R", "\u211D"); +defineSymbol(symbols_text, ams, symbols_textord, "R", "\u211D"); +defineSymbol(symbols_math, ams, symbols_textord, "Z", "\u2124"); +defineSymbol(symbols_text, ams, symbols_textord, "Z", "\u2124"); +defineSymbol(symbols_math, main, mathord, "h", "\u210E"); // italic h, Planck constant + +defineSymbol(symbols_text, main, mathord, "h", "\u210E"); // The next loop loads wide (surrogate pair) characters. +// We support some letters in the Unicode range U+1D400 to U+1D7FF, +// Mathematical Alphanumeric Symbols. +// Some editors do not deal well with wide characters. So don't write the +// string into this file. Instead, create the string from the surrogate pair. + +var symbols_wideChar = ""; + +for (var symbols_i3 = 0; symbols_i3 < letters.length; symbols_i3++) { + var _ch3 = letters.charAt(symbols_i3); // The hex numbers in the next line are a surrogate pair. + // 0xD835 is the high surrogate for all letters in the range we support. + // 0xDC00 is the low surrogate for bold A. + + + symbols_wideChar = String.fromCharCode(0xD835, 0xDC00 + symbols_i3); // A-Z a-z bold + + defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar); + defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar); + symbols_wideChar = String.fromCharCode(0xD835, 0xDC34 + symbols_i3); // A-Z a-z italic + + defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar); + defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar); + symbols_wideChar = String.fromCharCode(0xD835, 0xDC68 + symbols_i3); // A-Z a-z bold italic + + defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar); + defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar); + symbols_wideChar = String.fromCharCode(0xD835, 0xDD04 + symbols_i3); // A-Z a-z Fractur + + defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar); + defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar); + symbols_wideChar = String.fromCharCode(0xD835, 0xDDA0 + symbols_i3); // A-Z a-z sans-serif + + defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar); + defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar); + symbols_wideChar = String.fromCharCode(0xD835, 0xDDD4 + symbols_i3); // A-Z a-z sans bold + + defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar); + defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar); + symbols_wideChar = String.fromCharCode(0xD835, 0xDE08 + symbols_i3); // A-Z a-z sans italic + + defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar); + defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar); + symbols_wideChar = String.fromCharCode(0xD835, 0xDE70 + symbols_i3); // A-Z a-z monospace + + defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar); + defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar); + + if (symbols_i3 < 26) { + // KaTeX fonts have only capital letters for blackboard bold and script. + // See exception for k below. + symbols_wideChar = String.fromCharCode(0xD835, 0xDD38 + symbols_i3); // A-Z double struck + + defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar); + defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar); + symbols_wideChar = String.fromCharCode(0xD835, 0xDC9C + symbols_i3); // A-Z script + + defineSymbol(symbols_math, main, mathord, _ch3, symbols_wideChar); + defineSymbol(symbols_text, main, symbols_textord, _ch3, symbols_wideChar); + } // TODO: Add bold script when it is supported by a KaTeX font. + +} // "k" is the only double struck lower case letter in the KaTeX fonts. + + +symbols_wideChar = String.fromCharCode(0xD835, 0xDD5C); // k double struck + +defineSymbol(symbols_math, main, mathord, "k", symbols_wideChar); +defineSymbol(symbols_text, main, symbols_textord, "k", symbols_wideChar); // Next, some wide character numerals + +for (var symbols_i4 = 0; symbols_i4 < 10; symbols_i4++) { + var _ch4 = symbols_i4.toString(); + + symbols_wideChar = String.fromCharCode(0xD835, 0xDFCE + symbols_i4); // 0-9 bold + + defineSymbol(symbols_math, main, mathord, _ch4, symbols_wideChar); + defineSymbol(symbols_text, main, symbols_textord, _ch4, symbols_wideChar); + symbols_wideChar = String.fromCharCode(0xD835, 0xDFE2 + symbols_i4); // 0-9 sans serif + + defineSymbol(symbols_math, main, mathord, _ch4, symbols_wideChar); + defineSymbol(symbols_text, main, symbols_textord, _ch4, symbols_wideChar); + symbols_wideChar = String.fromCharCode(0xD835, 0xDFEC + symbols_i4); // 0-9 bold sans + + defineSymbol(symbols_math, main, mathord, _ch4, symbols_wideChar); + defineSymbol(symbols_text, main, symbols_textord, _ch4, symbols_wideChar); + symbols_wideChar = String.fromCharCode(0xD835, 0xDFF6 + symbols_i4); // 0-9 monospace + + defineSymbol(symbols_math, main, mathord, _ch4, symbols_wideChar); + defineSymbol(symbols_text, main, symbols_textord, _ch4, symbols_wideChar); +} // We add these Latin-1 letters as symbols for backwards-compatibility, +// but they are not actually in the font, nor are they supported by the +// Unicode accent mechanism, so they fall back to Times font and look ugly. +// TODO(edemaine): Fix this. + + +var extraLatin = "ÇÐÞçþ"; + +for (var _i5 = 0; _i5 < extraLatin.length; _i5++) { + var _ch5 = extraLatin.charAt(_i5); + + defineSymbol(symbols_math, main, mathord, _ch5, _ch5); + defineSymbol(symbols_text, main, symbols_textord, _ch5, _ch5); +} + +defineSymbol(symbols_text, main, symbols_textord, "ð", "ð"); // Unicode versions of existing characters + +defineSymbol(symbols_text, main, symbols_textord, "\u2013", "–"); +defineSymbol(symbols_text, main, symbols_textord, "\u2014", "—"); +defineSymbol(symbols_text, main, symbols_textord, "\u2018", "‘"); +defineSymbol(symbols_text, main, symbols_textord, "\u2019", "’"); +defineSymbol(symbols_text, main, symbols_textord, "\u201C", "“"); +defineSymbol(symbols_text, main, symbols_textord, "\u201D", "”"); +// CONCATENATED MODULE: ./src/wide-character.js +/** + * This file provides support for Unicode range U+1D400 to U+1D7FF, + * Mathematical Alphanumeric Symbols. + * + * Function wideCharacterFont takes a wide character as input and returns + * the font information necessary to render it properly. + */ + +/** + * Data below is from https://www.unicode.org/charts/PDF/U1D400.pdf + * That document sorts characters into groups by font type, say bold or italic. + * + * In the arrays below, each subarray consists three elements: + * * The CSS class of that group when in math mode. + * * The CSS class of that group when in text mode. + * * The font name, so that KaTeX can get font metrics. + */ + +var wideLatinLetterData = [["mathbf", "textbf", "Main-Bold"], // A-Z bold upright +["mathbf", "textbf", "Main-Bold"], // a-z bold upright +["mathdefault", "textit", "Math-Italic"], // A-Z italic +["mathdefault", "textit", "Math-Italic"], // a-z italic +["boldsymbol", "boldsymbol", "Main-BoldItalic"], // A-Z bold italic +["boldsymbol", "boldsymbol", "Main-BoldItalic"], // a-z bold italic +// Map fancy A-Z letters to script, not calligraphic. +// This aligns with unicode-math and math fonts (except Cambria Math). +["mathscr", "textscr", "Script-Regular"], // A-Z script +["", "", ""], // a-z script. No font +["", "", ""], // A-Z bold script. No font +["", "", ""], // a-z bold script. No font +["mathfrak", "textfrak", "Fraktur-Regular"], // A-Z Fraktur +["mathfrak", "textfrak", "Fraktur-Regular"], // a-z Fraktur +["mathbb", "textbb", "AMS-Regular"], // A-Z double-struck +["mathbb", "textbb", "AMS-Regular"], // k double-struck +["", "", ""], // A-Z bold Fraktur No font metrics +["", "", ""], // a-z bold Fraktur. No font. +["mathsf", "textsf", "SansSerif-Regular"], // A-Z sans-serif +["mathsf", "textsf", "SansSerif-Regular"], // a-z sans-serif +["mathboldsf", "textboldsf", "SansSerif-Bold"], // A-Z bold sans-serif +["mathboldsf", "textboldsf", "SansSerif-Bold"], // a-z bold sans-serif +["mathitsf", "textitsf", "SansSerif-Italic"], // A-Z italic sans-serif +["mathitsf", "textitsf", "SansSerif-Italic"], // a-z italic sans-serif +["", "", ""], // A-Z bold italic sans. No font +["", "", ""], // a-z bold italic sans. No font +["mathtt", "texttt", "Typewriter-Regular"], // A-Z monospace +["mathtt", "texttt", "Typewriter-Regular"]]; +var wideNumeralData = [["mathbf", "textbf", "Main-Bold"], // 0-9 bold +["", "", ""], // 0-9 double-struck. No KaTeX font. +["mathsf", "textsf", "SansSerif-Regular"], // 0-9 sans-serif +["mathboldsf", "textboldsf", "SansSerif-Bold"], // 0-9 bold sans-serif +["mathtt", "texttt", "Typewriter-Regular"]]; +var wide_character_wideCharacterFont = function wideCharacterFont(wideChar, mode) { + // IE doesn't support codePointAt(). So work with the surrogate pair. + var H = wideChar.charCodeAt(0); // high surrogate + + var L = wideChar.charCodeAt(1); // low surrogate + + var codePoint = (H - 0xD800) * 0x400 + (L - 0xDC00) + 0x10000; + var j = mode === "math" ? 0 : 1; // column index for CSS class. + + if (0x1D400 <= codePoint && codePoint < 0x1D6A4) { + // wideLatinLetterData contains exactly 26 chars on each row. + // So we can calculate the relevant row. No traverse necessary. + var i = Math.floor((codePoint - 0x1D400) / 26); + return [wideLatinLetterData[i][2], wideLatinLetterData[i][j]]; + } else if (0x1D7CE <= codePoint && codePoint <= 0x1D7FF) { + // Numerals, ten per row. + var _i = Math.floor((codePoint - 0x1D7CE) / 10); + + return [wideNumeralData[_i][2], wideNumeralData[_i][j]]; + } else if (codePoint === 0x1D6A5 || codePoint === 0x1D6A6) { + // dotless i or j + return [wideLatinLetterData[0][2], wideLatinLetterData[0][j]]; + } else if (0x1D6A6 < codePoint && codePoint < 0x1D7CE) { + // Greek letters. Not supported, yet. + return ["", ""]; + } else { + // We don't support any wide characters outside 1D400–1D7FF. + throw new src_ParseError("Unsupported character: " + wideChar); + } +}; +// CONCATENATED MODULE: ./src/Options.js +/** + * This file contains information about the options that the Parser carries + * around with it while parsing. Data is held in an `Options` object, and when + * recursing, a new `Options` object can be created with the `.with*` and + * `.reset` functions. + */ + +var sizeStyleMap = [// Each element contains [textsize, scriptsize, scriptscriptsize]. +// The size mappings are taken from TeX with \normalsize=10pt. +[1, 1, 1], // size1: [5, 5, 5] \tiny +[2, 1, 1], // size2: [6, 5, 5] +[3, 1, 1], // size3: [7, 5, 5] \scriptsize +[4, 2, 1], // size4: [8, 6, 5] \footnotesize +[5, 2, 1], // size5: [9, 6, 5] \small +[6, 3, 1], // size6: [10, 7, 5] \normalsize +[7, 4, 2], // size7: [12, 8, 6] \large +[8, 6, 3], // size8: [14.4, 10, 7] \Large +[9, 7, 6], // size9: [17.28, 12, 10] \LARGE +[10, 8, 7], // size10: [20.74, 14.4, 12] \huge +[11, 10, 9]]; +var sizeMultipliers = [// fontMetrics.js:getGlobalMetrics also uses size indexes, so if +// you change size indexes, change that function. +0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.2, 1.44, 1.728, 2.074, 2.488]; + +var sizeAtStyle = function sizeAtStyle(size, style) { + return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1]; +}; // In these types, "" (empty string) means "no change". + + +/** + * This is the main options class. It contains the current style, size, color, + * and font. + * + * Options objects should not be modified. To create a new Options with + * different properties, call a `.having*` method. + */ +var Options_Options = +/*#__PURE__*/ +function () { + // A font family applies to a group of fonts (i.e. SansSerif), while a font + // represents a specific font (i.e. SansSerif Bold). + // See: https://tex.stackexchange.com/questions/22350/difference-between-textrm-and-mathrm + + /** + * The base size index. + */ + function Options(data) { + this.style = void 0; + this.color = void 0; + this.size = void 0; + this.textSize = void 0; + this.phantom = void 0; + this.font = void 0; + this.fontFamily = void 0; + this.fontWeight = void 0; + this.fontShape = void 0; + this.sizeMultiplier = void 0; + this.maxSize = void 0; + this.minRuleThickness = void 0; + this._fontMetrics = void 0; + this.style = data.style; + this.color = data.color; + this.size = data.size || Options.BASESIZE; + this.textSize = data.textSize || this.size; + this.phantom = !!data.phantom; + this.font = data.font || ""; + this.fontFamily = data.fontFamily || ""; + this.fontWeight = data.fontWeight || ''; + this.fontShape = data.fontShape || ''; + this.sizeMultiplier = sizeMultipliers[this.size - 1]; + this.maxSize = data.maxSize; + this.minRuleThickness = data.minRuleThickness; + this._fontMetrics = undefined; + } + /** + * Returns a new options object with the same properties as "this". Properties + * from "extension" will be copied to the new options object. + */ + + + var _proto = Options.prototype; + + _proto.extend = function extend(extension) { + var data = { + style: this.style, + size: this.size, + textSize: this.textSize, + color: this.color, + phantom: this.phantom, + font: this.font, + fontFamily: this.fontFamily, + fontWeight: this.fontWeight, + fontShape: this.fontShape, + maxSize: this.maxSize, + minRuleThickness: this.minRuleThickness + }; + + for (var key in extension) { + if (extension.hasOwnProperty(key)) { + data[key] = extension[key]; + } + } + + return new Options(data); + } + /** + * Return an options object with the given style. If `this.style === style`, + * returns `this`. + */ + ; + + _proto.havingStyle = function havingStyle(style) { + if (this.style === style) { + return this; + } else { + return this.extend({ + style: style, + size: sizeAtStyle(this.textSize, style) + }); + } + } + /** + * Return an options object with a cramped version of the current style. If + * the current style is cramped, returns `this`. + */ + ; + + _proto.havingCrampedStyle = function havingCrampedStyle() { + return this.havingStyle(this.style.cramp()); + } + /** + * Return an options object with the given size and in at least `\textstyle`. + * Returns `this` if appropriate. + */ + ; + + _proto.havingSize = function havingSize(size) { + if (this.size === size && this.textSize === size) { + return this; + } else { + return this.extend({ + style: this.style.text(), + size: size, + textSize: size, + sizeMultiplier: sizeMultipliers[size - 1] + }); + } + } + /** + * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted, + * changes to at least `\textstyle`. + */ + ; + + _proto.havingBaseStyle = function havingBaseStyle(style) { + style = style || this.style.text(); + var wantSize = sizeAtStyle(Options.BASESIZE, style); + + if (this.size === wantSize && this.textSize === Options.BASESIZE && this.style === style) { + return this; + } else { + return this.extend({ + style: style, + size: wantSize + }); + } + } + /** + * Remove the effect of sizing changes such as \Huge. + * Keep the effect of the current style, such as \scriptstyle. + */ + ; + + _proto.havingBaseSizing = function havingBaseSizing() { + var size; + + switch (this.style.id) { + case 4: + case 5: + size = 3; // normalsize in scriptstyle + + break; + + case 6: + case 7: + size = 1; // normalsize in scriptscriptstyle + + break; + + default: + size = 6; + // normalsize in textstyle or displaystyle + } + + return this.extend({ + style: this.style.text(), + size: size + }); + } + /** + * Create a new options object with the given color. + */ + ; + + _proto.withColor = function withColor(color) { + return this.extend({ + color: color + }); + } + /** + * Create a new options object with "phantom" set to true. + */ + ; + + _proto.withPhantom = function withPhantom() { + return this.extend({ + phantom: true + }); + } + /** + * Creates a new options object with the given math font or old text font. + * @type {[type]} + */ + ; + + _proto.withFont = function withFont(font) { + return this.extend({ + font: font + }); + } + /** + * Create a new options objects with the given fontFamily. + */ + ; + + _proto.withTextFontFamily = function withTextFontFamily(fontFamily) { + return this.extend({ + fontFamily: fontFamily, + font: "" + }); + } + /** + * Creates a new options object with the given font weight + */ + ; + + _proto.withTextFontWeight = function withTextFontWeight(fontWeight) { + return this.extend({ + fontWeight: fontWeight, + font: "" + }); + } + /** + * Creates a new options object with the given font weight + */ + ; + + _proto.withTextFontShape = function withTextFontShape(fontShape) { + return this.extend({ + fontShape: fontShape, + font: "" + }); + } + /** + * Return the CSS sizing classes required to switch from enclosing options + * `oldOptions` to `this`. Returns an array of classes. + */ + ; + + _proto.sizingClasses = function sizingClasses(oldOptions) { + if (oldOptions.size !== this.size) { + return ["sizing", "reset-size" + oldOptions.size, "size" + this.size]; + } else { + return []; + } + } + /** + * Return the CSS sizing classes required to switch to the base size. Like + * `this.havingSize(BASESIZE).sizingClasses(this)`. + */ + ; + + _proto.baseSizingClasses = function baseSizingClasses() { + if (this.size !== Options.BASESIZE) { + return ["sizing", "reset-size" + this.size, "size" + Options.BASESIZE]; + } else { + return []; + } + } + /** + * Return the font metrics for this size. + */ + ; + + _proto.fontMetrics = function fontMetrics() { + if (!this._fontMetrics) { + this._fontMetrics = getGlobalMetrics(this.size); + } + + return this._fontMetrics; + } + /** + * Gets the CSS color of the current options object + */ + ; + + _proto.getColor = function getColor() { + if (this.phantom) { + return "transparent"; + } else { + return this.color; + } + }; + + return Options; +}(); + +Options_Options.BASESIZE = 6; +/* harmony default export */ var src_Options = (Options_Options); +// CONCATENATED MODULE: ./src/units.js +/** + * This file does conversion between units. In particular, it provides + * calculateSize to convert other units into ems. + */ + + // This table gives the number of TeX pts in one of each *absolute* TeX unit. +// Thus, multiplying a length by this number converts the length from units +// into pts. Dividing the result by ptPerEm gives the number of ems +// *assuming* a font size of ptPerEm (normal size, normal style). + +var ptPerUnit = { + // https://en.wikibooks.org/wiki/LaTeX/Lengths and + // https://tex.stackexchange.com/a/8263 + "pt": 1, + // TeX point + "mm": 7227 / 2540, + // millimeter + "cm": 7227 / 254, + // centimeter + "in": 72.27, + // inch + "bp": 803 / 800, + // big (PostScript) points + "pc": 12, + // pica + "dd": 1238 / 1157, + // didot + "cc": 14856 / 1157, + // cicero (12 didot) + "nd": 685 / 642, + // new didot + "nc": 1370 / 107, + // new cicero (12 new didot) + "sp": 1 / 65536, + // scaled point (TeX's internal smallest unit) + // https://tex.stackexchange.com/a/41371 + "px": 803 / 800 // \pdfpxdimen defaults to 1 bp in pdfTeX and LuaTeX + +}; // Dictionary of relative units, for fast validity testing. + +var relativeUnit = { + "ex": true, + "em": true, + "mu": true +}; + +/** + * Determine whether the specified unit (either a string defining the unit + * or a "size" parse node containing a unit field) is valid. + */ +var validUnit = function validUnit(unit) { + if (typeof unit !== "string") { + unit = unit.unit; + } + + return unit in ptPerUnit || unit in relativeUnit || unit === "ex"; +}; +/* + * Convert a "size" parse node (with numeric "number" and string "unit" fields, + * as parsed by functions.js argType "size") into a CSS em value for the + * current style/scale. `options` gives the current options. + */ + +var units_calculateSize = function calculateSize(sizeValue, options) { + var scale; + + if (sizeValue.unit in ptPerUnit) { + // Absolute units + scale = ptPerUnit[sizeValue.unit] // Convert unit to pt + / options.fontMetrics().ptPerEm // Convert pt to CSS em + / options.sizeMultiplier; // Unscale to make absolute units + } else if (sizeValue.unit === "mu") { + // `mu` units scale with scriptstyle/scriptscriptstyle. + scale = options.fontMetrics().cssEmPerMu; + } else { + // Other relative units always refer to the *textstyle* font + // in the current size. + var unitOptions; + + if (options.style.isTight()) { + // isTight() means current style is script/scriptscript. + unitOptions = options.havingStyle(options.style.text()); + } else { + unitOptions = options; + } // TODO: In TeX these units are relative to the quad of the current + // *text* font, e.g. cmr10. KaTeX instead uses values from the + // comparably-sized *Computer Modern symbol* font. At 10pt, these + // match. At 7pt and 5pt, they differ: cmr7=1.138894, cmsy7=1.170641; + // cmr5=1.361133, cmsy5=1.472241. Consider $\scriptsize a\kern1emb$. + // TeX \showlists shows a kern of 1.13889 * fontsize; + // KaTeX shows a kern of 1.171 * fontsize. + + + if (sizeValue.unit === "ex") { + scale = unitOptions.fontMetrics().xHeight; + } else if (sizeValue.unit === "em") { + scale = unitOptions.fontMetrics().quad; + } else { + throw new src_ParseError("Invalid unit: '" + sizeValue.unit + "'"); + } + + if (unitOptions !== options) { + scale *= unitOptions.sizeMultiplier / options.sizeMultiplier; + } + } + + return Math.min(sizeValue.number * scale, options.maxSize); +}; +// CONCATENATED MODULE: ./src/buildCommon.js +/* eslint no-console:0 */ + +/** + * This module contains general functions that can be used for building + * different kinds of domTree nodes in a consistent manner. + */ + + + + + + + +// The following have to be loaded from Main-Italic font, using class mathit +var mathitLetters = ["\\imath", "ı", // dotless i +"\\jmath", "ȷ", // dotless j +"\\pounds", "\\mathsterling", "\\textsterling", "£"]; +/** + * Looks up the given symbol in fontMetrics, after applying any symbol + * replacements defined in symbol.js + */ + +var buildCommon_lookupSymbol = function lookupSymbol(value, // TODO(#963): Use a union type for this. +fontName, mode) { + // Replace the value with its replaced value from symbol.js + if (src_symbols[mode][value] && src_symbols[mode][value].replace) { + value = src_symbols[mode][value].replace; + } + + return { + value: value, + metrics: getCharacterMetrics(value, fontName, mode) + }; +}; +/** + * Makes a symbolNode after translation via the list of symbols in symbols.js. + * Correctly pulls out metrics for the character, and optionally takes a list of + * classes to be attached to the node. + * + * TODO: make argument order closer to makeSpan + * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which + * should if present come first in `classes`. + * TODO(#953): Make `options` mandatory and always pass it in. + */ + + +var buildCommon_makeSymbol = function makeSymbol(value, fontName, mode, options, classes) { + var lookup = buildCommon_lookupSymbol(value, fontName, mode); + var metrics = lookup.metrics; + value = lookup.value; + var symbolNode; + + if (metrics) { + var italic = metrics.italic; + + if (mode === "text" || options && options.font === "mathit") { + italic = 0; + } + + symbolNode = new domTree_SymbolNode(value, metrics.height, metrics.depth, italic, metrics.skew, metrics.width, classes); + } else { + // TODO(emily): Figure out a good way to only print this in development + typeof console !== "undefined" && console.warn("No character metrics " + ("for '" + value + "' in style '" + fontName + "' and mode '" + mode + "'")); + symbolNode = new domTree_SymbolNode(value, 0, 0, 0, 0, 0, classes); + } + + if (options) { + symbolNode.maxFontSize = options.sizeMultiplier; + + if (options.style.isTight()) { + symbolNode.classes.push("mtight"); + } + + var color = options.getColor(); + + if (color) { + symbolNode.style.color = color; + } + } + + return symbolNode; +}; +/** + * Makes a symbol in Main-Regular or AMS-Regular. + * Used for rel, bin, open, close, inner, and punct. + */ + + +var buildCommon_mathsym = function mathsym(value, mode, options, classes) { + if (classes === void 0) { + classes = []; + } + + // Decide what font to render the symbol in by its entry in the symbols + // table. + // Have a special case for when the value = \ because the \ is used as a + // textord in unsupported command errors but cannot be parsed as a regular + // text ordinal and is therefore not present as a symbol in the symbols + // table for text, as well as a special case for boldsymbol because it + // can be used for bold + and - + if (options.font === "boldsymbol" && buildCommon_lookupSymbol(value, "Main-Bold", mode).metrics) { + return buildCommon_makeSymbol(value, "Main-Bold", mode, options, classes.concat(["mathbf"])); + } else if (value === "\\" || src_symbols[mode][value].font === "main") { + return buildCommon_makeSymbol(value, "Main-Regular", mode, options, classes); + } else { + return buildCommon_makeSymbol(value, "AMS-Regular", mode, options, classes.concat(["amsrm"])); + } +}; +/** + * Determines which of the two font names (Main-Italic and Math-Italic) and + * corresponding style tags (maindefault or mathit) to use for default math font, + * depending on the symbol. + */ + + +var buildCommon_mathdefault = function mathdefault(value, mode, options, classes) { + if (/[0-9]/.test(value.charAt(0)) || // glyphs for \imath and \jmath do not exist in Math-Italic so we + // need to use Main-Italic instead + utils.contains(mathitLetters, value)) { + return { + fontName: "Main-Italic", + fontClass: "mathit" + }; + } else { + return { + fontName: "Math-Italic", + fontClass: "mathdefault" + }; + } +}; +/** + * Determines which of the font names (Main-Italic, Math-Italic, and Caligraphic) + * and corresponding style tags (mathit, mathdefault, or mathcal) to use for font + * "mathnormal", depending on the symbol. Use this function instead of fontMap for + * font "mathnormal". + */ + + +var buildCommon_mathnormal = function mathnormal(value, mode, options, classes) { + if (utils.contains(mathitLetters, value)) { + return { + fontName: "Main-Italic", + fontClass: "mathit" + }; + } else if (/[0-9]/.test(value.charAt(0))) { + return { + fontName: "Caligraphic-Regular", + fontClass: "mathcal" + }; + } else { + return { + fontName: "Math-Italic", + fontClass: "mathdefault" + }; + } +}; +/** + * Determines which of the two font names (Main-Bold and Math-BoldItalic) and + * corresponding style tags (mathbf or boldsymbol) to use for font "boldsymbol", + * depending on the symbol. Use this function instead of fontMap for font + * "boldsymbol". + */ + + +var boldsymbol = function boldsymbol(value, mode, options, classes) { + if (buildCommon_lookupSymbol(value, "Math-BoldItalic", mode).metrics) { + return { + fontName: "Math-BoldItalic", + fontClass: "boldsymbol" + }; + } else { + // Some glyphs do not exist in Math-BoldItalic so we need to use + // Main-Bold instead. + return { + fontName: "Main-Bold", + fontClass: "mathbf" + }; + } +}; +/** + * Makes either a mathord or textord in the correct font and color. + */ + + +var buildCommon_makeOrd = function makeOrd(group, options, type) { + var mode = group.mode; + var text = group.text; + var classes = ["mord"]; // Math mode or Old font (i.e. \rm) + + var isFont = mode === "math" || mode === "text" && options.font; + var fontOrFamily = isFont ? options.font : options.fontFamily; + + if (text.charCodeAt(0) === 0xD835) { + // surrogate pairs get special treatment + var _wideCharacterFont = wide_character_wideCharacterFont(text, mode), + wideFontName = _wideCharacterFont[0], + wideFontClass = _wideCharacterFont[1]; + + return buildCommon_makeSymbol(text, wideFontName, mode, options, classes.concat(wideFontClass)); + } else if (fontOrFamily) { + var fontName; + var fontClasses; + + if (fontOrFamily === "boldsymbol" || fontOrFamily === "mathnormal") { + var fontData = fontOrFamily === "boldsymbol" ? boldsymbol(text, mode, options, classes) : buildCommon_mathnormal(text, mode, options, classes); + fontName = fontData.fontName; + fontClasses = [fontData.fontClass]; + } else if (utils.contains(mathitLetters, text)) { + fontName = "Main-Italic"; + fontClasses = ["mathit"]; + } else if (isFont) { + fontName = fontMap[fontOrFamily].fontName; + fontClasses = [fontOrFamily]; + } else { + fontName = retrieveTextFontName(fontOrFamily, options.fontWeight, options.fontShape); + fontClasses = [fontOrFamily, options.fontWeight, options.fontShape]; + } + + if (buildCommon_lookupSymbol(text, fontName, mode).metrics) { + return buildCommon_makeSymbol(text, fontName, mode, options, classes.concat(fontClasses)); + } else if (ligatures.hasOwnProperty(text) && fontName.substr(0, 10) === "Typewriter") { + // Deconstruct ligatures in monospace fonts (\texttt, \tt). + var parts = []; + + for (var i = 0; i < text.length; i++) { + parts.push(buildCommon_makeSymbol(text[i], fontName, mode, options, classes.concat(fontClasses))); + } + + return buildCommon_makeFragment(parts); + } + } // Makes a symbol in the default font for mathords and textords. + + + if (type === "mathord") { + var fontLookup = buildCommon_mathdefault(text, mode, options, classes); + return buildCommon_makeSymbol(text, fontLookup.fontName, mode, options, classes.concat([fontLookup.fontClass])); + } else if (type === "textord") { + var font = src_symbols[mode][text] && src_symbols[mode][text].font; + + if (font === "ams") { + var _fontName = retrieveTextFontName("amsrm", options.fontWeight, options.fontShape); + + return buildCommon_makeSymbol(text, _fontName, mode, options, classes.concat("amsrm", options.fontWeight, options.fontShape)); + } else if (font === "main" || !font) { + var _fontName2 = retrieveTextFontName("textrm", options.fontWeight, options.fontShape); + + return buildCommon_makeSymbol(text, _fontName2, mode, options, classes.concat(options.fontWeight, options.fontShape)); + } else { + // fonts added by plugins + var _fontName3 = retrieveTextFontName(font, options.fontWeight, options.fontShape); // We add font name as a css class + + + return buildCommon_makeSymbol(text, _fontName3, mode, options, classes.concat(_fontName3, options.fontWeight, options.fontShape)); + } + } else { + throw new Error("unexpected type: " + type + " in makeOrd"); + } +}; +/** + * Returns true if subsequent symbolNodes have the same classes, skew, maxFont, + * and styles. + */ + + +var buildCommon_canCombine = function canCombine(prev, next) { + if (createClass(prev.classes) !== createClass(next.classes) || prev.skew !== next.skew || prev.maxFontSize !== next.maxFontSize) { + return false; + } + + for (var style in prev.style) { + if (prev.style.hasOwnProperty(style) && prev.style[style] !== next.style[style]) { + return false; + } + } + + for (var _style in next.style) { + if (next.style.hasOwnProperty(_style) && prev.style[_style] !== next.style[_style]) { + return false; + } + } + + return true; +}; +/** + * Combine consequetive domTree.symbolNodes into a single symbolNode. + * Note: this function mutates the argument. + */ + + +var buildCommon_tryCombineChars = function tryCombineChars(chars) { + for (var i = 0; i < chars.length - 1; i++) { + var prev = chars[i]; + var next = chars[i + 1]; + + if (prev instanceof domTree_SymbolNode && next instanceof domTree_SymbolNode && buildCommon_canCombine(prev, next)) { + prev.text += next.text; + prev.height = Math.max(prev.height, next.height); + prev.depth = Math.max(prev.depth, next.depth); // Use the last character's italic correction since we use + // it to add padding to the right of the span created from + // the combined characters. + + prev.italic = next.italic; + chars.splice(i + 1, 1); + i--; + } + } + + return chars; +}; +/** + * Calculate the height, depth, and maxFontSize of an element based on its + * children. + */ + + +var sizeElementFromChildren = function sizeElementFromChildren(elem) { + var height = 0; + var depth = 0; + var maxFontSize = 0; + + for (var i = 0; i < elem.children.length; i++) { + var child = elem.children[i]; + + if (child.height > height) { + height = child.height; + } + + if (child.depth > depth) { + depth = child.depth; + } + + if (child.maxFontSize > maxFontSize) { + maxFontSize = child.maxFontSize; + } + } + + elem.height = height; + elem.depth = depth; + elem.maxFontSize = maxFontSize; +}; +/** + * Makes a span with the given list of classes, list of children, and options. + * + * TODO(#953): Ensure that `options` is always provided (currently some call + * sites don't pass it) and make the type below mandatory. + * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which + * should if present come first in `classes`. + */ + + +var buildCommon_makeSpan = function makeSpan(classes, children, options, style) { + var span = new domTree_Span(classes, children, options, style); + sizeElementFromChildren(span); + return span; +}; // SVG one is simpler -- doesn't require height, depth, max-font setting. +// This is also a separate method for typesafety. + + +var buildCommon_makeSvgSpan = function makeSvgSpan(classes, children, options, style) { + return new domTree_Span(classes, children, options, style); +}; + +var makeLineSpan = function makeLineSpan(className, options, thickness) { + var line = buildCommon_makeSpan([className], [], options); + line.height = Math.max(thickness || options.fontMetrics().defaultRuleThickness, options.minRuleThickness); + line.style.borderBottomWidth = line.height + "em"; + line.maxFontSize = 1.0; + return line; +}; +/** + * Makes an anchor with the given href, list of classes, list of children, + * and options. + */ + + +var buildCommon_makeAnchor = function makeAnchor(href, classes, children, options) { + var anchor = new domTree_Anchor(href, classes, children, options); + sizeElementFromChildren(anchor); + return anchor; +}; +/** + * Makes a document fragment with the given list of children. + */ + + +var buildCommon_makeFragment = function makeFragment(children) { + var fragment = new tree_DocumentFragment(children); + sizeElementFromChildren(fragment); + return fragment; +}; +/** + * Wraps group in a span if it's a document fragment, allowing to apply classes + * and styles + */ + + +var buildCommon_wrapFragment = function wrapFragment(group, options) { + if (group instanceof tree_DocumentFragment) { + return buildCommon_makeSpan([], [group], options); + } + + return group; +}; // These are exact object types to catch typos in the names of the optional fields. + + +// Computes the updated `children` list and the overall depth. +// +// This helper function for makeVList makes it easier to enforce type safety by +// allowing early exits (returns) in the logic. +var getVListChildrenAndDepth = function getVListChildrenAndDepth(params) { + if (params.positionType === "individualShift") { + var oldChildren = params.children; + var children = [oldChildren[0]]; // Add in kerns to the list of params.children to get each element to be + // shifted to the correct specified shift + + var _depth = -oldChildren[0].shift - oldChildren[0].elem.depth; + + var currPos = _depth; + + for (var i = 1; i < oldChildren.length; i++) { + var diff = -oldChildren[i].shift - currPos - oldChildren[i].elem.depth; + var size = diff - (oldChildren[i - 1].elem.height + oldChildren[i - 1].elem.depth); + currPos = currPos + diff; + children.push({ + type: "kern", + size: size + }); + children.push(oldChildren[i]); + } + + return { + children: children, + depth: _depth + }; + } + + var depth; + + if (params.positionType === "top") { + // We always start at the bottom, so calculate the bottom by adding up + // all the sizes + var bottom = params.positionData; + + for (var _i = 0; _i < params.children.length; _i++) { + var child = params.children[_i]; + bottom -= child.type === "kern" ? child.size : child.elem.height + child.elem.depth; + } + + depth = bottom; + } else if (params.positionType === "bottom") { + depth = -params.positionData; + } else { + var firstChild = params.children[0]; + + if (firstChild.type !== "elem") { + throw new Error('First child must have type "elem".'); + } + + if (params.positionType === "shift") { + depth = -firstChild.elem.depth - params.positionData; + } else if (params.positionType === "firstBaseline") { + depth = -firstChild.elem.depth; + } else { + throw new Error("Invalid positionType " + params.positionType + "."); + } + } + + return { + children: params.children, + depth: depth + }; +}; +/** + * Makes a vertical list by stacking elements and kerns on top of each other. + * Allows for many different ways of specifying the positioning method. + * + * See VListParam documentation above. + */ + + +var buildCommon_makeVList = function makeVList(params, options) { + var _getVListChildrenAndD = getVListChildrenAndDepth(params), + children = _getVListChildrenAndD.children, + depth = _getVListChildrenAndD.depth; // Create a strut that is taller than any list item. The strut is added to + // each item, where it will determine the item's baseline. Since it has + // `overflow:hidden`, the strut's top edge will sit on the item's line box's + // top edge and the strut's bottom edge will sit on the item's baseline, + // with no additional line-height spacing. This allows the item baseline to + // be positioned precisely without worrying about font ascent and + // line-height. + + + var pstrutSize = 0; + + for (var i = 0; i < children.length; i++) { + var child = children[i]; + + if (child.type === "elem") { + var elem = child.elem; + pstrutSize = Math.max(pstrutSize, elem.maxFontSize, elem.height); + } + } + + pstrutSize += 2; + var pstrut = buildCommon_makeSpan(["pstrut"], []); + pstrut.style.height = pstrutSize + "em"; // Create a new list of actual children at the correct offsets + + var realChildren = []; + var minPos = depth; + var maxPos = depth; + var currPos = depth; + + for (var _i2 = 0; _i2 < children.length; _i2++) { + var _child = children[_i2]; + + if (_child.type === "kern") { + currPos += _child.size; + } else { + var _elem = _child.elem; + var classes = _child.wrapperClasses || []; + var style = _child.wrapperStyle || {}; + var childWrap = buildCommon_makeSpan(classes, [pstrut, _elem], undefined, style); + childWrap.style.top = -pstrutSize - currPos - _elem.depth + "em"; + + if (_child.marginLeft) { + childWrap.style.marginLeft = _child.marginLeft; + } + + if (_child.marginRight) { + childWrap.style.marginRight = _child.marginRight; + } + + realChildren.push(childWrap); + currPos += _elem.height + _elem.depth; + } + + minPos = Math.min(minPos, currPos); + maxPos = Math.max(maxPos, currPos); + } // The vlist contents go in a table-cell with `vertical-align:bottom`. + // This cell's bottom edge will determine the containing table's baseline + // without overly expanding the containing line-box. + + + var vlist = buildCommon_makeSpan(["vlist"], realChildren); + vlist.style.height = maxPos + "em"; // A second row is used if necessary to represent the vlist's depth. + + var rows; + + if (minPos < 0) { + // We will define depth in an empty span with display: table-cell. + // It should render with the height that we define. But Chrome, in + // contenteditable mode only, treats that span as if it contains some + // text content. And that min-height over-rides our desired height. + // So we put another empty span inside the depth strut span. + var emptySpan = buildCommon_makeSpan([], []); + var depthStrut = buildCommon_makeSpan(["vlist"], [emptySpan]); + depthStrut.style.height = -minPos + "em"; // Safari wants the first row to have inline content; otherwise it + // puts the bottom of the *second* row on the baseline. + + var topStrut = buildCommon_makeSpan(["vlist-s"], [new domTree_SymbolNode("\u200B")]); + rows = [buildCommon_makeSpan(["vlist-r"], [vlist, topStrut]), buildCommon_makeSpan(["vlist-r"], [depthStrut])]; + } else { + rows = [buildCommon_makeSpan(["vlist-r"], [vlist])]; + } + + var vtable = buildCommon_makeSpan(["vlist-t"], rows); + + if (rows.length === 2) { + vtable.classes.push("vlist-t2"); + } + + vtable.height = maxPos; + vtable.depth = -minPos; + return vtable; +}; // Glue is a concept from TeX which is a flexible space between elements in +// either a vertical or horizontal list. In KaTeX, at least for now, it's +// static space between elements in a horizontal layout. + + +var buildCommon_makeGlue = function makeGlue(measurement, options) { + // Make an empty span for the space + var rule = buildCommon_makeSpan(["mspace"], [], options); + var size = units_calculateSize(measurement, options); + rule.style.marginRight = size + "em"; + return rule; +}; // Takes font options, and returns the appropriate fontLookup name + + +var retrieveTextFontName = function retrieveTextFontName(fontFamily, fontWeight, fontShape) { + var baseFontName = ""; + + switch (fontFamily) { + case "amsrm": + baseFontName = "AMS"; + break; + + case "textrm": + baseFontName = "Main"; + break; + + case "textsf": + baseFontName = "SansSerif"; + break; + + case "texttt": + baseFontName = "Typewriter"; + break; + + default: + baseFontName = fontFamily; + // use fonts added by a plugin + } + + var fontStylesName; + + if (fontWeight === "textbf" && fontShape === "textit") { + fontStylesName = "BoldItalic"; + } else if (fontWeight === "textbf") { + fontStylesName = "Bold"; + } else if (fontWeight === "textit") { + fontStylesName = "Italic"; + } else { + fontStylesName = "Regular"; + } + + return baseFontName + "-" + fontStylesName; +}; +/** + * Maps TeX font commands to objects containing: + * - variant: string used for "mathvariant" attribute in buildMathML.js + * - fontName: the "style" parameter to fontMetrics.getCharacterMetrics + */ +// A map between tex font commands an MathML mathvariant attribute values + + +var fontMap = { + // styles + "mathbf": { + variant: "bold", + fontName: "Main-Bold" + }, + "mathrm": { + variant: "normal", + fontName: "Main-Regular" + }, + "textit": { + variant: "italic", + fontName: "Main-Italic" + }, + "mathit": { + variant: "italic", + fontName: "Main-Italic" + }, + // Default math font, "mathnormal" and "boldsymbol" are missing because they + // require the use of several fonts: Main-Italic and Math-Italic for default + // math font, Main-Italic, Math-Italic, Caligraphic for "mathnormal", and + // Math-BoldItalic and Main-Bold for "boldsymbol". This is handled by a + // special case in makeOrd which ends up calling mathdefault, mathnormal, + // and boldsymbol. + // families + "mathbb": { + variant: "double-struck", + fontName: "AMS-Regular" + }, + "mathcal": { + variant: "script", + fontName: "Caligraphic-Regular" + }, + "mathfrak": { + variant: "fraktur", + fontName: "Fraktur-Regular" + }, + "mathscr": { + variant: "script", + fontName: "Script-Regular" + }, + "mathsf": { + variant: "sans-serif", + fontName: "SansSerif-Regular" + }, + "mathtt": { + variant: "monospace", + fontName: "Typewriter-Regular" + } +}; +var svgData = { + // path, width, height + vec: ["vec", 0.471, 0.714], + // values from the font glyph + oiintSize1: ["oiintSize1", 0.957, 0.499], + // oval to overlay the integrand + oiintSize2: ["oiintSize2", 1.472, 0.659], + oiiintSize1: ["oiiintSize1", 1.304, 0.499], + oiiintSize2: ["oiiintSize2", 1.98, 0.659] +}; + +var buildCommon_staticSvg = function staticSvg(value, options) { + // Create a span with inline SVG for the element. + var _svgData$value = svgData[value], + pathName = _svgData$value[0], + width = _svgData$value[1], + height = _svgData$value[2]; + var path = new domTree_PathNode(pathName); + var svgNode = new SvgNode([path], { + "width": width + "em", + "height": height + "em", + // Override CSS rule `.katex svg { width: 100% }` + "style": "width:" + width + "em", + "viewBox": "0 0 " + 1000 * width + " " + 1000 * height, + "preserveAspectRatio": "xMinYMin" + }); + var span = buildCommon_makeSvgSpan(["overlay"], [svgNode], options); + span.height = height; + span.style.height = height + "em"; + span.style.width = width + "em"; + return span; +}; + +/* harmony default export */ var buildCommon = ({ + fontMap: fontMap, + makeSymbol: buildCommon_makeSymbol, + mathsym: buildCommon_mathsym, + makeSpan: buildCommon_makeSpan, + makeSvgSpan: buildCommon_makeSvgSpan, + makeLineSpan: makeLineSpan, + makeAnchor: buildCommon_makeAnchor, + makeFragment: buildCommon_makeFragment, + wrapFragment: buildCommon_wrapFragment, + makeVList: buildCommon_makeVList, + makeOrd: buildCommon_makeOrd, + makeGlue: buildCommon_makeGlue, + staticSvg: buildCommon_staticSvg, + svgData: svgData, + tryCombineChars: buildCommon_tryCombineChars +}); +// CONCATENATED MODULE: ./src/parseNode.js + + +/** + * Asserts that the node is of the given type and returns it with stricter + * typing. Throws if the node's type does not match. + */ +function assertNodeType(node, type) { + var typedNode = checkNodeType(node, type); + + if (!typedNode) { + throw new Error("Expected node of type " + type + ", but got " + (node ? "node of type " + node.type : String(node))); + } // $FlowFixMe: Unsure why. + + + return typedNode; +} +/** + * Returns the node more strictly typed iff it is of the given type. Otherwise, + * returns null. + */ + +function checkNodeType(node, type) { + if (node && node.type === type) { + // The definition of ParseNode doesn't communicate to flow that + // `type: TYPE` (as that's not explicitly mentioned anywhere), though that + // happens to be true for all our value types. + // $FlowFixMe + return node; + } + + return null; +} +/** + * Asserts that the node is of the given type and returns it with stricter + * typing. Throws if the node's type does not match. + */ + +function assertAtomFamily(node, family) { + var typedNode = checkAtomFamily(node, family); + + if (!typedNode) { + throw new Error("Expected node of type \"atom\" and family \"" + family + "\", but got " + (node ? node.type === "atom" ? "atom of family " + node.family : "node of type " + node.type : String(node))); + } + + return typedNode; +} +/** + * Returns the node more strictly typed iff it is of the given type. Otherwise, + * returns null. + */ + +function checkAtomFamily(node, family) { + return node && node.type === "atom" && node.family === family ? node : null; +} +/** + * Returns the node more strictly typed iff it is of the given type. Otherwise, + * returns null. + */ + +function assertSymbolNodeType(node) { + var typedNode = checkSymbolNodeType(node); + + if (!typedNode) { + throw new Error("Expected node of symbol group type, but got " + (node ? "node of type " + node.type : String(node))); + } + + return typedNode; +} +/** + * Returns the node more strictly typed iff it is of the given type. Otherwise, + * returns null. + */ + +function checkSymbolNodeType(node) { + if (node && (node.type === "atom" || NON_ATOMS.hasOwnProperty(node.type))) { + // $FlowFixMe + return node; + } + + return null; +} +// CONCATENATED MODULE: ./src/spacingData.js +/** + * Describes spaces between different classes of atoms. + */ +var thinspace = { + number: 3, + unit: "mu" +}; +var mediumspace = { + number: 4, + unit: "mu" +}; +var thickspace = { + number: 5, + unit: "mu" +}; // Making the type below exact with all optional fields doesn't work due to +// - https://github.com/facebook/flow/issues/4582 +// - https://github.com/facebook/flow/issues/5688 +// However, since *all* fields are optional, $Shape<> works as suggested in 5688 +// above. + +// Spacing relationships for display and text styles +var spacings = { + mord: { + mop: thinspace, + mbin: mediumspace, + mrel: thickspace, + minner: thinspace + }, + mop: { + mord: thinspace, + mop: thinspace, + mrel: thickspace, + minner: thinspace + }, + mbin: { + mord: mediumspace, + mop: mediumspace, + mopen: mediumspace, + minner: mediumspace + }, + mrel: { + mord: thickspace, + mop: thickspace, + mopen: thickspace, + minner: thickspace + }, + mopen: {}, + mclose: { + mop: thinspace, + mbin: mediumspace, + mrel: thickspace, + minner: thinspace + }, + mpunct: { + mord: thinspace, + mop: thinspace, + mrel: thickspace, + mopen: thinspace, + mclose: thinspace, + mpunct: thinspace, + minner: thinspace + }, + minner: { + mord: thinspace, + mop: thinspace, + mbin: mediumspace, + mrel: thickspace, + mopen: thinspace, + mpunct: thinspace, + minner: thinspace + } +}; // Spacing relationships for script and scriptscript styles + +var tightSpacings = { + mord: { + mop: thinspace + }, + mop: { + mord: thinspace, + mop: thinspace + }, + mbin: {}, + mrel: {}, + mopen: {}, + mclose: { + mop: thinspace + }, + mpunct: {}, + minner: { + mop: thinspace + } +}; +// CONCATENATED MODULE: ./src/defineFunction.js + + +/** + * All registered functions. + * `functions.js` just exports this same dictionary again and makes it public. + * `Parser.js` requires this dictionary. + */ +var _functions = {}; +/** + * All HTML builders. Should be only used in the `define*` and the `build*ML` + * functions. + */ + +var _htmlGroupBuilders = {}; +/** + * All MathML builders. Should be only used in the `define*` and the `build*ML` + * functions. + */ + +var _mathmlGroupBuilders = {}; +function defineFunction(_ref) { + var type = _ref.type, + names = _ref.names, + props = _ref.props, + handler = _ref.handler, + htmlBuilder = _ref.htmlBuilder, + mathmlBuilder = _ref.mathmlBuilder; + // Set default values of functions + var data = { + type: type, + numArgs: props.numArgs, + argTypes: props.argTypes, + greediness: props.greediness === undefined ? 1 : props.greediness, + allowedInText: !!props.allowedInText, + allowedInMath: props.allowedInMath === undefined ? true : props.allowedInMath, + numOptionalArgs: props.numOptionalArgs || 0, + infix: !!props.infix, + handler: handler + }; + + for (var i = 0; i < names.length; ++i) { + _functions[names[i]] = data; + } + + if (type) { + if (htmlBuilder) { + _htmlGroupBuilders[type] = htmlBuilder; + } + + if (mathmlBuilder) { + _mathmlGroupBuilders[type] = mathmlBuilder; + } + } +} +/** + * Use this to register only the HTML and MathML builders for a function (e.g. + * if the function's ParseNode is generated in Parser.js rather than via a + * stand-alone handler provided to `defineFunction`). + */ + +function defineFunctionBuilders(_ref2) { + var type = _ref2.type, + htmlBuilder = _ref2.htmlBuilder, + mathmlBuilder = _ref2.mathmlBuilder; + defineFunction({ + type: type, + names: [], + props: { + numArgs: 0 + }, + handler: function handler() { + throw new Error('Should never be called.'); + }, + htmlBuilder: htmlBuilder, + mathmlBuilder: mathmlBuilder + }); +} // Since the corresponding buildHTML/buildMathML function expects a +// list of elements, we normalize for different kinds of arguments + +var defineFunction_ordargument = function ordargument(arg) { + var node = checkNodeType(arg, "ordgroup"); + return node ? node.body : [arg]; +}; +// CONCATENATED MODULE: ./src/buildHTML.js +/** + * This file does the main work of building a domTree structure from a parse + * tree. The entry point is the `buildHTML` function, which takes a parse tree. + * Then, the buildExpression, buildGroup, and various groupBuilders functions + * are called, to produce a final HTML tree. + */ + + + + + + + + + +var buildHTML_makeSpan = buildCommon.makeSpan; // Binary atoms (first class `mbin`) change into ordinary atoms (`mord`) +// depending on their surroundings. See TeXbook pg. 442-446, Rules 5 and 6, +// and the text before Rule 19. + +var binLeftCanceller = ["leftmost", "mbin", "mopen", "mrel", "mop", "mpunct"]; +var binRightCanceller = ["rightmost", "mrel", "mclose", "mpunct"]; +var styleMap = { + "display": src_Style.DISPLAY, + "text": src_Style.TEXT, + "script": src_Style.SCRIPT, + "scriptscript": src_Style.SCRIPTSCRIPT +}; +var DomEnum = { + mord: "mord", + mop: "mop", + mbin: "mbin", + mrel: "mrel", + mopen: "mopen", + mclose: "mclose", + mpunct: "mpunct", + minner: "minner" +}; + +/** + * Take a list of nodes, build them in order, and return a list of the built + * nodes. documentFragments are flattened into their contents, so the + * returned list contains no fragments. `isRealGroup` is true if `expression` + * is a real group (no atoms will be added on either side), as opposed to + * a partial group (e.g. one created by \color). `surrounding` is an array + * consisting type of nodes that will be added to the left and right. + */ +var buildHTML_buildExpression = function buildExpression(expression, options, isRealGroup, surrounding) { + if (surrounding === void 0) { + surrounding = [null, null]; + } + + // Parse expressions into `groups`. + var groups = []; + + for (var i = 0; i < expression.length; i++) { + var output = buildHTML_buildGroup(expression[i], options); + + if (output instanceof tree_DocumentFragment) { + var children = output.children; + groups.push.apply(groups, children); + } else { + groups.push(output); + } + } // If `expression` is a partial group, let the parent handle spacings + // to avoid processing groups multiple times. + + + if (!isRealGroup) { + return groups; + } + + var glueOptions = options; + + if (expression.length === 1) { + var node = checkNodeType(expression[0], "sizing") || checkNodeType(expression[0], "styling"); + + if (!node) {// No match. + } else if (node.type === "sizing") { + glueOptions = options.havingSize(node.size); + } else if (node.type === "styling") { + glueOptions = options.havingStyle(styleMap[node.style]); + } + } // Dummy spans for determining spacings between surrounding atoms. + // If `expression` has no atoms on the left or right, class "leftmost" + // or "rightmost", respectively, is used to indicate it. + + + var dummyPrev = buildHTML_makeSpan([surrounding[0] || "leftmost"], [], options); + var dummyNext = buildHTML_makeSpan([surrounding[1] || "rightmost"], [], options); // TODO: These code assumes that a node's math class is the first element + // of its `classes` array. A later cleanup should ensure this, for + // instance by changing the signature of `makeSpan`. + // Before determining what spaces to insert, perform bin cancellation. + // Binary operators change to ordinary symbols in some contexts. + + traverseNonSpaceNodes(groups, function (node, prev) { + var prevType = prev.classes[0]; + var type = node.classes[0]; + + if (prevType === "mbin" && utils.contains(binRightCanceller, type)) { + prev.classes[0] = "mord"; + } else if (type === "mbin" && utils.contains(binLeftCanceller, prevType)) { + node.classes[0] = "mord"; + } + }, { + node: dummyPrev + }, dummyNext); + traverseNonSpaceNodes(groups, function (node, prev) { + var prevType = getTypeOfDomTree(prev); + var type = getTypeOfDomTree(node); // 'mtight' indicates that the node is script or scriptscript style. + + var space = prevType && type ? node.hasClass("mtight") ? tightSpacings[prevType][type] : spacings[prevType][type] : null; + + if (space) { + // Insert glue (spacing) after the `prev`. + return buildCommon.makeGlue(space, glueOptions); + } + }, { + node: dummyPrev + }, dummyNext); + return groups; +}; // Depth-first traverse non-space `nodes`, calling `callback` with the current and +// previous node as arguments, optionally returning a node to insert after the +// previous node. `prev` is an object with the previous node and `insertAfter` +// function to insert after it. `next` is a node that will be added to the right. +// Used for bin cancellation and inserting spacings. + +var traverseNonSpaceNodes = function traverseNonSpaceNodes(nodes, callback, prev, next) { + if (next) { + // temporarily append the right node, if exists + nodes.push(next); + } + + var i = 0; + + for (; i < nodes.length; i++) { + var node = nodes[i]; + var partialGroup = buildHTML_checkPartialGroup(node); + + if (partialGroup) { + // Recursive DFS + // $FlowFixMe: make nodes a $ReadOnlyArray by returning a new array + traverseNonSpaceNodes(partialGroup.children, callback, prev); + continue; + } // Ignore explicit spaces (e.g., \;, \,) when determining what implicit + // spacing should go between atoms of different classes + + + if (node.classes[0] === "mspace") { + continue; + } + + var result = callback(node, prev.node); + + if (result) { + if (prev.insertAfter) { + prev.insertAfter(result); + } else { + // insert at front + nodes.unshift(result); + i++; + } + } + + prev.node = node; + + prev.insertAfter = function (index) { + return function (n) { + nodes.splice(index + 1, 0, n); + i++; + }; + }(i); + } + + if (next) { + nodes.pop(); + } +}; // Check if given node is a partial group, i.e., does not affect spacing around. + + +var buildHTML_checkPartialGroup = function checkPartialGroup(node) { + if (node instanceof tree_DocumentFragment || node instanceof domTree_Anchor) { + return node; + } + + return null; +}; // Return the outermost node of a domTree. + + +var getOutermostNode = function getOutermostNode(node, side) { + var partialGroup = buildHTML_checkPartialGroup(node); + + if (partialGroup) { + var children = partialGroup.children; + + if (children.length) { + if (side === "right") { + return getOutermostNode(children[children.length - 1], "right"); + } else if (side === "left") { + return getOutermostNode(children[0], "left"); + } + } + } + + return node; +}; // Return math atom class (mclass) of a domTree. +// If `side` is given, it will get the type of the outermost node at given side. + + +var getTypeOfDomTree = function getTypeOfDomTree(node, side) { + if (!node) { + return null; + } + + if (side) { + node = getOutermostNode(node, side); + } // This makes a lot of assumptions as to where the type of atom + // appears. We should do a better job of enforcing this. + + + return DomEnum[node.classes[0]] || null; +}; +var makeNullDelimiter = function makeNullDelimiter(options, classes) { + var moreClasses = ["nulldelimiter"].concat(options.baseSizingClasses()); + return buildHTML_makeSpan(classes.concat(moreClasses)); +}; +/** + * buildGroup is the function that takes a group and calls the correct groupType + * function for it. It also handles the interaction of size and style changes + * between parents and children. + */ + +var buildHTML_buildGroup = function buildGroup(group, options, baseOptions) { + if (!group) { + return buildHTML_makeSpan(); + } + + if (_htmlGroupBuilders[group.type]) { + // Call the groupBuilders function + var groupNode = _htmlGroupBuilders[group.type](group, options); // If the size changed between the parent and the current group, account + // for that size difference. + + if (baseOptions && options.size !== baseOptions.size) { + groupNode = buildHTML_makeSpan(options.sizingClasses(baseOptions), [groupNode], options); + var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; + groupNode.height *= multiplier; + groupNode.depth *= multiplier; + } + + return groupNode; + } else { + throw new src_ParseError("Got group of unknown type: '" + group.type + "'"); + } +}; +/** + * Combine an array of HTML DOM nodes (e.g., the output of `buildExpression`) + * into an unbreakable HTML node of class .base, with proper struts to + * guarantee correct vertical extent. `buildHTML` calls this repeatedly to + * make up the entire expression as a sequence of unbreakable units. + */ + +function buildHTMLUnbreakable(children, options) { + // Compute height and depth of this chunk. + var body = buildHTML_makeSpan(["base"], children, options); // Add strut, which ensures that the top of the HTML element falls at + // the height of the expression, and the bottom of the HTML element + // falls at the depth of the expression. + // We used to have separate top and bottom struts, where the bottom strut + // would like to use `vertical-align: top`, but in IE 9 this lowers the + // baseline of the box to the bottom of this strut (instead of staying in + // the normal place) so we use an absolute value for vertical-align instead. + + var strut = buildHTML_makeSpan(["strut"]); + strut.style.height = body.height + body.depth + "em"; + strut.style.verticalAlign = -body.depth + "em"; + body.children.unshift(strut); + return body; +} +/** + * Take an entire parse tree, and build it into an appropriate set of HTML + * nodes. + */ + + +function buildHTML(tree, options) { + // Strip off outer tag wrapper for processing below. + var tag = null; + + if (tree.length === 1 && tree[0].type === "tag") { + tag = tree[0].tag; + tree = tree[0].body; + } // Build the expression contained in the tree + + + var expression = buildHTML_buildExpression(tree, options, true); + var children = []; // Create one base node for each chunk between potential line breaks. + // The TeXBook [p.173] says "A formula will be broken only after a + // relation symbol like $=$ or $<$ or $\rightarrow$, or after a binary + // operation symbol like $+$ or $-$ or $\times$, where the relation or + // binary operation is on the ``outer level'' of the formula (i.e., not + // enclosed in {...} and not part of an \over construction)." + + var parts = []; + + for (var i = 0; i < expression.length; i++) { + parts.push(expression[i]); + + if (expression[i].hasClass("mbin") || expression[i].hasClass("mrel") || expression[i].hasClass("allowbreak")) { + // Put any post-operator glue on same line as operator. + // Watch for \nobreak along the way, and stop at \newline. + var nobreak = false; + + while (i < expression.length - 1 && expression[i + 1].hasClass("mspace") && !expression[i + 1].hasClass("newline")) { + i++; + parts.push(expression[i]); + + if (expression[i].hasClass("nobreak")) { + nobreak = true; + } + } // Don't allow break if \nobreak among the post-operator glue. + + + if (!nobreak) { + children.push(buildHTMLUnbreakable(parts, options)); + parts = []; + } + } else if (expression[i].hasClass("newline")) { + // Write the line except the newline + parts.pop(); + + if (parts.length > 0) { + children.push(buildHTMLUnbreakable(parts, options)); + parts = []; + } // Put the newline at the top level + + + children.push(expression[i]); + } + } + + if (parts.length > 0) { + children.push(buildHTMLUnbreakable(parts, options)); + } // Now, if there was a tag, build it too and append it as a final child. + + + var tagChild; + + if (tag) { + tagChild = buildHTMLUnbreakable(buildHTML_buildExpression(tag, options, true)); + tagChild.classes = ["tag"]; + children.push(tagChild); + } + + var htmlNode = buildHTML_makeSpan(["katex-html"], children); + htmlNode.setAttribute("aria-hidden", "true"); // Adjust the strut of the tag to be the maximum height of all children + // (the height of the enclosing htmlNode) for proper vertical alignment. + + if (tagChild) { + var strut = tagChild.children[0]; + strut.style.height = htmlNode.height + htmlNode.depth + "em"; + strut.style.verticalAlign = -htmlNode.depth + "em"; + } + + return htmlNode; +} +// CONCATENATED MODULE: ./src/mathMLTree.js +/** + * These objects store data about MathML nodes. This is the MathML equivalent + * of the types in domTree.js. Since MathML handles its own rendering, and + * since we're mainly using MathML to improve accessibility, we don't manage + * any of the styling state that the plain DOM nodes do. + * + * The `toNode` and `toMarkup` functions work simlarly to how they do in + * domTree.js, creating namespaced DOM nodes and HTML text markup respectively. + */ + + +function newDocumentFragment(children) { + return new tree_DocumentFragment(children); +} +/** + * This node represents a general purpose MathML node of any type. The + * constructor requires the type of node to create (for example, `"mo"` or + * `"mspace"`, corresponding to `` and `` tags). + */ + +var mathMLTree_MathNode = +/*#__PURE__*/ +function () { + function MathNode(type, children) { + this.type = void 0; + this.attributes = void 0; + this.children = void 0; + this.type = type; + this.attributes = {}; + this.children = children || []; + } + /** + * Sets an attribute on a MathML node. MathML depends on attributes to convey a + * semantic content, so this is used heavily. + */ + + + var _proto = MathNode.prototype; + + _proto.setAttribute = function setAttribute(name, value) { + this.attributes[name] = value; + } + /** + * Gets an attribute on a MathML node. + */ + ; + + _proto.getAttribute = function getAttribute(name) { + return this.attributes[name]; + } + /** + * Converts the math node into a MathML-namespaced DOM element. + */ + ; + + _proto.toNode = function toNode() { + var node = document.createElementNS("http://www.w3.org/1998/Math/MathML", this.type); + + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } + + for (var i = 0; i < this.children.length; i++) { + node.appendChild(this.children[i].toNode()); + } + + return node; + } + /** + * Converts the math node into an HTML markup string. + */ + ; + + _proto.toMarkup = function toMarkup() { + var markup = "<" + this.type; // Add the attributes + + for (var attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + markup += " " + attr + "=\""; + markup += utils.escape(this.attributes[attr]); + markup += "\""; + } + } + + markup += ">"; + + for (var i = 0; i < this.children.length; i++) { + markup += this.children[i].toMarkup(); + } + + markup += ""; + return markup; + } + /** + * Converts the math node into a string, similar to innerText, but escaped. + */ + ; + + _proto.toText = function toText() { + return this.children.map(function (child) { + return child.toText(); + }).join(""); + }; + + return MathNode; +}(); +/** + * This node represents a piece of text. + */ + +var mathMLTree_TextNode = +/*#__PURE__*/ +function () { + function TextNode(text) { + this.text = void 0; + this.text = text; + } + /** + * Converts the text node into a DOM text node. + */ + + + var _proto2 = TextNode.prototype; + + _proto2.toNode = function toNode() { + return document.createTextNode(this.text); + } + /** + * Converts the text node into escaped HTML markup + * (representing the text itself). + */ + ; + + _proto2.toMarkup = function toMarkup() { + return utils.escape(this.toText()); + } + /** + * Converts the text node into a string + * (representing the text iteself). + */ + ; + + _proto2.toText = function toText() { + return this.text; + }; + + return TextNode; +}(); +/** + * This node represents a space, but may render as or as text, + * depending on the width. + */ + +var SpaceNode = +/*#__PURE__*/ +function () { + /** + * Create a Space node with width given in CSS ems. + */ + function SpaceNode(width) { + this.width = void 0; + this.character = void 0; + this.width = width; // See https://www.w3.org/TR/2000/WD-MathML2-20000328/chapter6.html + // for a table of space-like characters. We use Unicode + // representations instead of &LongNames; as it's not clear how to + // make the latter via document.createTextNode. + + if (width >= 0.05555 && width <= 0.05556) { + this.character = "\u200A"; //   + } else if (width >= 0.1666 && width <= 0.1667) { + this.character = "\u2009"; //   + } else if (width >= 0.2222 && width <= 0.2223) { + this.character = "\u2005"; //   + } else if (width >= 0.2777 && width <= 0.2778) { + this.character = "\u2005\u200A"; //    + } else if (width >= -0.05556 && width <= -0.05555) { + this.character = "\u200A\u2063"; // ​ + } else if (width >= -0.1667 && width <= -0.1666) { + this.character = "\u2009\u2063"; // ​ + } else if (width >= -0.2223 && width <= -0.2222) { + this.character = "\u205F\u2063"; // ​ + } else if (width >= -0.2778 && width <= -0.2777) { + this.character = "\u2005\u2063"; // ​ + } else { + this.character = null; + } + } + /** + * Converts the math node into a MathML-namespaced DOM element. + */ + + + var _proto3 = SpaceNode.prototype; + + _proto3.toNode = function toNode() { + if (this.character) { + return document.createTextNode(this.character); + } else { + var node = document.createElementNS("http://www.w3.org/1998/Math/MathML", "mspace"); + node.setAttribute("width", this.width + "em"); + return node; + } + } + /** + * Converts the math node into an HTML markup string. + */ + ; + + _proto3.toMarkup = function toMarkup() { + if (this.character) { + return "" + this.character + ""; + } else { + return ""; + } + } + /** + * Converts the math node into a string, similar to innerText. + */ + ; + + _proto3.toText = function toText() { + if (this.character) { + return this.character; + } else { + return " "; + } + }; + + return SpaceNode; +}(); + +/* harmony default export */ var mathMLTree = ({ + MathNode: mathMLTree_MathNode, + TextNode: mathMLTree_TextNode, + SpaceNode: SpaceNode, + newDocumentFragment: newDocumentFragment +}); +// CONCATENATED MODULE: ./src/buildMathML.js +/** + * This file converts a parse tree into a cooresponding MathML tree. The main + * entry point is the `buildMathML` function, which takes a parse tree from the + * parser. + */ + + + + + + + + + +/** + * Takes a symbol and converts it into a MathML text node after performing + * optional replacement from symbols.js. + */ +var buildMathML_makeText = function makeText(text, mode, options) { + if (src_symbols[mode][text] && src_symbols[mode][text].replace && text.charCodeAt(0) !== 0xD835 && !(ligatures.hasOwnProperty(text) && options && (options.fontFamily && options.fontFamily.substr(4, 2) === "tt" || options.font && options.font.substr(4, 2) === "tt"))) { + text = src_symbols[mode][text].replace; + } + + return new mathMLTree.TextNode(text); +}; +/** + * Wrap the given array of nodes in an node if needed, i.e., + * unless the array has length 1. Always returns a single node. + */ + +var buildMathML_makeRow = function makeRow(body) { + if (body.length === 1) { + return body[0]; + } else { + return new mathMLTree.MathNode("mrow", body); + } +}; +/** + * Returns the math variant as a string or null if none is required. + */ + +var buildMathML_getVariant = function getVariant(group, options) { + // Handle \text... font specifiers as best we can. + // MathML has a limited list of allowable mathvariant specifiers; see + // https://www.w3.org/TR/MathML3/chapter3.html#presm.commatt + if (options.fontFamily === "texttt") { + return "monospace"; + } else if (options.fontFamily === "textsf") { + if (options.fontShape === "textit" && options.fontWeight === "textbf") { + return "sans-serif-bold-italic"; + } else if (options.fontShape === "textit") { + return "sans-serif-italic"; + } else if (options.fontWeight === "textbf") { + return "bold-sans-serif"; + } else { + return "sans-serif"; + } + } else if (options.fontShape === "textit" && options.fontWeight === "textbf") { + return "bold-italic"; + } else if (options.fontShape === "textit") { + return "italic"; + } else if (options.fontWeight === "textbf") { + return "bold"; + } + + var font = options.font; + + if (!font || font === "mathnormal") { + return null; + } + + var mode = group.mode; + + if (font === "mathit") { + return "italic"; + } else if (font === "boldsymbol") { + return "bold-italic"; + } else if (font === "mathbf") { + return "bold"; + } else if (font === "mathbb") { + return "double-struck"; + } else if (font === "mathfrak") { + return "fraktur"; + } else if (font === "mathscr" || font === "mathcal") { + // MathML makes no distinction between script and caligrahpic + return "script"; + } else if (font === "mathsf") { + return "sans-serif"; + } else if (font === "mathtt") { + return "monospace"; + } + + var text = group.text; + + if (utils.contains(["\\imath", "\\jmath"], text)) { + return null; + } + + if (src_symbols[mode][text] && src_symbols[mode][text].replace) { + text = src_symbols[mode][text].replace; + } + + var fontName = buildCommon.fontMap[font].fontName; + + if (getCharacterMetrics(text, fontName, mode)) { + return buildCommon.fontMap[font].variant; + } + + return null; +}; +/** + * Takes a list of nodes, builds them, and returns a list of the generated + * MathML nodes. Also combine consecutive outputs into a single + * tag. + */ + +var buildMathML_buildExpression = function buildExpression(expression, options, isOrdgroup) { + if (expression.length === 1) { + var group = buildMathML_buildGroup(expression[0], options); + + if (isOrdgroup && group instanceof mathMLTree_MathNode && group.type === "mo") { + // When TeX writers want to suppress spacing on an operator, + // they often put the operator by itself inside braces. + group.setAttribute("lspace", "0em"); + group.setAttribute("rspace", "0em"); + } + + return [group]; + } + + var groups = []; + var lastGroup; + + for (var i = 0; i < expression.length; i++) { + var _group = buildMathML_buildGroup(expression[i], options); + + if (_group instanceof mathMLTree_MathNode && lastGroup instanceof mathMLTree_MathNode) { + // Concatenate adjacent s + if (_group.type === 'mtext' && lastGroup.type === 'mtext' && _group.getAttribute('mathvariant') === lastGroup.getAttribute('mathvariant')) { + var _lastGroup$children; + + (_lastGroup$children = lastGroup.children).push.apply(_lastGroup$children, _group.children); + + continue; // Concatenate adjacent s + } else if (_group.type === 'mn' && lastGroup.type === 'mn') { + var _lastGroup$children2; + + (_lastGroup$children2 = lastGroup.children).push.apply(_lastGroup$children2, _group.children); + + continue; // Concatenate ... followed by . + } else if (_group.type === 'mi' && _group.children.length === 1 && lastGroup.type === 'mn') { + var child = _group.children[0]; + + if (child instanceof mathMLTree_TextNode && child.text === '.') { + var _lastGroup$children3; + + (_lastGroup$children3 = lastGroup.children).push.apply(_lastGroup$children3, _group.children); + + continue; + } + } else if (lastGroup.type === 'mi' && lastGroup.children.length === 1) { + var lastChild = lastGroup.children[0]; + + if (lastChild instanceof mathMLTree_TextNode && lastChild.text === "\u0338" && (_group.type === 'mo' || _group.type === 'mi' || _group.type === 'mn')) { + var _child = _group.children[0]; + + if (_child instanceof mathMLTree_TextNode && _child.text.length > 0) { + // Overlay with combining character long solidus + _child.text = _child.text.slice(0, 1) + "\u0338" + _child.text.slice(1); + groups.pop(); + } + } + } + } + + groups.push(_group); + lastGroup = _group; + } + + return groups; +}; +/** + * Equivalent to buildExpression, but wraps the elements in an + * if there's more than one. Returns a single node instead of an array. + */ + +var buildExpressionRow = function buildExpressionRow(expression, options, isOrdgroup) { + return buildMathML_makeRow(buildMathML_buildExpression(expression, options, isOrdgroup)); +}; +/** + * Takes a group from the parser and calls the appropriate groupBuilders function + * on it to produce a MathML node. + */ + +var buildMathML_buildGroup = function buildGroup(group, options) { + if (!group) { + return new mathMLTree.MathNode("mrow"); + } + + if (_mathmlGroupBuilders[group.type]) { + // Call the groupBuilders function + var result = _mathmlGroupBuilders[group.type](group, options); + return result; + } else { + throw new src_ParseError("Got group of unknown type: '" + group.type + "'"); + } +}; +/** + * Takes a full parse tree and settings and builds a MathML representation of + * it. In particular, we put the elements from building the parse tree into a + * tag so we can also include that TeX source as an annotation. + * + * Note that we actually return a domTree element with a `` inside it so + * we can do appropriate styling. + */ + +function buildMathML(tree, texExpression, options, forMathmlOnly) { + var expression = buildMathML_buildExpression(tree, options); // Wrap up the expression in an mrow so it is presented in the semantics + // tag correctly, unless it's a single or . + + var wrapper; + + if (expression.length === 1 && expression[0] instanceof mathMLTree_MathNode && utils.contains(["mrow", "mtable"], expression[0].type)) { + wrapper = expression[0]; + } else { + wrapper = new mathMLTree.MathNode("mrow", expression); + } // Build a TeX annotation of the source + + + var annotation = new mathMLTree.MathNode("annotation", [new mathMLTree.TextNode(texExpression)]); + annotation.setAttribute("encoding", "application/x-tex"); + var semantics = new mathMLTree.MathNode("semantics", [wrapper, annotation]); + var math = new mathMLTree.MathNode("math", [semantics]); + math.setAttribute("xmlns", "http://www.w3.org/1998/Math/MathML"); // You can't style nodes, so we wrap the node in a span. + // NOTE: The span class is not typed to have nodes as children, and + // we don't want to make the children type more generic since the children + // of span are expected to have more fields in `buildHtml` contexts. + + var wrapperClass = forMathmlOnly ? "katex" : "katex-mathml"; // $FlowFixMe + + return buildCommon.makeSpan([wrapperClass], [math]); +} +// CONCATENATED MODULE: ./src/buildTree.js + + + + + + + +var buildTree_optionsFromSettings = function optionsFromSettings(settings) { + return new src_Options({ + style: settings.displayMode ? src_Style.DISPLAY : src_Style.TEXT, + maxSize: settings.maxSize, + minRuleThickness: settings.minRuleThickness + }); +}; + +var buildTree_displayWrap = function displayWrap(node, settings) { + if (settings.displayMode) { + var classes = ["katex-display"]; + + if (settings.leqno) { + classes.push("leqno"); + } + + if (settings.fleqn) { + classes.push("fleqn"); + } + + node = buildCommon.makeSpan(classes, [node]); + } + + return node; +}; + +var buildTree_buildTree = function buildTree(tree, expression, settings) { + var options = buildTree_optionsFromSettings(settings); + var katexNode; + + if (settings.output === "mathml") { + return buildMathML(tree, expression, options, true); + } else if (settings.output === "html") { + var htmlNode = buildHTML(tree, options); + katexNode = buildCommon.makeSpan(["katex"], [htmlNode]); + } else { + var mathMLNode = buildMathML(tree, expression, options, false); + + var _htmlNode = buildHTML(tree, options); + + katexNode = buildCommon.makeSpan(["katex"], [mathMLNode, _htmlNode]); + } + + return buildTree_displayWrap(katexNode, settings); +}; +var buildTree_buildHTMLTree = function buildHTMLTree(tree, expression, settings) { + var options = buildTree_optionsFromSettings(settings); + var htmlNode = buildHTML(tree, options); + var katexNode = buildCommon.makeSpan(["katex"], [htmlNode]); + return buildTree_displayWrap(katexNode, settings); +}; +/* harmony default export */ var src_buildTree = (buildTree_buildTree); +// CONCATENATED MODULE: ./src/stretchy.js +/** + * This file provides support to buildMathML.js and buildHTML.js + * for stretchy wide elements rendered from SVG files + * and other CSS trickery. + */ + + + + +var stretchyCodePoint = { + widehat: "^", + widecheck: "ˇ", + widetilde: "~", + utilde: "~", + overleftarrow: "\u2190", + underleftarrow: "\u2190", + xleftarrow: "\u2190", + overrightarrow: "\u2192", + underrightarrow: "\u2192", + xrightarrow: "\u2192", + underbrace: "\u23DF", + overbrace: "\u23DE", + overgroup: "\u23E0", + undergroup: "\u23E1", + overleftrightarrow: "\u2194", + underleftrightarrow: "\u2194", + xleftrightarrow: "\u2194", + Overrightarrow: "\u21D2", + xRightarrow: "\u21D2", + overleftharpoon: "\u21BC", + xleftharpoonup: "\u21BC", + overrightharpoon: "\u21C0", + xrightharpoonup: "\u21C0", + xLeftarrow: "\u21D0", + xLeftrightarrow: "\u21D4", + xhookleftarrow: "\u21A9", + xhookrightarrow: "\u21AA", + xmapsto: "\u21A6", + xrightharpoondown: "\u21C1", + xleftharpoondown: "\u21BD", + xrightleftharpoons: "\u21CC", + xleftrightharpoons: "\u21CB", + xtwoheadleftarrow: "\u219E", + xtwoheadrightarrow: "\u21A0", + xlongequal: "=", + xtofrom: "\u21C4", + xrightleftarrows: "\u21C4", + xrightequilibrium: "\u21CC", + // Not a perfect match. + xleftequilibrium: "\u21CB" // None better available. + +}; + +var stretchy_mathMLnode = function mathMLnode(label) { + var node = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(stretchyCodePoint[label.substr(1)])]); + node.setAttribute("stretchy", "true"); + return node; +}; // Many of the KaTeX SVG images have been adapted from glyphs in KaTeX fonts. +// Copyright (c) 2009-2010, Design Science, Inc. () +// Copyright (c) 2014-2017 Khan Academy () +// Licensed under the SIL Open Font License, Version 1.1. +// See \nhttp://scripts.sil.org/OFL +// Very Long SVGs +// Many of the KaTeX stretchy wide elements use a long SVG image and an +// overflow: hidden tactic to achieve a stretchy image while avoiding +// distortion of arrowheads or brace corners. +// The SVG typically contains a very long (400 em) arrow. +// The SVG is in a container span that has overflow: hidden, so the span +// acts like a window that exposes only part of the SVG. +// The SVG always has a longer, thinner aspect ratio than the container span. +// After the SVG fills 100% of the height of the container span, +// there is a long arrow shaft left over. That left-over shaft is not shown. +// Instead, it is sliced off because the span's CSS has overflow: hidden. +// Thus, the reader sees an arrow that matches the subject matter width +// without distortion. +// Some functions, such as \cancel, need to vary their aspect ratio. These +// functions do not get the overflow SVG treatment. +// Second Brush Stroke +// Low resolution monitors struggle to display images in fine detail. +// So browsers apply anti-aliasing. A long straight arrow shaft therefore +// will sometimes appear as if it has a blurred edge. +// To mitigate this, these SVG files contain a second "brush-stroke" on the +// arrow shafts. That is, a second long thin rectangular SVG path has been +// written directly on top of each arrow shaft. This reinforcement causes +// some of the screen pixels to display as black instead of the anti-aliased +// gray pixel that a single path would generate. So we get arrow shafts +// whose edges appear to be sharper. +// In the katexImagesData object just below, the dimensions all +// correspond to path geometry inside the relevant SVG. +// For example, \overrightarrow uses the same arrowhead as glyph U+2192 +// from the KaTeX Main font. The scaling factor is 1000. +// That is, inside the font, that arrowhead is 522 units tall, which +// corresponds to 0.522 em inside the document. + + +var katexImagesData = { + // path(s), minWidth, height, align + overrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"], + overleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"], + underrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"], + underleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"], + xrightarrow: [["rightarrow"], 1.469, 522, "xMaxYMin"], + xleftarrow: [["leftarrow"], 1.469, 522, "xMinYMin"], + Overrightarrow: [["doublerightarrow"], 0.888, 560, "xMaxYMin"], + xRightarrow: [["doublerightarrow"], 1.526, 560, "xMaxYMin"], + xLeftarrow: [["doubleleftarrow"], 1.526, 560, "xMinYMin"], + overleftharpoon: [["leftharpoon"], 0.888, 522, "xMinYMin"], + xleftharpoonup: [["leftharpoon"], 0.888, 522, "xMinYMin"], + xleftharpoondown: [["leftharpoondown"], 0.888, 522, "xMinYMin"], + overrightharpoon: [["rightharpoon"], 0.888, 522, "xMaxYMin"], + xrightharpoonup: [["rightharpoon"], 0.888, 522, "xMaxYMin"], + xrightharpoondown: [["rightharpoondown"], 0.888, 522, "xMaxYMin"], + xlongequal: [["longequal"], 0.888, 334, "xMinYMin"], + xtwoheadleftarrow: [["twoheadleftarrow"], 0.888, 334, "xMinYMin"], + xtwoheadrightarrow: [["twoheadrightarrow"], 0.888, 334, "xMaxYMin"], + overleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522], + overbrace: [["leftbrace", "midbrace", "rightbrace"], 1.6, 548], + underbrace: [["leftbraceunder", "midbraceunder", "rightbraceunder"], 1.6, 548], + underleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522], + xleftrightarrow: [["leftarrow", "rightarrow"], 1.75, 522], + xLeftrightarrow: [["doubleleftarrow", "doublerightarrow"], 1.75, 560], + xrightleftharpoons: [["leftharpoondownplus", "rightharpoonplus"], 1.75, 716], + xleftrightharpoons: [["leftharpoonplus", "rightharpoondownplus"], 1.75, 716], + xhookleftarrow: [["leftarrow", "righthook"], 1.08, 522], + xhookrightarrow: [["lefthook", "rightarrow"], 1.08, 522], + overlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522], + underlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522], + overgroup: [["leftgroup", "rightgroup"], 0.888, 342], + undergroup: [["leftgroupunder", "rightgroupunder"], 0.888, 342], + xmapsto: [["leftmapsto", "rightarrow"], 1.5, 522], + xtofrom: [["leftToFrom", "rightToFrom"], 1.75, 528], + // The next three arrows are from the mhchem package. + // In mhchem.sty, min-length is 2.0em. But these arrows might appear in the + // document as \xrightarrow or \xrightleftharpoons. Those have + // min-length = 1.75em, so we set min-length on these next three to match. + xrightleftarrows: [["baraboveleftarrow", "rightarrowabovebar"], 1.75, 901], + xrightequilibrium: [["baraboveshortleftharpoon", "rightharpoonaboveshortbar"], 1.75, 716], + xleftequilibrium: [["shortbaraboveleftharpoon", "shortrightharpoonabovebar"], 1.75, 716] +}; + +var groupLength = function groupLength(arg) { + if (arg.type === "ordgroup") { + return arg.body.length; + } else { + return 1; + } +}; + +var stretchy_svgSpan = function svgSpan(group, options) { + // Create a span with inline SVG for the element. + function buildSvgSpan_() { + var viewBoxWidth = 400000; // default + + var label = group.label.substr(1); + + if (utils.contains(["widehat", "widecheck", "widetilde", "utilde"], label)) { + // Each type in the `if` statement corresponds to one of the ParseNode + // types below. This narrowing is required to access `grp.base`. + var grp = group; // There are four SVG images available for each function. + // Choose a taller image when there are more characters. + + var numChars = groupLength(grp.base); + var viewBoxHeight; + var pathName; + + var _height; + + if (numChars > 5) { + if (label === "widehat" || label === "widecheck") { + viewBoxHeight = 420; + viewBoxWidth = 2364; + _height = 0.42; + pathName = label + "4"; + } else { + viewBoxHeight = 312; + viewBoxWidth = 2340; + _height = 0.34; + pathName = "tilde4"; + } + } else { + var imgIndex = [1, 1, 2, 2, 3, 3][numChars]; + + if (label === "widehat" || label === "widecheck") { + viewBoxWidth = [0, 1062, 2364, 2364, 2364][imgIndex]; + viewBoxHeight = [0, 239, 300, 360, 420][imgIndex]; + _height = [0, 0.24, 0.3, 0.3, 0.36, 0.42][imgIndex]; + pathName = label + imgIndex; + } else { + viewBoxWidth = [0, 600, 1033, 2339, 2340][imgIndex]; + viewBoxHeight = [0, 260, 286, 306, 312][imgIndex]; + _height = [0, 0.26, 0.286, 0.3, 0.306, 0.34][imgIndex]; + pathName = "tilde" + imgIndex; + } + } + + var path = new domTree_PathNode(pathName); + var svgNode = new SvgNode([path], { + "width": "100%", + "height": _height + "em", + "viewBox": "0 0 " + viewBoxWidth + " " + viewBoxHeight, + "preserveAspectRatio": "none" + }); + return { + span: buildCommon.makeSvgSpan([], [svgNode], options), + minWidth: 0, + height: _height + }; + } else { + var spans = []; + var data = katexImagesData[label]; + var paths = data[0], + _minWidth = data[1], + _viewBoxHeight = data[2]; + + var _height2 = _viewBoxHeight / 1000; + + var numSvgChildren = paths.length; + var widthClasses; + var aligns; + + if (numSvgChildren === 1) { + // $FlowFixMe: All these cases must be of the 4-tuple type. + var align1 = data[3]; + widthClasses = ["hide-tail"]; + aligns = [align1]; + } else if (numSvgChildren === 2) { + widthClasses = ["halfarrow-left", "halfarrow-right"]; + aligns = ["xMinYMin", "xMaxYMin"]; + } else if (numSvgChildren === 3) { + widthClasses = ["brace-left", "brace-center", "brace-right"]; + aligns = ["xMinYMin", "xMidYMin", "xMaxYMin"]; + } else { + throw new Error("Correct katexImagesData or update code here to support\n " + numSvgChildren + " children."); + } + + for (var i = 0; i < numSvgChildren; i++) { + var _path = new domTree_PathNode(paths[i]); + + var _svgNode = new SvgNode([_path], { + "width": "400em", + "height": _height2 + "em", + "viewBox": "0 0 " + viewBoxWidth + " " + _viewBoxHeight, + "preserveAspectRatio": aligns[i] + " slice" + }); + + var _span = buildCommon.makeSvgSpan([widthClasses[i]], [_svgNode], options); + + if (numSvgChildren === 1) { + return { + span: _span, + minWidth: _minWidth, + height: _height2 + }; + } else { + _span.style.height = _height2 + "em"; + spans.push(_span); + } + } + + return { + span: buildCommon.makeSpan(["stretchy"], spans, options), + minWidth: _minWidth, + height: _height2 + }; + } + } // buildSvgSpan_() + + + var _buildSvgSpan_ = buildSvgSpan_(), + span = _buildSvgSpan_.span, + minWidth = _buildSvgSpan_.minWidth, + height = _buildSvgSpan_.height; // Note that we are returning span.depth = 0. + // Any adjustments relative to the baseline must be done in buildHTML. + + + span.height = height; + span.style.height = height + "em"; + + if (minWidth > 0) { + span.style.minWidth = minWidth + "em"; + } + + return span; +}; + +var stretchy_encloseSpan = function encloseSpan(inner, label, pad, options) { + // Return an image span for \cancel, \bcancel, \xcancel, or \fbox + var img; + var totalHeight = inner.height + inner.depth + 2 * pad; + + if (/fbox|color/.test(label)) { + img = buildCommon.makeSpan(["stretchy", label], [], options); + + if (label === "fbox") { + var color = options.color && options.getColor(); + + if (color) { + img.style.borderColor = color; + } + } + } else { + // \cancel, \bcancel, or \xcancel + // Since \cancel's SVG is inline and it omits the viewBox attribute, + // its stroke-width will not vary with span area. + var lines = []; + + if (/^[bx]cancel$/.test(label)) { + lines.push(new LineNode({ + "x1": "0", + "y1": "0", + "x2": "100%", + "y2": "100%", + "stroke-width": "0.046em" + })); + } + + if (/^x?cancel$/.test(label)) { + lines.push(new LineNode({ + "x1": "0", + "y1": "100%", + "x2": "100%", + "y2": "0", + "stroke-width": "0.046em" + })); + } + + var svgNode = new SvgNode(lines, { + "width": "100%", + "height": totalHeight + "em" + }); + img = buildCommon.makeSvgSpan([], [svgNode], options); + } + + img.height = totalHeight; + img.style.height = totalHeight + "em"; + return img; +}; + +/* harmony default export */ var stretchy = ({ + encloseSpan: stretchy_encloseSpan, + mathMLnode: stretchy_mathMLnode, + svgSpan: stretchy_svgSpan +}); +// CONCATENATED MODULE: ./src/functions/accent.js + + + + + + + + + +// NOTE: Unlike most `htmlBuilder`s, this one handles not only "accent", but +var accent_htmlBuilder = function htmlBuilder(grp, options) { + // Accents are handled in the TeXbook pg. 443, rule 12. + var base; + var group; + var supSub = checkNodeType(grp, "supsub"); + var supSubGroup; + + if (supSub) { + // If our base is a character box, and we have superscripts and + // subscripts, the supsub will defer to us. In particular, we want + // to attach the superscripts and subscripts to the inner body (so + // that the position of the superscripts and subscripts won't be + // affected by the height of the accent). We accomplish this by + // sticking the base of the accent into the base of the supsub, and + // rendering that, while keeping track of where the accent is. + // The real accent group is the base of the supsub group + group = assertNodeType(supSub.base, "accent"); // The character box is the base of the accent group + + base = group.base; // Stick the character box into the base of the supsub group + + supSub.base = base; // Rerender the supsub group with its new base, and store that + // result. + + supSubGroup = assertSpan(buildHTML_buildGroup(supSub, options)); // reset original base + + supSub.base = group; + } else { + group = assertNodeType(grp, "accent"); + base = group.base; + } // Build the base group + + + var body = buildHTML_buildGroup(base, options.havingCrampedStyle()); // Does the accent need to shift for the skew of a character? + + var mustShift = group.isShifty && utils.isCharacterBox(base); // Calculate the skew of the accent. This is based on the line "If the + // nucleus is not a single character, let s = 0; otherwise set s to the + // kern amount for the nucleus followed by the \skewchar of its font." + // Note that our skew metrics are just the kern between each character + // and the skewchar. + + var skew = 0; + + if (mustShift) { + // If the base is a character box, then we want the skew of the + // innermost character. To do that, we find the innermost character: + var baseChar = utils.getBaseElem(base); // Then, we render its group to get the symbol inside it + + var baseGroup = buildHTML_buildGroup(baseChar, options.havingCrampedStyle()); // Finally, we pull the skew off of the symbol. + + skew = assertSymbolDomNode(baseGroup).skew; // Note that we now throw away baseGroup, because the layers we + // removed with getBaseElem might contain things like \color which + // we can't get rid of. + // TODO(emily): Find a better way to get the skew + } // calculate the amount of space between the body and the accent + + + var clearance = Math.min(body.height, options.fontMetrics().xHeight); // Build the accent + + var accentBody; + + if (!group.isStretchy) { + var accent; + var width; + + if (group.label === "\\vec") { + // Before version 0.9, \vec used the combining font glyph U+20D7. + // But browsers, especially Safari, are not consistent in how they + // render combining characters when not preceded by a character. + // So now we use an SVG. + // If Safari reforms, we should consider reverting to the glyph. + accent = buildCommon.staticSvg("vec", options); + width = buildCommon.svgData.vec[1]; + } else { + accent = buildCommon.makeOrd({ + mode: group.mode, + text: group.label + }, options, "textord"); + accent = assertSymbolDomNode(accent); // Remove the italic correction of the accent, because it only serves to + // shift the accent over to a place we don't want. + + accent.italic = 0; + width = accent.width; + } + + accentBody = buildCommon.makeSpan(["accent-body"], [accent]); // "Full" accents expand the width of the resulting symbol to be + // at least the width of the accent, and overlap directly onto the + // character without any vertical offset. + + var accentFull = group.label === "\\textcircled"; + + if (accentFull) { + accentBody.classes.push('accent-full'); + clearance = body.height; + } // Shift the accent over by the skew. + + + var left = skew; // CSS defines `.katex .accent .accent-body:not(.accent-full) { width: 0 }` + // so that the accent doesn't contribute to the bounding box. + // We need to shift the character by its width (effectively half + // its width) to compensate. + + if (!accentFull) { + left -= width / 2; + } + + accentBody.style.left = left + "em"; // \textcircled uses the \bigcirc glyph, so it needs some + // vertical adjustment to match LaTeX. + + if (group.label === "\\textcircled") { + accentBody.style.top = ".2em"; + } + + accentBody = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: body + }, { + type: "kern", + size: -clearance + }, { + type: "elem", + elem: accentBody + }] + }, options); + } else { + accentBody = stretchy.svgSpan(group, options); + accentBody = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: body + }, { + type: "elem", + elem: accentBody, + wrapperClasses: ["svg-align"], + wrapperStyle: skew > 0 ? { + width: "calc(100% - " + 2 * skew + "em)", + marginLeft: 2 * skew + "em" + } : undefined + }] + }, options); + } + + var accentWrap = buildCommon.makeSpan(["mord", "accent"], [accentBody], options); + + if (supSubGroup) { + // Here, we replace the "base" child of the supsub with our newly + // generated accent. + supSubGroup.children[0] = accentWrap; // Since we don't rerun the height calculation after replacing the + // accent, we manually recalculate height. + + supSubGroup.height = Math.max(accentWrap.height, supSubGroup.height); // Accents should always be ords, even when their innards are not. + + supSubGroup.classes[0] = "mord"; + return supSubGroup; + } else { + return accentWrap; + } +}; + +var accent_mathmlBuilder = function mathmlBuilder(group, options) { + var accentNode = group.isStretchy ? stretchy.mathMLnode(group.label) : new mathMLTree.MathNode("mo", [buildMathML_makeText(group.label, group.mode)]); + var node = new mathMLTree.MathNode("mover", [buildMathML_buildGroup(group.base, options), accentNode]); + node.setAttribute("accent", "true"); + return node; +}; + +var NON_STRETCHY_ACCENT_REGEX = new RegExp(["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring"].map(function (accent) { + return "\\" + accent; +}).join("|")); // Accents + +defineFunction({ + type: "accent", + names: ["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring", "\\widecheck", "\\widehat", "\\widetilde", "\\overrightarrow", "\\overleftarrow", "\\Overrightarrow", "\\overleftrightarrow", "\\overgroup", "\\overlinesegment", "\\overleftharpoon", "\\overrightharpoon"], + props: { + numArgs: 1 + }, + handler: function handler(context, args) { + var base = args[0]; + var isStretchy = !NON_STRETCHY_ACCENT_REGEX.test(context.funcName); + var isShifty = !isStretchy || context.funcName === "\\widehat" || context.funcName === "\\widetilde" || context.funcName === "\\widecheck"; + return { + type: "accent", + mode: context.parser.mode, + label: context.funcName, + isStretchy: isStretchy, + isShifty: isShifty, + base: base + }; + }, + htmlBuilder: accent_htmlBuilder, + mathmlBuilder: accent_mathmlBuilder +}); // Text-mode accents + +defineFunction({ + type: "accent", + names: ["\\'", "\\`", "\\^", "\\~", "\\=", "\\u", "\\.", '\\"', "\\r", "\\H", "\\v", "\\textcircled"], + props: { + numArgs: 1, + allowedInText: true, + allowedInMath: false + }, + handler: function handler(context, args) { + var base = args[0]; + return { + type: "accent", + mode: context.parser.mode, + label: context.funcName, + isStretchy: false, + isShifty: true, + base: base + }; + }, + htmlBuilder: accent_htmlBuilder, + mathmlBuilder: accent_mathmlBuilder +}); +// CONCATENATED MODULE: ./src/functions/accentunder.js +// Horizontal overlap functions + + + + + + +defineFunction({ + type: "accentUnder", + names: ["\\underleftarrow", "\\underrightarrow", "\\underleftrightarrow", "\\undergroup", "\\underlinesegment", "\\utilde"], + props: { + numArgs: 1 + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + var base = args[0]; + return { + type: "accentUnder", + mode: parser.mode, + label: funcName, + base: base + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + // Treat under accents much like underlines. + var innerGroup = buildHTML_buildGroup(group.base, options); + var accentBody = stretchy.svgSpan(group, options); + var kern = group.label === "\\utilde" ? 0.12 : 0; // Generate the vlist, with the appropriate kerns + + var vlist = buildCommon.makeVList({ + positionType: "bottom", + positionData: accentBody.height + kern, + children: [{ + type: "elem", + elem: accentBody, + wrapperClasses: ["svg-align"] + }, { + type: "kern", + size: kern + }, { + type: "elem", + elem: innerGroup + }] + }, options); + return buildCommon.makeSpan(["mord", "accentunder"], [vlist], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var accentNode = stretchy.mathMLnode(group.label); + var node = new mathMLTree.MathNode("munder", [buildMathML_buildGroup(group.base, options), accentNode]); + node.setAttribute("accentunder", "true"); + return node; + } +}); +// CONCATENATED MODULE: ./src/functions/arrow.js + + + + + + + +// Helper function +var arrow_paddedNode = function paddedNode(group) { + var node = new mathMLTree.MathNode("mpadded", group ? [group] : []); + node.setAttribute("width", "+0.6em"); + node.setAttribute("lspace", "0.3em"); + return node; +}; // Stretchy arrows with an optional argument + + +defineFunction({ + type: "xArrow", + names: ["\\xleftarrow", "\\xrightarrow", "\\xLeftarrow", "\\xRightarrow", "\\xleftrightarrow", "\\xLeftrightarrow", "\\xhookleftarrow", "\\xhookrightarrow", "\\xmapsto", "\\xrightharpoondown", "\\xrightharpoonup", "\\xleftharpoondown", "\\xleftharpoonup", "\\xrightleftharpoons", "\\xleftrightharpoons", "\\xlongequal", "\\xtwoheadrightarrow", "\\xtwoheadleftarrow", "\\xtofrom", // The next 3 functions are here to support the mhchem extension. + // Direct use of these functions is discouraged and may break someday. + "\\xrightleftarrows", "\\xrightequilibrium", "\\xleftequilibrium"], + props: { + numArgs: 1, + numOptionalArgs: 1 + }, + handler: function handler(_ref, args, optArgs) { + var parser = _ref.parser, + funcName = _ref.funcName; + return { + type: "xArrow", + mode: parser.mode, + label: funcName, + body: args[0], + below: optArgs[0] + }; + }, + // Flow is unable to correctly infer the type of `group`, even though it's + // unamibiguously determined from the passed-in `type` above. + htmlBuilder: function htmlBuilder(group, options) { + var style = options.style; // Build the argument groups in the appropriate style. + // Ref: amsmath.dtx: \hbox{$\scriptstyle\mkern#3mu{#6}\mkern#4mu$}% + // Some groups can return document fragments. Handle those by wrapping + // them in a span. + + var newOptions = options.havingStyle(style.sup()); + var upperGroup = buildCommon.wrapFragment(buildHTML_buildGroup(group.body, newOptions, options), options); + upperGroup.classes.push("x-arrow-pad"); + var lowerGroup; + + if (group.below) { + // Build the lower group + newOptions = options.havingStyle(style.sub()); + lowerGroup = buildCommon.wrapFragment(buildHTML_buildGroup(group.below, newOptions, options), options); + lowerGroup.classes.push("x-arrow-pad"); + } + + var arrowBody = stretchy.svgSpan(group, options); // Re shift: Note that stretchy.svgSpan returned arrowBody.depth = 0. + // The point we want on the math axis is at 0.5 * arrowBody.height. + + var arrowShift = -options.fontMetrics().axisHeight + 0.5 * arrowBody.height; // 2 mu kern. Ref: amsmath.dtx: #7\if0#2\else\mkern#2mu\fi + + var upperShift = -options.fontMetrics().axisHeight - 0.5 * arrowBody.height - 0.111; // 0.111 em = 2 mu + + if (upperGroup.depth > 0.25 || group.label === "\\xleftequilibrium") { + upperShift -= upperGroup.depth; // shift up if depth encroaches + } // Generate the vlist + + + var vlist; + + if (lowerGroup) { + var lowerShift = -options.fontMetrics().axisHeight + lowerGroup.height + 0.5 * arrowBody.height + 0.111; + vlist = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: upperGroup, + shift: upperShift + }, { + type: "elem", + elem: arrowBody, + shift: arrowShift + }, { + type: "elem", + elem: lowerGroup, + shift: lowerShift + }] + }, options); + } else { + vlist = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: upperGroup, + shift: upperShift + }, { + type: "elem", + elem: arrowBody, + shift: arrowShift + }] + }, options); + } // $FlowFixMe: Replace this with passing "svg-align" into makeVList. + + + vlist.children[0].children[0].children[1].classes.push("svg-align"); + return buildCommon.makeSpan(["mrel", "x-arrow"], [vlist], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var arrowNode = stretchy.mathMLnode(group.label); + var node; + + if (group.body) { + var upperNode = arrow_paddedNode(buildMathML_buildGroup(group.body, options)); + + if (group.below) { + var lowerNode = arrow_paddedNode(buildMathML_buildGroup(group.below, options)); + node = new mathMLTree.MathNode("munderover", [arrowNode, lowerNode, upperNode]); + } else { + node = new mathMLTree.MathNode("mover", [arrowNode, upperNode]); + } + } else if (group.below) { + var _lowerNode = arrow_paddedNode(buildMathML_buildGroup(group.below, options)); + + node = new mathMLTree.MathNode("munder", [arrowNode, _lowerNode]); + } else { + // This should never happen. + // Parser.js throws an error if there is no argument. + node = arrow_paddedNode(); + node = new mathMLTree.MathNode("mover", [arrowNode, node]); + } + + return node; + } +}); +// CONCATENATED MODULE: ./src/functions/char.js + + + // \@char is an internal function that takes a grouped decimal argument like +// {123} and converts into symbol with code 123. It is used by the *macro* +// \char defined in macros.js. + +defineFunction({ + type: "textord", + names: ["\\@char"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + var arg = assertNodeType(args[0], "ordgroup"); + var group = arg.body; + var number = ""; + + for (var i = 0; i < group.length; i++) { + var node = assertNodeType(group[i], "textord"); + number += node.text; + } + + var code = parseInt(number); + + if (isNaN(code)) { + throw new src_ParseError("\\@char has non-numeric argument " + number); + } + + return { + type: "textord", + mode: parser.mode, + text: String.fromCharCode(code) + }; + } +}); +// CONCATENATED MODULE: ./src/functions/color.js + + + + + + + +var color_htmlBuilder = function htmlBuilder(group, options) { + var elements = buildHTML_buildExpression(group.body, options.withColor(group.color), false); // \color isn't supposed to affect the type of the elements it contains. + // To accomplish this, we wrap the results in a fragment, so the inner + // elements will be able to directly interact with their neighbors. For + // example, `\color{red}{2 +} 3` has the same spacing as `2 + 3` + + return buildCommon.makeFragment(elements); +}; + +var color_mathmlBuilder = function mathmlBuilder(group, options) { + var inner = buildMathML_buildExpression(group.body, options.withColor(group.color)); + var node = new mathMLTree.MathNode("mstyle", inner); + node.setAttribute("mathcolor", group.color); + return node; +}; + +defineFunction({ + type: "color", + names: ["\\textcolor"], + props: { + numArgs: 2, + allowedInText: true, + greediness: 3, + argTypes: ["color", "original"] + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + var color = assertNodeType(args[0], "color-token").color; + var body = args[1]; + return { + type: "color", + mode: parser.mode, + color: color, + body: defineFunction_ordargument(body) + }; + }, + htmlBuilder: color_htmlBuilder, + mathmlBuilder: color_mathmlBuilder +}); +defineFunction({ + type: "color", + names: ["\\color"], + props: { + numArgs: 1, + allowedInText: true, + greediness: 3, + argTypes: ["color"] + }, + handler: function handler(_ref2, args) { + var parser = _ref2.parser, + breakOnTokenText = _ref2.breakOnTokenText; + var color = assertNodeType(args[0], "color-token").color; // Set macro \current@color in current namespace to store the current + // color, mimicking the behavior of color.sty. + // This is currently used just to correctly color a \right + // that follows a \color command. + + parser.gullet.macros.set("\\current@color", color); // Parse out the implicit body that should be colored. + + var body = parser.parseExpression(true, breakOnTokenText); + return { + type: "color", + mode: parser.mode, + color: color, + body: body + }; + }, + htmlBuilder: color_htmlBuilder, + mathmlBuilder: color_mathmlBuilder +}); +// CONCATENATED MODULE: ./src/functions/cr.js +// Row breaks within tabular environments, and line breaks at top level + + + + + + // \\ is a macro mapping to either \cr or \newline. Because they have the +// same signature, we implement them as one megafunction, with newRow +// indicating whether we're in the \cr case, and newLine indicating whether +// to break the line in the \newline case. + +defineFunction({ + type: "cr", + names: ["\\cr", "\\newline"], + props: { + numArgs: 0, + numOptionalArgs: 1, + argTypes: ["size"], + allowedInText: true + }, + handler: function handler(_ref, args, optArgs) { + var parser = _ref.parser, + funcName = _ref.funcName; + var size = optArgs[0]; + var newRow = funcName === "\\cr"; + var newLine = false; + + if (!newRow) { + if (parser.settings.displayMode && parser.settings.useStrictBehavior("newLineInDisplayMode", "In LaTeX, \\\\ or \\newline " + "does nothing in display mode")) { + newLine = false; + } else { + newLine = true; + } + } + + return { + type: "cr", + mode: parser.mode, + newLine: newLine, + newRow: newRow, + size: size && assertNodeType(size, "size").value + }; + }, + // The following builders are called only at the top level, + // not within tabular/array environments. + htmlBuilder: function htmlBuilder(group, options) { + if (group.newRow) { + throw new src_ParseError("\\cr valid only within a tabular/array environment"); + } + + var span = buildCommon.makeSpan(["mspace"], [], options); + + if (group.newLine) { + span.classes.push("newline"); + + if (group.size) { + span.style.marginTop = units_calculateSize(group.size, options) + "em"; + } + } + + return span; + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mspace"); + + if (group.newLine) { + node.setAttribute("linebreak", "newline"); + + if (group.size) { + node.setAttribute("height", units_calculateSize(group.size, options) + "em"); + } + } + + return node; + } +}); +// CONCATENATED MODULE: ./src/delimiter.js +/** + * This file deals with creating delimiters of various sizes. The TeXbook + * discusses these routines on page 441-442, in the "Another subroutine sets box + * x to a specified variable delimiter" paragraph. + * + * There are three main routines here. `makeSmallDelim` makes a delimiter in the + * normal font, but in either text, script, or scriptscript style. + * `makeLargeDelim` makes a delimiter in textstyle, but in one of the Size1, + * Size2, Size3, or Size4 fonts. `makeStackedDelim` makes a delimiter out of + * smaller pieces that are stacked on top of one another. + * + * The functions take a parameter `center`, which determines if the delimiter + * should be centered around the axis. + * + * Then, there are three exposed functions. `sizedDelim` makes a delimiter in + * one of the given sizes. This is used for things like `\bigl`. + * `customSizedDelim` makes a delimiter with a given total height+depth. It is + * called in places like `\sqrt`. `leftRightDelim` makes an appropriate + * delimiter which surrounds an expression of a given height an depth. It is + * used in `\left` and `\right`. + */ + + + + + + + + + +/** + * Get the metrics for a given symbol and font, after transformation (i.e. + * after following replacement from symbols.js) + */ +var delimiter_getMetrics = function getMetrics(symbol, font, mode) { + var replace = src_symbols.math[symbol] && src_symbols.math[symbol].replace; + var metrics = getCharacterMetrics(replace || symbol, font, mode); + + if (!metrics) { + throw new Error("Unsupported symbol " + symbol + " and font size " + font + "."); + } + + return metrics; +}; +/** + * Puts a delimiter span in a given style, and adds appropriate height, depth, + * and maxFontSizes. + */ + + +var delimiter_styleWrap = function styleWrap(delim, toStyle, options, classes) { + var newOptions = options.havingBaseStyle(toStyle); + var span = buildCommon.makeSpan(classes.concat(newOptions.sizingClasses(options)), [delim], options); + var delimSizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier; + span.height *= delimSizeMultiplier; + span.depth *= delimSizeMultiplier; + span.maxFontSize = newOptions.sizeMultiplier; + return span; +}; + +var centerSpan = function centerSpan(span, options, style) { + var newOptions = options.havingBaseStyle(style); + var shift = (1 - options.sizeMultiplier / newOptions.sizeMultiplier) * options.fontMetrics().axisHeight; + span.classes.push("delimcenter"); + span.style.top = shift + "em"; + span.height -= shift; + span.depth += shift; +}; +/** + * Makes a small delimiter. This is a delimiter that comes in the Main-Regular + * font, but is restyled to either be in textstyle, scriptstyle, or + * scriptscriptstyle. + */ + + +var delimiter_makeSmallDelim = function makeSmallDelim(delim, style, center, options, mode, classes) { + var text = buildCommon.makeSymbol(delim, "Main-Regular", mode, options); + var span = delimiter_styleWrap(text, style, options, classes); + + if (center) { + centerSpan(span, options, style); + } + + return span; +}; +/** + * Builds a symbol in the given font size (note size is an integer) + */ + + +var delimiter_mathrmSize = function mathrmSize(value, size, mode, options) { + return buildCommon.makeSymbol(value, "Size" + size + "-Regular", mode, options); +}; +/** + * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2, + * Size3, or Size4 fonts. It is always rendered in textstyle. + */ + + +var delimiter_makeLargeDelim = function makeLargeDelim(delim, size, center, options, mode, classes) { + var inner = delimiter_mathrmSize(delim, size, mode, options); + var span = delimiter_styleWrap(buildCommon.makeSpan(["delimsizing", "size" + size], [inner], options), src_Style.TEXT, options, classes); + + if (center) { + centerSpan(span, options, src_Style.TEXT); + } + + return span; +}; +/** + * Make an inner span with the given offset and in the given font. This is used + * in `makeStackedDelim` to make the stacking pieces for the delimiter. + */ + + +var delimiter_makeInner = function makeInner(symbol, font, mode) { + var sizeClass; // Apply the correct CSS class to choose the right font. + + if (font === "Size1-Regular") { + sizeClass = "delim-size1"; + } else + /* if (font === "Size4-Regular") */ + { + sizeClass = "delim-size4"; + } + + var inner = buildCommon.makeSpan(["delimsizinginner", sizeClass], [buildCommon.makeSpan([], [buildCommon.makeSymbol(symbol, font, mode)])]); // Since this will be passed into `makeVList` in the end, wrap the element + // in the appropriate tag that VList uses. + + return { + type: "elem", + elem: inner + }; +}; // Helper for makeStackedDelim + + +var lap = { + type: "kern", + size: -0.005 +}; +/** + * Make a stacked delimiter out of a given delimiter, with the total height at + * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook. + */ + +var delimiter_makeStackedDelim = function makeStackedDelim(delim, heightTotal, center, options, mode, classes) { + // There are four parts, the top, an optional middle, a repeated part, and a + // bottom. + var top; + var middle; + var repeat; + var bottom; + top = repeat = bottom = delim; + middle = null; // Also keep track of what font the delimiters are in + + var font = "Size1-Regular"; // We set the parts and font based on the symbol. Note that we use + // '\u23d0' instead of '|' and '\u2016' instead of '\\|' for the + // repeats of the arrows + + if (delim === "\\uparrow") { + repeat = bottom = "\u23D0"; + } else if (delim === "\\Uparrow") { + repeat = bottom = "\u2016"; + } else if (delim === "\\downarrow") { + top = repeat = "\u23D0"; + } else if (delim === "\\Downarrow") { + top = repeat = "\u2016"; + } else if (delim === "\\updownarrow") { + top = "\\uparrow"; + repeat = "\u23D0"; + bottom = "\\downarrow"; + } else if (delim === "\\Updownarrow") { + top = "\\Uparrow"; + repeat = "\u2016"; + bottom = "\\Downarrow"; + } else if (delim === "[" || delim === "\\lbrack") { + top = "\u23A1"; + repeat = "\u23A2"; + bottom = "\u23A3"; + font = "Size4-Regular"; + } else if (delim === "]" || delim === "\\rbrack") { + top = "\u23A4"; + repeat = "\u23A5"; + bottom = "\u23A6"; + font = "Size4-Regular"; + } else if (delim === "\\lfloor" || delim === "\u230A") { + repeat = top = "\u23A2"; + bottom = "\u23A3"; + font = "Size4-Regular"; + } else if (delim === "\\lceil" || delim === "\u2308") { + top = "\u23A1"; + repeat = bottom = "\u23A2"; + font = "Size4-Regular"; + } else if (delim === "\\rfloor" || delim === "\u230B") { + repeat = top = "\u23A5"; + bottom = "\u23A6"; + font = "Size4-Regular"; + } else if (delim === "\\rceil" || delim === "\u2309") { + top = "\u23A4"; + repeat = bottom = "\u23A5"; + font = "Size4-Regular"; + } else if (delim === "(" || delim === "\\lparen") { + top = "\u239B"; + repeat = "\u239C"; + bottom = "\u239D"; + font = "Size4-Regular"; + } else if (delim === ")" || delim === "\\rparen") { + top = "\u239E"; + repeat = "\u239F"; + bottom = "\u23A0"; + font = "Size4-Regular"; + } else if (delim === "\\{" || delim === "\\lbrace") { + top = "\u23A7"; + middle = "\u23A8"; + bottom = "\u23A9"; + repeat = "\u23AA"; + font = "Size4-Regular"; + } else if (delim === "\\}" || delim === "\\rbrace") { + top = "\u23AB"; + middle = "\u23AC"; + bottom = "\u23AD"; + repeat = "\u23AA"; + font = "Size4-Regular"; + } else if (delim === "\\lgroup" || delim === "\u27EE") { + top = "\u23A7"; + bottom = "\u23A9"; + repeat = "\u23AA"; + font = "Size4-Regular"; + } else if (delim === "\\rgroup" || delim === "\u27EF") { + top = "\u23AB"; + bottom = "\u23AD"; + repeat = "\u23AA"; + font = "Size4-Regular"; + } else if (delim === "\\lmoustache" || delim === "\u23B0") { + top = "\u23A7"; + bottom = "\u23AD"; + repeat = "\u23AA"; + font = "Size4-Regular"; + } else if (delim === "\\rmoustache" || delim === "\u23B1") { + top = "\u23AB"; + bottom = "\u23A9"; + repeat = "\u23AA"; + font = "Size4-Regular"; + } // Get the metrics of the four sections + + + var topMetrics = delimiter_getMetrics(top, font, mode); + var topHeightTotal = topMetrics.height + topMetrics.depth; + var repeatMetrics = delimiter_getMetrics(repeat, font, mode); + var repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth; + var bottomMetrics = delimiter_getMetrics(bottom, font, mode); + var bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth; + var middleHeightTotal = 0; + var middleFactor = 1; + + if (middle !== null) { + var middleMetrics = delimiter_getMetrics(middle, font, mode); + middleHeightTotal = middleMetrics.height + middleMetrics.depth; + middleFactor = 2; // repeat symmetrically above and below middle + } // Calcuate the minimal height that the delimiter can have. + // It is at least the size of the top, bottom, and optional middle combined. + + + var minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal; // Compute the number of copies of the repeat symbol we will need + + var repeatCount = Math.max(0, Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal))); // Compute the total height of the delimiter including all the symbols + + var realHeightTotal = minHeight + repeatCount * middleFactor * repeatHeightTotal; // The center of the delimiter is placed at the center of the axis. Note + // that in this context, "center" means that the delimiter should be + // centered around the axis in the current style, while normally it is + // centered around the axis in textstyle. + + var axisHeight = options.fontMetrics().axisHeight; + + if (center) { + axisHeight *= options.sizeMultiplier; + } // Calculate the depth + + + var depth = realHeightTotal / 2 - axisHeight; // This function differs from the TeX procedure in one way. + // We shift each repeat element downwards by 0.005em, to prevent a gap + // due to browser floating point rounding error. + // Then, at the last element-to element joint, we add one extra repeat + // element to cover the gap created by the shifts. + // Find the shift needed to align the upper end of the extra element at a point + // 0.005em above the lower end of the top element. + + var shiftOfExtraElement = (repeatCount + 1) * 0.005 - repeatHeightTotal; // Now, we start building the pieces that will go into the vlist + // Keep a list of the inner pieces + + var inners = []; // Add the bottom symbol + + inners.push(delimiter_makeInner(bottom, font, mode)); + + if (middle === null) { + // Add that many symbols + for (var i = 0; i < repeatCount; i++) { + inners.push(lap); // overlap + + inners.push(delimiter_makeInner(repeat, font, mode)); + } + } else { + // When there is a middle bit, we need the middle part and two repeated + // sections + for (var _i = 0; _i < repeatCount; _i++) { + inners.push(lap); + inners.push(delimiter_makeInner(repeat, font, mode)); + } // Insert one extra repeat element. + + + inners.push({ + type: "kern", + size: shiftOfExtraElement + }); + inners.push(delimiter_makeInner(repeat, font, mode)); + inners.push(lap); // Now insert the middle of the brace. + + inners.push(delimiter_makeInner(middle, font, mode)); + + for (var _i2 = 0; _i2 < repeatCount; _i2++) { + inners.push(lap); + inners.push(delimiter_makeInner(repeat, font, mode)); + } + } // To cover the gap create by the overlaps, insert one more repeat element, + // at a position that juts 0.005 above the bottom of the top element. + + + inners.push({ + type: "kern", + size: shiftOfExtraElement + }); + inners.push(delimiter_makeInner(repeat, font, mode)); + inners.push(lap); // Add the top symbol + + inners.push(delimiter_makeInner(top, font, mode)); // Finally, build the vlist + + var newOptions = options.havingBaseStyle(src_Style.TEXT); + var inner = buildCommon.makeVList({ + positionType: "bottom", + positionData: depth, + children: inners + }, newOptions); + return delimiter_styleWrap(buildCommon.makeSpan(["delimsizing", "mult"], [inner], newOptions), src_Style.TEXT, options, classes); +}; // All surds have 0.08em padding above the viniculum inside the SVG. +// That keeps browser span height rounding error from pinching the line. + + +var vbPad = 80; // padding above the surd, measured inside the viewBox. + +var emPad = 0.08; // padding, in ems, measured in the document. + +var delimiter_sqrtSvg = function sqrtSvg(sqrtName, height, viewBoxHeight, extraViniculum, options) { + var path = sqrtPath(sqrtName, extraViniculum, viewBoxHeight); + var pathNode = new domTree_PathNode(sqrtName, path); + var svg = new SvgNode([pathNode], { + // Note: 1000:1 ratio of viewBox to document em width. + "width": "400em", + "height": height + "em", + "viewBox": "0 0 400000 " + viewBoxHeight, + "preserveAspectRatio": "xMinYMin slice" + }); + return buildCommon.makeSvgSpan(["hide-tail"], [svg], options); +}; +/** + * Make a sqrt image of the given height, + */ + + +var makeSqrtImage = function makeSqrtImage(height, options) { + // Define a newOptions that removes the effect of size changes such as \Huge. + // We don't pick different a height surd for \Huge. For it, we scale up. + var newOptions = options.havingBaseSizing(); // Pick the desired surd glyph from a sequence of surds. + + var delim = traverseSequence("\\surd", height * newOptions.sizeMultiplier, stackLargeDelimiterSequence, newOptions); + var sizeMultiplier = newOptions.sizeMultiplier; // default + // The standard sqrt SVGs each have a 0.04em thick viniculum. + // If Settings.minRuleThickness is larger than that, we add extraViniculum. + + var extraViniculum = Math.max(0, options.minRuleThickness - options.fontMetrics().sqrtRuleThickness); // Create a span containing an SVG image of a sqrt symbol. + + var span; + var spanHeight = 0; + var texHeight = 0; + var viewBoxHeight = 0; + var advanceWidth; // We create viewBoxes with 80 units of "padding" above each surd. + // Then browser rounding error on the parent span height will not + // encroach on the ink of the viniculum. But that padding is not + // included in the TeX-like `height` used for calculation of + // vertical alignment. So texHeight = span.height < span.style.height. + + if (delim.type === "small") { + // Get an SVG that is derived from glyph U+221A in font KaTeX-Main. + // 1000 unit normal glyph height. + viewBoxHeight = 1000 + 1000 * extraViniculum + vbPad; + + if (height < 1.0) { + sizeMultiplier = 1.0; // mimic a \textfont radical + } else if (height < 1.4) { + sizeMultiplier = 0.7; // mimic a \scriptfont radical + } + + spanHeight = (1.0 + extraViniculum + emPad) / sizeMultiplier; + texHeight = (1.00 + extraViniculum) / sizeMultiplier; + span = delimiter_sqrtSvg("sqrtMain", spanHeight, viewBoxHeight, extraViniculum, options); + span.style.minWidth = "0.853em"; + advanceWidth = 0.833 / sizeMultiplier; // from the font. + } else if (delim.type === "large") { + // These SVGs come from fonts: KaTeX_Size1, _Size2, etc. + viewBoxHeight = (1000 + vbPad) * sizeToMaxHeight[delim.size]; + texHeight = (sizeToMaxHeight[delim.size] + extraViniculum) / sizeMultiplier; + spanHeight = (sizeToMaxHeight[delim.size] + extraViniculum + emPad) / sizeMultiplier; + span = delimiter_sqrtSvg("sqrtSize" + delim.size, spanHeight, viewBoxHeight, extraViniculum, options); + span.style.minWidth = "1.02em"; + advanceWidth = 1.0 / sizeMultiplier; // 1.0 from the font. + } else { + // Tall sqrt. In TeX, this would be stacked using multiple glyphs. + // We'll use a single SVG to accomplish the same thing. + spanHeight = height + extraViniculum + emPad; + texHeight = height + extraViniculum; + viewBoxHeight = Math.floor(1000 * height + extraViniculum) + vbPad; + span = delimiter_sqrtSvg("sqrtTall", spanHeight, viewBoxHeight, extraViniculum, options); + span.style.minWidth = "0.742em"; + advanceWidth = 1.056; + } + + span.height = texHeight; + span.style.height = spanHeight + "em"; + return { + span: span, + advanceWidth: advanceWidth, + // Calculate the actual line width. + // This actually should depend on the chosen font -- e.g. \boldmath + // should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and + // have thicker rules. + ruleWidth: (options.fontMetrics().sqrtRuleThickness + extraViniculum) * sizeMultiplier + }; +}; // There are three kinds of delimiters, delimiters that stack when they become +// too large + + +var stackLargeDelimiters = ["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\u230A", "\u230B", "\\lceil", "\\rceil", "\u2308", "\u2309", "\\surd"]; // delimiters that always stack + +var stackAlwaysDelimiters = ["\\uparrow", "\\downarrow", "\\updownarrow", "\\Uparrow", "\\Downarrow", "\\Updownarrow", "|", "\\|", "\\vert", "\\Vert", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\u27EE", "\u27EF", "\\lmoustache", "\\rmoustache", "\u23B0", "\u23B1"]; // and delimiters that never stack + +var stackNeverDelimiters = ["<", ">", "\\langle", "\\rangle", "/", "\\backslash", "\\lt", "\\gt"]; // Metrics of the different sizes. Found by looking at TeX's output of +// $\bigl| // \Bigl| \biggl| \Biggl| \showlists$ +// Used to create stacked delimiters of appropriate sizes in makeSizedDelim. + +var sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0]; +/** + * Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4. + */ + +var delimiter_makeSizedDelim = function makeSizedDelim(delim, size, options, mode, classes) { + // < and > turn into \langle and \rangle in delimiters + if (delim === "<" || delim === "\\lt" || delim === "\u27E8") { + delim = "\\langle"; + } else if (delim === ">" || delim === "\\gt" || delim === "\u27E9") { + delim = "\\rangle"; + } // Sized delimiters are never centered. + + + if (utils.contains(stackLargeDelimiters, delim) || utils.contains(stackNeverDelimiters, delim)) { + return delimiter_makeLargeDelim(delim, size, false, options, mode, classes); + } else if (utils.contains(stackAlwaysDelimiters, delim)) { + return delimiter_makeStackedDelim(delim, sizeToMaxHeight[size], false, options, mode, classes); + } else { + throw new src_ParseError("Illegal delimiter: '" + delim + "'"); + } +}; +/** + * There are three different sequences of delimiter sizes that the delimiters + * follow depending on the kind of delimiter. This is used when creating custom + * sized delimiters to decide whether to create a small, large, or stacked + * delimiter. + * + * In real TeX, these sequences aren't explicitly defined, but are instead + * defined inside the font metrics. Since there are only three sequences that + * are possible for the delimiters that TeX defines, it is easier to just encode + * them explicitly here. + */ + + +// Delimiters that never stack try small delimiters and large delimiters only +var stackNeverDelimiterSequence = [{ + type: "small", + style: src_Style.SCRIPTSCRIPT +}, { + type: "small", + style: src_Style.SCRIPT +}, { + type: "small", + style: src_Style.TEXT +}, { + type: "large", + size: 1 +}, { + type: "large", + size: 2 +}, { + type: "large", + size: 3 +}, { + type: "large", + size: 4 +}]; // Delimiters that always stack try the small delimiters first, then stack + +var stackAlwaysDelimiterSequence = [{ + type: "small", + style: src_Style.SCRIPTSCRIPT +}, { + type: "small", + style: src_Style.SCRIPT +}, { + type: "small", + style: src_Style.TEXT +}, { + type: "stack" +}]; // Delimiters that stack when large try the small and then large delimiters, and +// stack afterwards + +var stackLargeDelimiterSequence = [{ + type: "small", + style: src_Style.SCRIPTSCRIPT +}, { + type: "small", + style: src_Style.SCRIPT +}, { + type: "small", + style: src_Style.TEXT +}, { + type: "large", + size: 1 +}, { + type: "large", + size: 2 +}, { + type: "large", + size: 3 +}, { + type: "large", + size: 4 +}, { + type: "stack" +}]; +/** + * Get the font used in a delimiter based on what kind of delimiter it is. + * TODO(#963) Use more specific font family return type once that is introduced. + */ + +var delimTypeToFont = function delimTypeToFont(type) { + if (type.type === "small") { + return "Main-Regular"; + } else if (type.type === "large") { + return "Size" + type.size + "-Regular"; + } else if (type.type === "stack") { + return "Size4-Regular"; + } else { + throw new Error("Add support for delim type '" + type.type + "' here."); + } +}; +/** + * Traverse a sequence of types of delimiters to decide what kind of delimiter + * should be used to create a delimiter of the given height+depth. + */ + + +var traverseSequence = function traverseSequence(delim, height, sequence, options) { + // Here, we choose the index we should start at in the sequences. In smaller + // sizes (which correspond to larger numbers in style.size) we start earlier + // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts + // at index 3-2=1, text starts at 3-1=2, and display starts at min(2,3-0)=2 + var start = Math.min(2, 3 - options.style.size); + + for (var i = start; i < sequence.length; i++) { + if (sequence[i].type === "stack") { + // This is always the last delimiter, so we just break the loop now. + break; + } + + var metrics = delimiter_getMetrics(delim, delimTypeToFont(sequence[i]), "math"); + var heightDepth = metrics.height + metrics.depth; // Small delimiters are scaled down versions of the same font, so we + // account for the style change size. + + if (sequence[i].type === "small") { + var newOptions = options.havingBaseStyle(sequence[i].style); + heightDepth *= newOptions.sizeMultiplier; + } // Check if the delimiter at this size works for the given height. + + + if (heightDepth > height) { + return sequence[i]; + } + } // If we reached the end of the sequence, return the last sequence element. + + + return sequence[sequence.length - 1]; +}; +/** + * Make a delimiter of a given height+depth, with optional centering. Here, we + * traverse the sequences, and create a delimiter that the sequence tells us to. + */ + + +var delimiter_makeCustomSizedDelim = function makeCustomSizedDelim(delim, height, center, options, mode, classes) { + if (delim === "<" || delim === "\\lt" || delim === "\u27E8") { + delim = "\\langle"; + } else if (delim === ">" || delim === "\\gt" || delim === "\u27E9") { + delim = "\\rangle"; + } // Decide what sequence to use + + + var sequence; + + if (utils.contains(stackNeverDelimiters, delim)) { + sequence = stackNeverDelimiterSequence; + } else if (utils.contains(stackLargeDelimiters, delim)) { + sequence = stackLargeDelimiterSequence; + } else { + sequence = stackAlwaysDelimiterSequence; + } // Look through the sequence + + + var delimType = traverseSequence(delim, height, sequence, options); // Get the delimiter from font glyphs. + // Depending on the sequence element we decided on, call the + // appropriate function. + + if (delimType.type === "small") { + return delimiter_makeSmallDelim(delim, delimType.style, center, options, mode, classes); + } else if (delimType.type === "large") { + return delimiter_makeLargeDelim(delim, delimType.size, center, options, mode, classes); + } else + /* if (delimType.type === "stack") */ + { + return delimiter_makeStackedDelim(delim, height, center, options, mode, classes); + } +}; +/** + * Make a delimiter for use with `\left` and `\right`, given a height and depth + * of an expression that the delimiters surround. + */ + + +var makeLeftRightDelim = function makeLeftRightDelim(delim, height, depth, options, mode, classes) { + // We always center \left/\right delimiters, so the axis is always shifted + var axisHeight = options.fontMetrics().axisHeight * options.sizeMultiplier; // Taken from TeX source, tex.web, function make_left_right + + var delimiterFactor = 901; + var delimiterExtend = 5.0 / options.fontMetrics().ptPerEm; + var maxDistFromAxis = Math.max(height - axisHeight, depth + axisHeight); + var totalHeight = Math.max( // In real TeX, calculations are done using integral values which are + // 65536 per pt, or 655360 per em. So, the division here truncates in + // TeX but doesn't here, producing different results. If we wanted to + // exactly match TeX's calculation, we could do + // Math.floor(655360 * maxDistFromAxis / 500) * + // delimiterFactor / 655360 + // (To see the difference, compare + // x^{x^{\left(\rule{0.1em}{0.68em}\right)}} + // in TeX and KaTeX) + maxDistFromAxis / 500 * delimiterFactor, 2 * maxDistFromAxis - delimiterExtend); // Finally, we defer to `makeCustomSizedDelim` with our calculated total + // height + + return delimiter_makeCustomSizedDelim(delim, totalHeight, true, options, mode, classes); +}; + +/* harmony default export */ var delimiter = ({ + sqrtImage: makeSqrtImage, + sizedDelim: delimiter_makeSizedDelim, + customSizedDelim: delimiter_makeCustomSizedDelim, + leftRightDelim: makeLeftRightDelim +}); +// CONCATENATED MODULE: ./src/functions/delimsizing.js + + + + + + + + + +// Extra data needed for the delimiter handler down below +var delimiterSizes = { + "\\bigl": { + mclass: "mopen", + size: 1 + }, + "\\Bigl": { + mclass: "mopen", + size: 2 + }, + "\\biggl": { + mclass: "mopen", + size: 3 + }, + "\\Biggl": { + mclass: "mopen", + size: 4 + }, + "\\bigr": { + mclass: "mclose", + size: 1 + }, + "\\Bigr": { + mclass: "mclose", + size: 2 + }, + "\\biggr": { + mclass: "mclose", + size: 3 + }, + "\\Biggr": { + mclass: "mclose", + size: 4 + }, + "\\bigm": { + mclass: "mrel", + size: 1 + }, + "\\Bigm": { + mclass: "mrel", + size: 2 + }, + "\\biggm": { + mclass: "mrel", + size: 3 + }, + "\\Biggm": { + mclass: "mrel", + size: 4 + }, + "\\big": { + mclass: "mord", + size: 1 + }, + "\\Big": { + mclass: "mord", + size: 2 + }, + "\\bigg": { + mclass: "mord", + size: 3 + }, + "\\Bigg": { + mclass: "mord", + size: 4 + } +}; +var delimiters = ["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\u230A", "\u230B", "\\lceil", "\\rceil", "\u2308", "\u2309", "<", ">", "\\langle", "\u27E8", "\\rangle", "\u27E9", "\\lt", "\\gt", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\u27EE", "\u27EF", "\\lmoustache", "\\rmoustache", "\u23B0", "\u23B1", "/", "\\backslash", "|", "\\vert", "\\|", "\\Vert", "\\uparrow", "\\Uparrow", "\\downarrow", "\\Downarrow", "\\updownarrow", "\\Updownarrow", "."]; + +// Delimiter functions +function checkDelimiter(delim, context) { + var symDelim = checkSymbolNodeType(delim); + + if (symDelim && utils.contains(delimiters, symDelim.text)) { + return symDelim; + } else { + throw new src_ParseError("Invalid delimiter: '" + (symDelim ? symDelim.text : JSON.stringify(delim)) + "' after '" + context.funcName + "'", delim); + } +} + +defineFunction({ + type: "delimsizing", + names: ["\\bigl", "\\Bigl", "\\biggl", "\\Biggl", "\\bigr", "\\Bigr", "\\biggr", "\\Biggr", "\\bigm", "\\Bigm", "\\biggm", "\\Biggm", "\\big", "\\Big", "\\bigg", "\\Bigg"], + props: { + numArgs: 1 + }, + handler: function handler(context, args) { + var delim = checkDelimiter(args[0], context); + return { + type: "delimsizing", + mode: context.parser.mode, + size: delimiterSizes[context.funcName].size, + mclass: delimiterSizes[context.funcName].mclass, + delim: delim.text + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + if (group.delim === ".") { + // Empty delimiters still count as elements, even though they don't + // show anything. + return buildCommon.makeSpan([group.mclass]); + } // Use delimiter.sizedDelim to generate the delimiter. + + + return delimiter.sizedDelim(group.delim, group.size, options, group.mode, [group.mclass]); + }, + mathmlBuilder: function mathmlBuilder(group) { + var children = []; + + if (group.delim !== ".") { + children.push(buildMathML_makeText(group.delim, group.mode)); + } + + var node = new mathMLTree.MathNode("mo", children); + + if (group.mclass === "mopen" || group.mclass === "mclose") { + // Only some of the delimsizing functions act as fences, and they + // return "mopen" or "mclose" mclass. + node.setAttribute("fence", "true"); + } else { + // Explicitly disable fencing if it's not a fence, to override the + // defaults. + node.setAttribute("fence", "false"); + } + + return node; + } +}); + +function assertParsed(group) { + if (!group.body) { + throw new Error("Bug: The leftright ParseNode wasn't fully parsed."); + } +} + +defineFunction({ + type: "leftright-right", + names: ["\\right"], + props: { + numArgs: 1 + }, + handler: function handler(context, args) { + // \left case below triggers parsing of \right in + // `const right = parser.parseFunction();` + // uses this return value. + var color = context.parser.gullet.macros.get("\\current@color"); + + if (color && typeof color !== "string") { + throw new src_ParseError("\\current@color set to non-string in \\right"); + } + + return { + type: "leftright-right", + mode: context.parser.mode, + delim: checkDelimiter(args[0], context).text, + color: color // undefined if not set via \color + + }; + } +}); +defineFunction({ + type: "leftright", + names: ["\\left"], + props: { + numArgs: 1 + }, + handler: function handler(context, args) { + var delim = checkDelimiter(args[0], context); + var parser = context.parser; // Parse out the implicit body + + ++parser.leftrightDepth; // parseExpression stops before '\\right' + + var body = parser.parseExpression(false); + --parser.leftrightDepth; // Check the next token + + parser.expect("\\right", false); + var right = assertNodeType(parser.parseFunction(), "leftright-right"); + return { + type: "leftright", + mode: parser.mode, + body: body, + left: delim.text, + right: right.delim, + rightColor: right.color + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + assertParsed(group); // Build the inner expression + + var inner = buildHTML_buildExpression(group.body, options, true, ["mopen", "mclose"]); + var innerHeight = 0; + var innerDepth = 0; + var hadMiddle = false; // Calculate its height and depth + + for (var i = 0; i < inner.length; i++) { + // Property `isMiddle` not defined on `span`. See comment in + // "middle"'s htmlBuilder. + // $FlowFixMe + if (inner[i].isMiddle) { + hadMiddle = true; + } else { + innerHeight = Math.max(inner[i].height, innerHeight); + innerDepth = Math.max(inner[i].depth, innerDepth); + } + } // The size of delimiters is the same, regardless of what style we are + // in. Thus, to correctly calculate the size of delimiter we need around + // a group, we scale down the inner size based on the size. + + + innerHeight *= options.sizeMultiplier; + innerDepth *= options.sizeMultiplier; + var leftDelim; + + if (group.left === ".") { + // Empty delimiters in \left and \right make null delimiter spaces. + leftDelim = makeNullDelimiter(options, ["mopen"]); + } else { + // Otherwise, use leftRightDelim to generate the correct sized + // delimiter. + leftDelim = delimiter.leftRightDelim(group.left, innerHeight, innerDepth, options, group.mode, ["mopen"]); + } // Add it to the beginning of the expression + + + inner.unshift(leftDelim); // Handle middle delimiters + + if (hadMiddle) { + for (var _i = 1; _i < inner.length; _i++) { + var middleDelim = inner[_i]; // Property `isMiddle` not defined on `span`. See comment in + // "middle"'s htmlBuilder. + // $FlowFixMe + + var isMiddle = middleDelim.isMiddle; + + if (isMiddle) { + // Apply the options that were active when \middle was called + inner[_i] = delimiter.leftRightDelim(isMiddle.delim, innerHeight, innerDepth, isMiddle.options, group.mode, []); + } + } + } + + var rightDelim; // Same for the right delimiter, but using color specified by \color + + if (group.right === ".") { + rightDelim = makeNullDelimiter(options, ["mclose"]); + } else { + var colorOptions = group.rightColor ? options.withColor(group.rightColor) : options; + rightDelim = delimiter.leftRightDelim(group.right, innerHeight, innerDepth, colorOptions, group.mode, ["mclose"]); + } // Add it to the end of the expression. + + + inner.push(rightDelim); + return buildCommon.makeSpan(["minner"], inner, options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + assertParsed(group); + var inner = buildMathML_buildExpression(group.body, options); + + if (group.left !== ".") { + var leftNode = new mathMLTree.MathNode("mo", [buildMathML_makeText(group.left, group.mode)]); + leftNode.setAttribute("fence", "true"); + inner.unshift(leftNode); + } + + if (group.right !== ".") { + var rightNode = new mathMLTree.MathNode("mo", [buildMathML_makeText(group.right, group.mode)]); + rightNode.setAttribute("fence", "true"); + + if (group.rightColor) { + rightNode.setAttribute("mathcolor", group.rightColor); + } + + inner.push(rightNode); + } + + return buildMathML_makeRow(inner); + } +}); +defineFunction({ + type: "middle", + names: ["\\middle"], + props: { + numArgs: 1 + }, + handler: function handler(context, args) { + var delim = checkDelimiter(args[0], context); + + if (!context.parser.leftrightDepth) { + throw new src_ParseError("\\middle without preceding \\left", delim); + } + + return { + type: "middle", + mode: context.parser.mode, + delim: delim.text + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var middleDelim; + + if (group.delim === ".") { + middleDelim = makeNullDelimiter(options, []); + } else { + middleDelim = delimiter.sizedDelim(group.delim, 1, options, group.mode, []); + var isMiddle = { + delim: group.delim, + options: options + }; // Property `isMiddle` not defined on `span`. It is only used in + // this file above. + // TODO: Fix this violation of the `span` type and possibly rename + // things since `isMiddle` sounds like a boolean, but is a struct. + // $FlowFixMe + + middleDelim.isMiddle = isMiddle; + } + + return middleDelim; + }, + mathmlBuilder: function mathmlBuilder(group, options) { + // A Firefox \middle will strech a character vertically only if it + // is in the fence part of the operator dictionary at: + // https://www.w3.org/TR/MathML3/appendixc.html. + // So we need to avoid U+2223 and use plain "|" instead. + var textNode = group.delim === "\\vert" || group.delim === "|" ? buildMathML_makeText("|", "text") : buildMathML_makeText(group.delim, group.mode); + var middleNode = new mathMLTree.MathNode("mo", [textNode]); + middleNode.setAttribute("fence", "true"); // MathML gives 5/18em spacing to each element. + // \middle should get delimiter spacing instead. + + middleNode.setAttribute("lspace", "0.05em"); + middleNode.setAttribute("rspace", "0.05em"); + return middleNode; + } +}); +// CONCATENATED MODULE: ./src/functions/enclose.js + + + + + + + + + +var enclose_htmlBuilder = function htmlBuilder(group, options) { + // \cancel, \bcancel, \xcancel, \sout, \fbox, \colorbox, \fcolorbox + // Some groups can return document fragments. Handle those by wrapping + // them in a span. + var inner = buildCommon.wrapFragment(buildHTML_buildGroup(group.body, options), options); + var label = group.label.substr(1); + var scale = options.sizeMultiplier; + var img; + var imgShift = 0; // In the LaTeX cancel package, line geometry is slightly different + // depending on whether the subject is wider than it is tall, or vice versa. + // We don't know the width of a group, so as a proxy, we test if + // the subject is a single character. This captures most of the + // subjects that should get the "tall" treatment. + + var isSingleChar = utils.isCharacterBox(group.body); + + if (label === "sout") { + img = buildCommon.makeSpan(["stretchy", "sout"]); + img.height = options.fontMetrics().defaultRuleThickness / scale; + imgShift = -0.5 * options.fontMetrics().xHeight; + } else { + // Add horizontal padding + if (/cancel/.test(label)) { + if (!isSingleChar) { + inner.classes.push("cancel-pad"); + } + } else { + inner.classes.push("boxpad"); + } // Add vertical padding + + + var vertPad = 0; + var ruleThickness = 0; // ref: cancel package: \advance\totalheight2\p@ % "+2" + + if (/box/.test(label)) { + ruleThickness = Math.max(options.fontMetrics().fboxrule, // default + options.minRuleThickness // User override. + ); + vertPad = options.fontMetrics().fboxsep + (label === "colorbox" ? 0 : ruleThickness); + } else { + vertPad = isSingleChar ? 0.2 : 0; + } + + img = stretchy.encloseSpan(inner, label, vertPad, options); + + if (/fbox|boxed|fcolorbox/.test(label)) { + img.style.borderStyle = "solid"; + img.style.borderWidth = ruleThickness + "em"; + } + + imgShift = inner.depth + vertPad; + + if (group.backgroundColor) { + img.style.backgroundColor = group.backgroundColor; + + if (group.borderColor) { + img.style.borderColor = group.borderColor; + } + } + } + + var vlist; + + if (group.backgroundColor) { + vlist = buildCommon.makeVList({ + positionType: "individualShift", + children: [// Put the color background behind inner; + { + type: "elem", + elem: img, + shift: imgShift + }, { + type: "elem", + elem: inner, + shift: 0 + }] + }, options); + } else { + vlist = buildCommon.makeVList({ + positionType: "individualShift", + children: [// Write the \cancel stroke on top of inner. + { + type: "elem", + elem: inner, + shift: 0 + }, { + type: "elem", + elem: img, + shift: imgShift, + wrapperClasses: /cancel/.test(label) ? ["svg-align"] : [] + }] + }, options); + } + + if (/cancel/.test(label)) { + // The cancel package documentation says that cancel lines add their height + // to the expression, but tests show that isn't how it actually works. + vlist.height = inner.height; + vlist.depth = inner.depth; + } + + if (/cancel/.test(label) && !isSingleChar) { + // cancel does not create horiz space for its line extension. + return buildCommon.makeSpan(["mord", "cancel-lap"], [vlist], options); + } else { + return buildCommon.makeSpan(["mord"], [vlist], options); + } +}; + +var enclose_mathmlBuilder = function mathmlBuilder(group, options) { + var fboxsep = 0; + var node = new mathMLTree.MathNode(group.label.indexOf("colorbox") > -1 ? "mpadded" : "menclose", [buildMathML_buildGroup(group.body, options)]); + + switch (group.label) { + case "\\cancel": + node.setAttribute("notation", "updiagonalstrike"); + break; + + case "\\bcancel": + node.setAttribute("notation", "downdiagonalstrike"); + break; + + case "\\sout": + node.setAttribute("notation", "horizontalstrike"); + break; + + case "\\fbox": + node.setAttribute("notation", "box"); + break; + + case "\\fcolorbox": + case "\\colorbox": + // doesn't have a good notation option. So use + // instead. Set some attributes that come included with . + fboxsep = options.fontMetrics().fboxsep * options.fontMetrics().ptPerEm; + node.setAttribute("width", "+" + 2 * fboxsep + "pt"); + node.setAttribute("height", "+" + 2 * fboxsep + "pt"); + node.setAttribute("lspace", fboxsep + "pt"); // + + node.setAttribute("voffset", fboxsep + "pt"); + + if (group.label === "\\fcolorbox") { + var thk = Math.max(options.fontMetrics().fboxrule, // default + options.minRuleThickness // user override + ); + node.setAttribute("style", "border: " + thk + "em solid " + String(group.borderColor)); + } + + break; + + case "\\xcancel": + node.setAttribute("notation", "updiagonalstrike downdiagonalstrike"); + break; + } + + if (group.backgroundColor) { + node.setAttribute("mathbackground", group.backgroundColor); + } + + return node; +}; + +defineFunction({ + type: "enclose", + names: ["\\colorbox"], + props: { + numArgs: 2, + allowedInText: true, + greediness: 3, + argTypes: ["color", "text"] + }, + handler: function handler(_ref, args, optArgs) { + var parser = _ref.parser, + funcName = _ref.funcName; + var color = assertNodeType(args[0], "color-token").color; + var body = args[1]; + return { + type: "enclose", + mode: parser.mode, + label: funcName, + backgroundColor: color, + body: body + }; + }, + htmlBuilder: enclose_htmlBuilder, + mathmlBuilder: enclose_mathmlBuilder +}); +defineFunction({ + type: "enclose", + names: ["\\fcolorbox"], + props: { + numArgs: 3, + allowedInText: true, + greediness: 3, + argTypes: ["color", "color", "text"] + }, + handler: function handler(_ref2, args, optArgs) { + var parser = _ref2.parser, + funcName = _ref2.funcName; + var borderColor = assertNodeType(args[0], "color-token").color; + var backgroundColor = assertNodeType(args[1], "color-token").color; + var body = args[2]; + return { + type: "enclose", + mode: parser.mode, + label: funcName, + backgroundColor: backgroundColor, + borderColor: borderColor, + body: body + }; + }, + htmlBuilder: enclose_htmlBuilder, + mathmlBuilder: enclose_mathmlBuilder +}); +defineFunction({ + type: "enclose", + names: ["\\fbox"], + props: { + numArgs: 1, + argTypes: ["hbox"], + allowedInText: true + }, + handler: function handler(_ref3, args) { + var parser = _ref3.parser; + return { + type: "enclose", + mode: parser.mode, + label: "\\fbox", + body: args[0] + }; + } +}); +defineFunction({ + type: "enclose", + names: ["\\cancel", "\\bcancel", "\\xcancel", "\\sout"], + props: { + numArgs: 1 + }, + handler: function handler(_ref4, args, optArgs) { + var parser = _ref4.parser, + funcName = _ref4.funcName; + var body = args[0]; + return { + type: "enclose", + mode: parser.mode, + label: funcName, + body: body + }; + }, + htmlBuilder: enclose_htmlBuilder, + mathmlBuilder: enclose_mathmlBuilder +}); +// CONCATENATED MODULE: ./src/defineEnvironment.js + + +/** + * All registered environments. + * `environments.js` exports this same dictionary again and makes it public. + * `Parser.js` requires this dictionary via `environments.js`. + */ +var _environments = {}; +function defineEnvironment(_ref) { + var type = _ref.type, + names = _ref.names, + props = _ref.props, + handler = _ref.handler, + htmlBuilder = _ref.htmlBuilder, + mathmlBuilder = _ref.mathmlBuilder; + // Set default values of environments. + var data = { + type: type, + numArgs: props.numArgs || 0, + greediness: 1, + allowedInText: false, + numOptionalArgs: 0, + handler: handler + }; + + for (var i = 0; i < names.length; ++i) { + // TODO: The value type of _environments should be a type union of all + // possible `EnvSpec<>` possibilities instead of `EnvSpec<*>`, which is + // an existential type. + // $FlowFixMe + _environments[names[i]] = data; + } + + if (htmlBuilder) { + _htmlGroupBuilders[type] = htmlBuilder; + } + + if (mathmlBuilder) { + _mathmlGroupBuilders[type] = mathmlBuilder; + } +} +// CONCATENATED MODULE: ./src/environments/array.js + + + + + + + + + + + + + +function getHLines(parser) { + // Return an array. The array length = number of hlines. + // Each element in the array tells if the line is dashed. + var hlineInfo = []; + parser.consumeSpaces(); + var nxt = parser.fetch().text; + + while (nxt === "\\hline" || nxt === "\\hdashline") { + parser.consume(); + hlineInfo.push(nxt === "\\hdashline"); + parser.consumeSpaces(); + nxt = parser.fetch().text; + } + + return hlineInfo; +} +/** + * Parse the body of the environment, with rows delimited by \\ and + * columns delimited by &, and create a nested list in row-major order + * with one group per cell. If given an optional argument style + * ("text", "display", etc.), then each cell is cast into that style. + */ + + +function parseArray(parser, _ref, style) { + var hskipBeforeAndAfter = _ref.hskipBeforeAndAfter, + addJot = _ref.addJot, + cols = _ref.cols, + arraystretch = _ref.arraystretch, + colSeparationType = _ref.colSeparationType; + // Parse body of array with \\ temporarily mapped to \cr + parser.gullet.beginGroup(); + parser.gullet.macros.set("\\\\", "\\cr"); // Get current arraystretch if it's not set by the environment + + if (!arraystretch) { + var stretch = parser.gullet.expandMacroAsText("\\arraystretch"); + + if (stretch == null) { + // Default \arraystretch from lttab.dtx + arraystretch = 1; + } else { + arraystretch = parseFloat(stretch); + + if (!arraystretch || arraystretch < 0) { + throw new src_ParseError("Invalid \\arraystretch: " + stretch); + } + } + } // Start group for first cell + + + parser.gullet.beginGroup(); + var row = []; + var body = [row]; + var rowGaps = []; + var hLinesBeforeRow = []; // Test for \hline at the top of the array. + + hLinesBeforeRow.push(getHLines(parser)); + + while (true) { + // eslint-disable-line no-constant-condition + // Parse each cell in its own group (namespace) + var cell = parser.parseExpression(false, "\\cr"); + parser.gullet.endGroup(); + parser.gullet.beginGroup(); + cell = { + type: "ordgroup", + mode: parser.mode, + body: cell + }; + + if (style) { + cell = { + type: "styling", + mode: parser.mode, + style: style, + body: [cell] + }; + } + + row.push(cell); + var next = parser.fetch().text; + + if (next === "&") { + parser.consume(); + } else if (next === "\\end") { + // Arrays terminate newlines with `\crcr` which consumes a `\cr` if + // the last line is empty. + // NOTE: Currently, `cell` is the last item added into `row`. + if (row.length === 1 && cell.type === "styling" && cell.body[0].body.length === 0) { + body.pop(); + } + + if (hLinesBeforeRow.length < body.length + 1) { + hLinesBeforeRow.push([]); + } + + break; + } else if (next === "\\cr") { + var cr = assertNodeType(parser.parseFunction(), "cr"); + rowGaps.push(cr.size); // check for \hline(s) following the row separator + + hLinesBeforeRow.push(getHLines(parser)); + row = []; + body.push(row); + } else { + throw new src_ParseError("Expected & or \\\\ or \\cr or \\end", parser.nextToken); + } + } // End cell group + + + parser.gullet.endGroup(); // End array group defining \\ + + parser.gullet.endGroup(); + return { + type: "array", + mode: parser.mode, + addJot: addJot, + arraystretch: arraystretch, + body: body, + cols: cols, + rowGaps: rowGaps, + hskipBeforeAndAfter: hskipBeforeAndAfter, + hLinesBeforeRow: hLinesBeforeRow, + colSeparationType: colSeparationType + }; +} // Decides on a style for cells in an array according to whether the given +// environment name starts with the letter 'd'. + + +function dCellStyle(envName) { + if (envName.substr(0, 1) === "d") { + return "display"; + } else { + return "text"; + } +} + +var array_htmlBuilder = function htmlBuilder(group, options) { + var r; + var c; + var nr = group.body.length; + var hLinesBeforeRow = group.hLinesBeforeRow; + var nc = 0; + var body = new Array(nr); + var hlines = []; + var ruleThickness = Math.max( // From LaTeX \showthe\arrayrulewidth. Equals 0.04 em. + options.fontMetrics().arrayRuleWidth, options.minRuleThickness // User override. + ); // Horizontal spacing + + var pt = 1 / options.fontMetrics().ptPerEm; + var arraycolsep = 5 * pt; // default value, i.e. \arraycolsep in article.cls + + if (group.colSeparationType && group.colSeparationType === "small") { + // We're in a {smallmatrix}. Default column space is \thickspace, + // i.e. 5/18em = 0.2778em, per amsmath.dtx for {smallmatrix}. + // But that needs adjustment because LaTeX applies \scriptstyle to the + // entire array, including the colspace, but this function applies + // \scriptstyle only inside each element. + var localMultiplier = options.havingStyle(src_Style.SCRIPT).sizeMultiplier; + arraycolsep = 0.2778 * (localMultiplier / options.sizeMultiplier); + } // Vertical spacing + + + var baselineskip = 12 * pt; // see size10.clo + // Default \jot from ltmath.dtx + // TODO(edemaine): allow overriding \jot via \setlength (#687) + + var jot = 3 * pt; + var arrayskip = group.arraystretch * baselineskip; + var arstrutHeight = 0.7 * arrayskip; // \strutbox in ltfsstrc.dtx and + + var arstrutDepth = 0.3 * arrayskip; // \@arstrutbox in lttab.dtx + + var totalHeight = 0; // Set a position for \hline(s) at the top of the array, if any. + + function setHLinePos(hlinesInGap) { + for (var i = 0; i < hlinesInGap.length; ++i) { + if (i > 0) { + totalHeight += 0.25; + } + + hlines.push({ + pos: totalHeight, + isDashed: hlinesInGap[i] + }); + } + } + + setHLinePos(hLinesBeforeRow[0]); + + for (r = 0; r < group.body.length; ++r) { + var inrow = group.body[r]; + var height = arstrutHeight; // \@array adds an \@arstrut + + var depth = arstrutDepth; // to each tow (via the template) + + if (nc < inrow.length) { + nc = inrow.length; + } + + var outrow = new Array(inrow.length); + + for (c = 0; c < inrow.length; ++c) { + var elt = buildHTML_buildGroup(inrow[c], options); + + if (depth < elt.depth) { + depth = elt.depth; + } + + if (height < elt.height) { + height = elt.height; + } + + outrow[c] = elt; + } + + var rowGap = group.rowGaps[r]; + var gap = 0; + + if (rowGap) { + gap = units_calculateSize(rowGap, options); + + if (gap > 0) { + // \@argarraycr + gap += arstrutDepth; + + if (depth < gap) { + depth = gap; // \@xargarraycr + } + + gap = 0; + } + } // In AMS multiline environments such as aligned and gathered, rows + // correspond to lines that have additional \jot added to the + // \baselineskip via \openup. + + + if (group.addJot) { + depth += jot; + } + + outrow.height = height; + outrow.depth = depth; + totalHeight += height; + outrow.pos = totalHeight; + totalHeight += depth + gap; // \@yargarraycr + + body[r] = outrow; // Set a position for \hline(s), if any. + + setHLinePos(hLinesBeforeRow[r + 1]); + } + + var offset = totalHeight / 2 + options.fontMetrics().axisHeight; + var colDescriptions = group.cols || []; + var cols = []; + var colSep; + var colDescrNum; + + for (c = 0, colDescrNum = 0; // Continue while either there are more columns or more column + // descriptions, so trailing separators don't get lost. + c < nc || colDescrNum < colDescriptions.length; ++c, ++colDescrNum) { + var colDescr = colDescriptions[colDescrNum] || {}; + var firstSeparator = true; + + while (colDescr.type === "separator") { + // If there is more than one separator in a row, add a space + // between them. + if (!firstSeparator) { + colSep = buildCommon.makeSpan(["arraycolsep"], []); + colSep.style.width = options.fontMetrics().doubleRuleSep + "em"; + cols.push(colSep); + } + + if (colDescr.separator === "|" || colDescr.separator === ":") { + var lineType = colDescr.separator === "|" ? "solid" : "dashed"; + var separator = buildCommon.makeSpan(["vertical-separator"], [], options); + separator.style.height = totalHeight + "em"; + separator.style.borderRightWidth = ruleThickness + "em"; + separator.style.borderRightStyle = lineType; + separator.style.margin = "0 -" + ruleThickness / 2 + "em"; + separator.style.verticalAlign = -(totalHeight - offset) + "em"; + cols.push(separator); + } else { + throw new src_ParseError("Invalid separator type: " + colDescr.separator); + } + + colDescrNum++; + colDescr = colDescriptions[colDescrNum] || {}; + firstSeparator = false; + } + + if (c >= nc) { + continue; + } + + var sepwidth = void 0; + + if (c > 0 || group.hskipBeforeAndAfter) { + sepwidth = utils.deflt(colDescr.pregap, arraycolsep); + + if (sepwidth !== 0) { + colSep = buildCommon.makeSpan(["arraycolsep"], []); + colSep.style.width = sepwidth + "em"; + cols.push(colSep); + } + } + + var col = []; + + for (r = 0; r < nr; ++r) { + var row = body[r]; + var elem = row[c]; + + if (!elem) { + continue; + } + + var shift = row.pos - offset; + elem.depth = row.depth; + elem.height = row.height; + col.push({ + type: "elem", + elem: elem, + shift: shift + }); + } + + col = buildCommon.makeVList({ + positionType: "individualShift", + children: col + }, options); + col = buildCommon.makeSpan(["col-align-" + (colDescr.align || "c")], [col]); + cols.push(col); + + if (c < nc - 1 || group.hskipBeforeAndAfter) { + sepwidth = utils.deflt(colDescr.postgap, arraycolsep); + + if (sepwidth !== 0) { + colSep = buildCommon.makeSpan(["arraycolsep"], []); + colSep.style.width = sepwidth + "em"; + cols.push(colSep); + } + } + } + + body = buildCommon.makeSpan(["mtable"], cols); // Add \hline(s), if any. + + if (hlines.length > 0) { + var line = buildCommon.makeLineSpan("hline", options, ruleThickness); + var dashes = buildCommon.makeLineSpan("hdashline", options, ruleThickness); + var vListElems = [{ + type: "elem", + elem: body, + shift: 0 + }]; + + while (hlines.length > 0) { + var hline = hlines.pop(); + var lineShift = hline.pos - offset; + + if (hline.isDashed) { + vListElems.push({ + type: "elem", + elem: dashes, + shift: lineShift + }); + } else { + vListElems.push({ + type: "elem", + elem: line, + shift: lineShift + }); + } + } + + body = buildCommon.makeVList({ + positionType: "individualShift", + children: vListElems + }, options); + } + + return buildCommon.makeSpan(["mord"], [body], options); +}; + +var alignMap = { + c: "center ", + l: "left ", + r: "right " +}; + +var array_mathmlBuilder = function mathmlBuilder(group, options) { + var table = new mathMLTree.MathNode("mtable", group.body.map(function (row) { + return new mathMLTree.MathNode("mtr", row.map(function (cell) { + return new mathMLTree.MathNode("mtd", [buildMathML_buildGroup(cell, options)]); + })); + })); // Set column alignment, row spacing, column spacing, and + // array lines by setting attributes on the table element. + // Set the row spacing. In MathML, we specify a gap distance. + // We do not use rowGap[] because MathML automatically increases + // cell height with the height/depth of the element content. + // LaTeX \arraystretch multiplies the row baseline-to-baseline distance. + // We simulate this by adding (arraystretch - 1)em to the gap. This + // does a reasonable job of adjusting arrays containing 1 em tall content. + // The 0.16 and 0.09 values are found emprically. They produce an array + // similar to LaTeX and in which content does not interfere with \hines. + + var gap = group.arraystretch === 0.5 ? 0.1 // {smallmatrix}, {subarray} + : 0.16 + group.arraystretch - 1 + (group.addJot ? 0.09 : 0); + table.setAttribute("rowspacing", gap + "em"); // MathML table lines go only between cells. + // To place a line on an edge we'll use , if necessary. + + var menclose = ""; + var align = ""; + + if (group.cols) { + // Find column alignment, column spacing, and vertical lines. + var cols = group.cols; + var columnLines = ""; + var prevTypeWasAlign = false; + var iStart = 0; + var iEnd = cols.length; + + if (cols[0].type === "separator") { + menclose += "top "; + iStart = 1; + } + + if (cols[cols.length - 1].type === "separator") { + menclose += "bottom "; + iEnd -= 1; + } + + for (var i = iStart; i < iEnd; i++) { + if (cols[i].type === "align") { + align += alignMap[cols[i].align]; + + if (prevTypeWasAlign) { + columnLines += "none "; + } + + prevTypeWasAlign = true; + } else if (cols[i].type === "separator") { + // MathML accepts only single lines between cells. + // So we read only the first of consecutive separators. + if (prevTypeWasAlign) { + columnLines += cols[i].separator === "|" ? "solid " : "dashed "; + prevTypeWasAlign = false; + } + } + } + + table.setAttribute("columnalign", align.trim()); + + if (/[sd]/.test(columnLines)) { + table.setAttribute("columnlines", columnLines.trim()); + } + } // Set column spacing. + + + if (group.colSeparationType === "align") { + var _cols = group.cols || []; + + var spacing = ""; + + for (var _i = 1; _i < _cols.length; _i++) { + spacing += _i % 2 ? "0em " : "1em "; + } + + table.setAttribute("columnspacing", spacing.trim()); + } else if (group.colSeparationType === "alignat") { + table.setAttribute("columnspacing", "0em"); + } else if (group.colSeparationType === "small") { + table.setAttribute("columnspacing", "0.2778em"); + } else { + table.setAttribute("columnspacing", "1em"); + } // Address \hline and \hdashline + + + var rowLines = ""; + var hlines = group.hLinesBeforeRow; + menclose += hlines[0].length > 0 ? "left " : ""; + menclose += hlines[hlines.length - 1].length > 0 ? "right " : ""; + + for (var _i2 = 1; _i2 < hlines.length - 1; _i2++) { + rowLines += hlines[_i2].length === 0 ? "none " // MathML accepts only a single line between rows. Read one element. + : hlines[_i2][0] ? "dashed " : "solid "; + } + + if (/[sd]/.test(rowLines)) { + table.setAttribute("rowlines", rowLines.trim()); + } + + if (menclose !== "") { + table = new mathMLTree.MathNode("menclose", [table]); + table.setAttribute("notation", menclose.trim()); + } + + if (group.arraystretch && group.arraystretch < 1) { + // A small array. Wrap in scriptstyle so row gap is not too large. + table = new mathMLTree.MathNode("mstyle", [table]); + table.setAttribute("scriptlevel", "1"); + } + + return table; +}; // Convenience function for aligned and alignedat environments. + + +var array_alignedHandler = function alignedHandler(context, args) { + var cols = []; + var res = parseArray(context.parser, { + cols: cols, + addJot: true + }, "display"); // Determining number of columns. + // 1. If the first argument is given, we use it as a number of columns, + // and makes sure that each row doesn't exceed that number. + // 2. Otherwise, just count number of columns = maximum number + // of cells in each row ("aligned" mode -- isAligned will be true). + // + // At the same time, prepend empty group {} at beginning of every second + // cell in each row (starting with second cell) so that operators become + // binary. This behavior is implemented in amsmath's \start@aligned. + + var numMaths; + var numCols = 0; + var emptyGroup = { + type: "ordgroup", + mode: context.mode, + body: [] + }; + var ordgroup = checkNodeType(args[0], "ordgroup"); + + if (ordgroup) { + var arg0 = ""; + + for (var i = 0; i < ordgroup.body.length; i++) { + var textord = assertNodeType(ordgroup.body[i], "textord"); + arg0 += textord.text; + } + + numMaths = Number(arg0); + numCols = numMaths * 2; + } + + var isAligned = !numCols; + res.body.forEach(function (row) { + for (var _i3 = 1; _i3 < row.length; _i3 += 2) { + // Modify ordgroup node within styling node + var styling = assertNodeType(row[_i3], "styling"); + + var _ordgroup = assertNodeType(styling.body[0], "ordgroup"); + + _ordgroup.body.unshift(emptyGroup); + } + + if (!isAligned) { + // Case 1 + var curMaths = row.length / 2; + + if (numMaths < curMaths) { + throw new src_ParseError("Too many math in a row: " + ("expected " + numMaths + ", but got " + curMaths), row[0]); + } + } else if (numCols < row.length) { + // Case 2 + numCols = row.length; + } + }); // Adjusting alignment. + // In aligned mode, we add one \qquad between columns; + // otherwise we add nothing. + + for (var _i4 = 0; _i4 < numCols; ++_i4) { + var align = "r"; + var pregap = 0; + + if (_i4 % 2 === 1) { + align = "l"; + } else if (_i4 > 0 && isAligned) { + // "aligned" mode. + pregap = 1; // add one \quad + } + + cols[_i4] = { + type: "align", + align: align, + pregap: pregap, + postgap: 0 + }; + } + + res.colSeparationType = isAligned ? "align" : "alignat"; + return res; +}; // Arrays are part of LaTeX, defined in lttab.dtx so its documentation +// is part of the source2e.pdf file of LaTeX2e source documentation. +// {darray} is an {array} environment where cells are set in \displaystyle, +// as defined in nccmath.sty. + + +defineEnvironment({ + type: "array", + names: ["array", "darray"], + props: { + numArgs: 1 + }, + handler: function handler(context, args) { + // Since no types are specified above, the two possibilities are + // - The argument is wrapped in {} or [], in which case Parser's + // parseGroup() returns an "ordgroup" wrapping some symbol node. + // - The argument is a bare symbol node. + var symNode = checkSymbolNodeType(args[0]); + var colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body; + var cols = colalign.map(function (nde) { + var node = assertSymbolNodeType(nde); + var ca = node.text; + + if ("lcr".indexOf(ca) !== -1) { + return { + type: "align", + align: ca + }; + } else if (ca === "|") { + return { + type: "separator", + separator: "|" + }; + } else if (ca === ":") { + return { + type: "separator", + separator: ":" + }; + } + + throw new src_ParseError("Unknown column alignment: " + ca, nde); + }); + var res = { + cols: cols, + hskipBeforeAndAfter: true // \@preamble in lttab.dtx + + }; + return parseArray(context.parser, res, dCellStyle(context.envName)); + }, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); // The matrix environments of amsmath builds on the array environment +// of LaTeX, which is discussed above. + +defineEnvironment({ + type: "array", + names: ["matrix", "pmatrix", "bmatrix", "Bmatrix", "vmatrix", "Vmatrix"], + props: { + numArgs: 0 + }, + handler: function handler(context) { + var delimiters = { + "matrix": null, + "pmatrix": ["(", ")"], + "bmatrix": ["[", "]"], + "Bmatrix": ["\\{", "\\}"], + "vmatrix": ["|", "|"], + "Vmatrix": ["\\Vert", "\\Vert"] + }[context.envName]; // \hskip -\arraycolsep in amsmath + + var payload = { + hskipBeforeAndAfter: false + }; + var res = parseArray(context.parser, payload, dCellStyle(context.envName)); + return delimiters ? { + type: "leftright", + mode: context.mode, + body: [res], + left: delimiters[0], + right: delimiters[1], + rightColor: undefined // \right uninfluenced by \color in array + + } : res; + }, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); +defineEnvironment({ + type: "array", + names: ["smallmatrix"], + props: { + numArgs: 0 + }, + handler: function handler(context) { + var payload = { + arraystretch: 0.5 + }; + var res = parseArray(context.parser, payload, "script"); + res.colSeparationType = "small"; + return res; + }, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); +defineEnvironment({ + type: "array", + names: ["subarray"], + props: { + numArgs: 1 + }, + handler: function handler(context, args) { + // Parsing of {subarray} is similar to {array} + var symNode = checkSymbolNodeType(args[0]); + var colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body; + var cols = colalign.map(function (nde) { + var node = assertSymbolNodeType(nde); + var ca = node.text; // {subarray} only recognizes "l" & "c" + + if ("lc".indexOf(ca) !== -1) { + return { + type: "align", + align: ca + }; + } + + throw new src_ParseError("Unknown column alignment: " + ca, nde); + }); + + if (cols.length > 1) { + throw new src_ParseError("{subarray} can contain only one column"); + } + + var res = { + cols: cols, + hskipBeforeAndAfter: false, + arraystretch: 0.5 + }; + res = parseArray(context.parser, res, "script"); + + if (res.body[0].length > 1) { + throw new src_ParseError("{subarray} can contain only one column"); + } + + return res; + }, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); // A cases environment (in amsmath.sty) is almost equivalent to +// \def\arraystretch{1.2}% +// \left\{\begin{array}{@{}l@{\quad}l@{}} … \end{array}\right. +// {dcases} is a {cases} environment where cells are set in \displaystyle, +// as defined in mathtools.sty. + +defineEnvironment({ + type: "array", + names: ["cases", "dcases"], + props: { + numArgs: 0 + }, + handler: function handler(context) { + var payload = { + arraystretch: 1.2, + cols: [{ + type: "align", + align: "l", + pregap: 0, + // TODO(kevinb) get the current style. + // For now we use the metrics for TEXT style which is what we were + // doing before. Before attempting to get the current style we + // should look at TeX's behavior especially for \over and matrices. + postgap: 1.0 + /* 1em quad */ + + }, { + type: "align", + align: "l", + pregap: 0, + postgap: 0 + }] + }; + var res = parseArray(context.parser, payload, dCellStyle(context.envName)); + return { + type: "leftright", + mode: context.mode, + body: [res], + left: "\\{", + right: ".", + rightColor: undefined + }; + }, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); // An aligned environment is like the align* environment +// except it operates within math mode. +// Note that we assume \nomallineskiplimit to be zero, +// so that \strut@ is the same as \strut. + +defineEnvironment({ + type: "array", + names: ["aligned"], + props: { + numArgs: 0 + }, + handler: array_alignedHandler, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); // A gathered environment is like an array environment with one centered +// column, but where rows are considered lines so get \jot line spacing +// and contents are set in \displaystyle. + +defineEnvironment({ + type: "array", + names: ["gathered"], + props: { + numArgs: 0 + }, + handler: function handler(context) { + var res = { + cols: [{ + type: "align", + align: "c" + }], + addJot: true + }; + return parseArray(context.parser, res, "display"); + }, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); // alignat environment is like an align environment, but one must explicitly +// specify maximum number of columns in each row, and can adjust spacing between +// each columns. + +defineEnvironment({ + type: "array", + names: ["alignedat"], + // One for numbered and for unnumbered; + // but, KaTeX doesn't supports math numbering yet, + // they make no difference for now. + props: { + numArgs: 1 + }, + handler: array_alignedHandler, + htmlBuilder: array_htmlBuilder, + mathmlBuilder: array_mathmlBuilder +}); // Catch \hline outside array environment + +defineFunction({ + type: "text", + // Doesn't matter what this is. + names: ["\\hline", "\\hdashline"], + props: { + numArgs: 0, + allowedInText: true, + allowedInMath: true + }, + handler: function handler(context, args) { + throw new src_ParseError(context.funcName + " valid only within array environment"); + } +}); +// CONCATENATED MODULE: ./src/environments.js + +var environments = _environments; +/* harmony default export */ var src_environments = (environments); // All environment definitions should be imported below + + +// CONCATENATED MODULE: ./src/functions/environment.js + + + + // Environment delimiters. HTML/MathML rendering is defined in the corresponding +// defineEnvironment definitions. +// $FlowFixMe, "environment" handler returns an environment ParseNode + +defineFunction({ + type: "environment", + names: ["\\begin", "\\end"], + props: { + numArgs: 1, + argTypes: ["text"] + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + var nameGroup = args[0]; + + if (nameGroup.type !== "ordgroup") { + throw new src_ParseError("Invalid environment name", nameGroup); + } + + var envName = ""; + + for (var i = 0; i < nameGroup.body.length; ++i) { + envName += assertNodeType(nameGroup.body[i], "textord").text; + } + + if (funcName === "\\begin") { + // begin...end is similar to left...right + if (!src_environments.hasOwnProperty(envName)) { + throw new src_ParseError("No such environment: " + envName, nameGroup); + } // Build the environment object. Arguments and other information will + // be made available to the begin and end methods using properties. + + + var env = src_environments[envName]; + + var _parser$parseArgument = parser.parseArguments("\\begin{" + envName + "}", env), + _args = _parser$parseArgument.args, + optArgs = _parser$parseArgument.optArgs; + + var context = { + mode: parser.mode, + envName: envName, + parser: parser + }; + var result = env.handler(context, _args, optArgs); + parser.expect("\\end", false); + var endNameToken = parser.nextToken; + var end = assertNodeType(parser.parseFunction(), "environment"); + + if (end.name !== envName) { + throw new src_ParseError("Mismatch: \\begin{" + envName + "} matched by \\end{" + end.name + "}", endNameToken); + } + + return result; + } + + return { + type: "environment", + mode: parser.mode, + name: envName, + nameGroup: nameGroup + }; + } +}); +// CONCATENATED MODULE: ./src/functions/mclass.js + + + + + + +var mclass_makeSpan = buildCommon.makeSpan; + +function mclass_htmlBuilder(group, options) { + var elements = buildHTML_buildExpression(group.body, options, true); + return mclass_makeSpan([group.mclass], elements, options); +} + +function mclass_mathmlBuilder(group, options) { + var node; + var inner = buildMathML_buildExpression(group.body, options); + + if (group.mclass === "minner") { + return mathMLTree.newDocumentFragment(inner); + } else if (group.mclass === "mord") { + if (group.isCharacterBox) { + node = inner[0]; + node.type = "mi"; + } else { + node = new mathMLTree.MathNode("mi", inner); + } + } else { + if (group.isCharacterBox) { + node = inner[0]; + node.type = "mo"; + } else { + node = new mathMLTree.MathNode("mo", inner); + } // Set spacing based on what is the most likely adjacent atom type. + // See TeXbook p170. + + + if (group.mclass === "mbin") { + node.attributes.lspace = "0.22em"; // medium space + + node.attributes.rspace = "0.22em"; + } else if (group.mclass === "mpunct") { + node.attributes.lspace = "0em"; + node.attributes.rspace = "0.17em"; // thinspace + } else if (group.mclass === "mopen" || group.mclass === "mclose") { + node.attributes.lspace = "0em"; + node.attributes.rspace = "0em"; + } // MathML default space is 5/18 em, so needs no action. + // Ref: https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mo + + } + + return node; +} // Math class commands except \mathop + + +defineFunction({ + type: "mclass", + names: ["\\mathord", "\\mathbin", "\\mathrel", "\\mathopen", "\\mathclose", "\\mathpunct", "\\mathinner"], + props: { + numArgs: 1 + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + var body = args[0]; + return { + type: "mclass", + mode: parser.mode, + mclass: "m" + funcName.substr(5), + // TODO(kevinb): don't prefix with 'm' + body: defineFunction_ordargument(body), + isCharacterBox: utils.isCharacterBox(body) + }; + }, + htmlBuilder: mclass_htmlBuilder, + mathmlBuilder: mclass_mathmlBuilder +}); +var binrelClass = function binrelClass(arg) { + // \binrel@ spacing varies with (bin|rel|ord) of the atom in the argument. + // (by rendering separately and with {}s before and after, and measuring + // the change in spacing). We'll do roughly the same by detecting the + // atom type directly. + var atom = arg.type === "ordgroup" && arg.body.length ? arg.body[0] : arg; + + if (atom.type === "atom" && (atom.family === "bin" || atom.family === "rel")) { + return "m" + atom.family; + } else { + return "mord"; + } +}; // \@binrel{x}{y} renders like y but as mbin/mrel/mord if x is mbin/mrel/mord. +// This is equivalent to \binrel@{x}\binrel@@{y} in AMSTeX. + +defineFunction({ + type: "mclass", + names: ["\\@binrel"], + props: { + numArgs: 2 + }, + handler: function handler(_ref2, args) { + var parser = _ref2.parser; + return { + type: "mclass", + mode: parser.mode, + mclass: binrelClass(args[0]), + body: [args[1]], + isCharacterBox: utils.isCharacterBox(args[1]) + }; + } +}); // Build a relation or stacked op by placing one symbol on top of another + +defineFunction({ + type: "mclass", + names: ["\\stackrel", "\\overset", "\\underset"], + props: { + numArgs: 2 + }, + handler: function handler(_ref3, args) { + var parser = _ref3.parser, + funcName = _ref3.funcName; + var baseArg = args[1]; + var shiftedArg = args[0]; + var mclass; + + if (funcName !== "\\stackrel") { + // LaTeX applies \binrel spacing to \overset and \underset. + mclass = binrelClass(baseArg); + } else { + mclass = "mrel"; // for \stackrel + } + + var baseOp = { + type: "op", + mode: baseArg.mode, + limits: true, + alwaysHandleSupSub: true, + parentIsSupSub: false, + symbol: false, + suppressBaseShift: funcName !== "\\stackrel", + body: defineFunction_ordargument(baseArg) + }; + var supsub = { + type: "supsub", + mode: shiftedArg.mode, + base: baseOp, + sup: funcName === "\\underset" ? null : shiftedArg, + sub: funcName === "\\underset" ? shiftedArg : null + }; + return { + type: "mclass", + mode: parser.mode, + mclass: mclass, + body: [supsub], + isCharacterBox: utils.isCharacterBox(supsub) + }; + }, + htmlBuilder: mclass_htmlBuilder, + mathmlBuilder: mclass_mathmlBuilder +}); +// CONCATENATED MODULE: ./src/functions/font.js +// TODO(kevinb): implement \\sl and \\sc + + + + + + +var font_htmlBuilder = function htmlBuilder(group, options) { + var font = group.font; + var newOptions = options.withFont(font); + return buildHTML_buildGroup(group.body, newOptions); +}; + +var font_mathmlBuilder = function mathmlBuilder(group, options) { + var font = group.font; + var newOptions = options.withFont(font); + return buildMathML_buildGroup(group.body, newOptions); +}; + +var fontAliases = { + "\\Bbb": "\\mathbb", + "\\bold": "\\mathbf", + "\\frak": "\\mathfrak", + "\\bm": "\\boldsymbol" +}; +defineFunction({ + type: "font", + names: [// styles, except \boldsymbol defined below + "\\mathrm", "\\mathit", "\\mathbf", "\\mathnormal", // families + "\\mathbb", "\\mathcal", "\\mathfrak", "\\mathscr", "\\mathsf", "\\mathtt", // aliases, except \bm defined below + "\\Bbb", "\\bold", "\\frak"], + props: { + numArgs: 1, + greediness: 2 + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + var body = args[0]; + var func = funcName; + + if (func in fontAliases) { + func = fontAliases[func]; + } + + return { + type: "font", + mode: parser.mode, + font: func.slice(1), + body: body + }; + }, + htmlBuilder: font_htmlBuilder, + mathmlBuilder: font_mathmlBuilder +}); +defineFunction({ + type: "mclass", + names: ["\\boldsymbol", "\\bm"], + props: { + numArgs: 1, + greediness: 2 + }, + handler: function handler(_ref2, args) { + var parser = _ref2.parser; + var body = args[0]; + var isCharacterBox = utils.isCharacterBox(body); // amsbsy.sty's \boldsymbol uses \binrel spacing to inherit the + // argument's bin|rel|ord status + + return { + type: "mclass", + mode: parser.mode, + mclass: binrelClass(body), + body: [{ + type: "font", + mode: parser.mode, + font: "boldsymbol", + body: body + }], + isCharacterBox: isCharacterBox + }; + } +}); // Old font changing functions + +defineFunction({ + type: "font", + names: ["\\rm", "\\sf", "\\tt", "\\bf", "\\it"], + props: { + numArgs: 0, + allowedInText: true + }, + handler: function handler(_ref3, args) { + var parser = _ref3.parser, + funcName = _ref3.funcName, + breakOnTokenText = _ref3.breakOnTokenText; + var mode = parser.mode; + var body = parser.parseExpression(true, breakOnTokenText); + var style = "math" + funcName.slice(1); + return { + type: "font", + mode: mode, + font: style, + body: { + type: "ordgroup", + mode: parser.mode, + body: body + } + }; + }, + htmlBuilder: font_htmlBuilder, + mathmlBuilder: font_mathmlBuilder +}); +// CONCATENATED MODULE: ./src/functions/genfrac.js + + + + + + + + + + + +var genfrac_adjustStyle = function adjustStyle(size, originalStyle) { + // Figure out what style this fraction should be in based on the + // function used + var style = originalStyle; + + if (size === "display") { + // Get display style as a default. + // If incoming style is sub/sup, use style.text() to get correct size. + style = style.id >= src_Style.SCRIPT.id ? style.text() : src_Style.DISPLAY; + } else if (size === "text" && style.size === src_Style.DISPLAY.size) { + // We're in a \tfrac but incoming style is displaystyle, so: + style = src_Style.TEXT; + } else if (size === "script") { + style = src_Style.SCRIPT; + } else if (size === "scriptscript") { + style = src_Style.SCRIPTSCRIPT; + } + + return style; +}; + +var genfrac_htmlBuilder = function htmlBuilder(group, options) { + // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e). + var style = genfrac_adjustStyle(group.size, options.style); + var nstyle = style.fracNum(); + var dstyle = style.fracDen(); + var newOptions; + newOptions = options.havingStyle(nstyle); + var numerm = buildHTML_buildGroup(group.numer, newOptions, options); + + if (group.continued) { + // \cfrac inserts a \strut into the numerator. + // Get \strut dimensions from TeXbook page 353. + var hStrut = 8.5 / options.fontMetrics().ptPerEm; + var dStrut = 3.5 / options.fontMetrics().ptPerEm; + numerm.height = numerm.height < hStrut ? hStrut : numerm.height; + numerm.depth = numerm.depth < dStrut ? dStrut : numerm.depth; + } + + newOptions = options.havingStyle(dstyle); + var denomm = buildHTML_buildGroup(group.denom, newOptions, options); + var rule; + var ruleWidth; + var ruleSpacing; + + if (group.hasBarLine) { + if (group.barSize) { + ruleWidth = units_calculateSize(group.barSize, options); + rule = buildCommon.makeLineSpan("frac-line", options, ruleWidth); + } else { + rule = buildCommon.makeLineSpan("frac-line", options); + } + + ruleWidth = rule.height; + ruleSpacing = rule.height; + } else { + rule = null; + ruleWidth = 0; + ruleSpacing = options.fontMetrics().defaultRuleThickness; + } // Rule 15b + + + var numShift; + var clearance; + var denomShift; + + if (style.size === src_Style.DISPLAY.size || group.size === "display") { + numShift = options.fontMetrics().num1; + + if (ruleWidth > 0) { + clearance = 3 * ruleSpacing; + } else { + clearance = 7 * ruleSpacing; + } + + denomShift = options.fontMetrics().denom1; + } else { + if (ruleWidth > 0) { + numShift = options.fontMetrics().num2; + clearance = ruleSpacing; + } else { + numShift = options.fontMetrics().num3; + clearance = 3 * ruleSpacing; + } + + denomShift = options.fontMetrics().denom2; + } + + var frac; + + if (!rule) { + // Rule 15c + var candidateClearance = numShift - numerm.depth - (denomm.height - denomShift); + + if (candidateClearance < clearance) { + numShift += 0.5 * (clearance - candidateClearance); + denomShift += 0.5 * (clearance - candidateClearance); + } + + frac = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: denomm, + shift: denomShift + }, { + type: "elem", + elem: numerm, + shift: -numShift + }] + }, options); + } else { + // Rule 15d + var axisHeight = options.fontMetrics().axisHeight; + + if (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth) < clearance) { + numShift += clearance - (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth)); + } + + if (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift) < clearance) { + denomShift += clearance - (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift)); + } + + var midShift = -(axisHeight - 0.5 * ruleWidth); + frac = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: denomm, + shift: denomShift + }, { + type: "elem", + elem: rule, + shift: midShift + }, { + type: "elem", + elem: numerm, + shift: -numShift + }] + }, options); + } // Since we manually change the style sometimes (with \dfrac or \tfrac), + // account for the possible size change here. + + + newOptions = options.havingStyle(style); + frac.height *= newOptions.sizeMultiplier / options.sizeMultiplier; + frac.depth *= newOptions.sizeMultiplier / options.sizeMultiplier; // Rule 15e + + var delimSize; + + if (style.size === src_Style.DISPLAY.size) { + delimSize = options.fontMetrics().delim1; + } else { + delimSize = options.fontMetrics().delim2; + } + + var leftDelim; + var rightDelim; + + if (group.leftDelim == null) { + leftDelim = makeNullDelimiter(options, ["mopen"]); + } else { + leftDelim = delimiter.customSizedDelim(group.leftDelim, delimSize, true, options.havingStyle(style), group.mode, ["mopen"]); + } + + if (group.continued) { + rightDelim = buildCommon.makeSpan([]); // zero width for \cfrac + } else if (group.rightDelim == null) { + rightDelim = makeNullDelimiter(options, ["mclose"]); + } else { + rightDelim = delimiter.customSizedDelim(group.rightDelim, delimSize, true, options.havingStyle(style), group.mode, ["mclose"]); + } + + return buildCommon.makeSpan(["mord"].concat(newOptions.sizingClasses(options)), [leftDelim, buildCommon.makeSpan(["mfrac"], [frac]), rightDelim], options); +}; + +var genfrac_mathmlBuilder = function mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mfrac", [buildMathML_buildGroup(group.numer, options), buildMathML_buildGroup(group.denom, options)]); + + if (!group.hasBarLine) { + node.setAttribute("linethickness", "0px"); + } else if (group.barSize) { + var ruleWidth = units_calculateSize(group.barSize, options); + node.setAttribute("linethickness", ruleWidth + "em"); + } + + var style = genfrac_adjustStyle(group.size, options.style); + + if (style.size !== options.style.size) { + node = new mathMLTree.MathNode("mstyle", [node]); + var isDisplay = style.size === src_Style.DISPLAY.size ? "true" : "false"; + node.setAttribute("displaystyle", isDisplay); + node.setAttribute("scriptlevel", "0"); + } + + if (group.leftDelim != null || group.rightDelim != null) { + var withDelims = []; + + if (group.leftDelim != null) { + var leftOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group.leftDelim.replace("\\", ""))]); + leftOp.setAttribute("fence", "true"); + withDelims.push(leftOp); + } + + withDelims.push(node); + + if (group.rightDelim != null) { + var rightOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group.rightDelim.replace("\\", ""))]); + rightOp.setAttribute("fence", "true"); + withDelims.push(rightOp); + } + + return buildMathML_makeRow(withDelims); + } + + return node; +}; + +defineFunction({ + type: "genfrac", + names: ["\\cfrac", "\\dfrac", "\\frac", "\\tfrac", "\\dbinom", "\\binom", "\\tbinom", "\\\\atopfrac", // can’t be entered directly + "\\\\bracefrac", "\\\\brackfrac"], + props: { + numArgs: 2, + greediness: 2 + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + var numer = args[0]; + var denom = args[1]; + var hasBarLine; + var leftDelim = null; + var rightDelim = null; + var size = "auto"; + + switch (funcName) { + case "\\cfrac": + case "\\dfrac": + case "\\frac": + case "\\tfrac": + hasBarLine = true; + break; + + case "\\\\atopfrac": + hasBarLine = false; + break; + + case "\\dbinom": + case "\\binom": + case "\\tbinom": + hasBarLine = false; + leftDelim = "("; + rightDelim = ")"; + break; + + case "\\\\bracefrac": + hasBarLine = false; + leftDelim = "\\{"; + rightDelim = "\\}"; + break; + + case "\\\\brackfrac": + hasBarLine = false; + leftDelim = "["; + rightDelim = "]"; + break; + + default: + throw new Error("Unrecognized genfrac command"); + } + + switch (funcName) { + case "\\cfrac": + case "\\dfrac": + case "\\dbinom": + size = "display"; + break; + + case "\\tfrac": + case "\\tbinom": + size = "text"; + break; + } + + return { + type: "genfrac", + mode: parser.mode, + continued: funcName === "\\cfrac", + numer: numer, + denom: denom, + hasBarLine: hasBarLine, + leftDelim: leftDelim, + rightDelim: rightDelim, + size: size, + barSize: null + }; + }, + htmlBuilder: genfrac_htmlBuilder, + mathmlBuilder: genfrac_mathmlBuilder +}); // Infix generalized fractions -- these are not rendered directly, but replaced +// immediately by one of the variants above. + +defineFunction({ + type: "infix", + names: ["\\over", "\\choose", "\\atop", "\\brace", "\\brack"], + props: { + numArgs: 0, + infix: true + }, + handler: function handler(_ref2) { + var parser = _ref2.parser, + funcName = _ref2.funcName, + token = _ref2.token; + var replaceWith; + + switch (funcName) { + case "\\over": + replaceWith = "\\frac"; + break; + + case "\\choose": + replaceWith = "\\binom"; + break; + + case "\\atop": + replaceWith = "\\\\atopfrac"; + break; + + case "\\brace": + replaceWith = "\\\\bracefrac"; + break; + + case "\\brack": + replaceWith = "\\\\brackfrac"; + break; + + default: + throw new Error("Unrecognized infix genfrac command"); + } + + return { + type: "infix", + mode: parser.mode, + replaceWith: replaceWith, + token: token + }; + } +}); +var stylArray = ["display", "text", "script", "scriptscript"]; + +var delimFromValue = function delimFromValue(delimString) { + var delim = null; + + if (delimString.length > 0) { + delim = delimString; + delim = delim === "." ? null : delim; + } + + return delim; +}; + +defineFunction({ + type: "genfrac", + names: ["\\genfrac"], + props: { + numArgs: 6, + greediness: 6, + argTypes: ["math", "math", "size", "text", "math", "math"] + }, + handler: function handler(_ref3, args) { + var parser = _ref3.parser; + var numer = args[4]; + var denom = args[5]; // Look into the parse nodes to get the desired delimiters. + + var leftNode = checkNodeType(args[0], "atom"); + + if (leftNode) { + leftNode = assertAtomFamily(args[0], "open"); + } + + var leftDelim = leftNode ? delimFromValue(leftNode.text) : null; + var rightNode = checkNodeType(args[1], "atom"); + + if (rightNode) { + rightNode = assertAtomFamily(args[1], "close"); + } + + var rightDelim = rightNode ? delimFromValue(rightNode.text) : null; + var barNode = assertNodeType(args[2], "size"); + var hasBarLine; + var barSize = null; + + if (barNode.isBlank) { + // \genfrac acts differently than \above. + // \genfrac treats an empty size group as a signal to use a + // standard bar size. \above would see size = 0 and omit the bar. + hasBarLine = true; + } else { + barSize = barNode.value; + hasBarLine = barSize.number > 0; + } // Find out if we want displaystyle, textstyle, etc. + + + var size = "auto"; + var styl = checkNodeType(args[3], "ordgroup"); + + if (styl) { + if (styl.body.length > 0) { + var textOrd = assertNodeType(styl.body[0], "textord"); + size = stylArray[Number(textOrd.text)]; + } + } else { + styl = assertNodeType(args[3], "textord"); + size = stylArray[Number(styl.text)]; + } + + return { + type: "genfrac", + mode: parser.mode, + numer: numer, + denom: denom, + continued: false, + hasBarLine: hasBarLine, + barSize: barSize, + leftDelim: leftDelim, + rightDelim: rightDelim, + size: size + }; + }, + htmlBuilder: genfrac_htmlBuilder, + mathmlBuilder: genfrac_mathmlBuilder +}); // \above is an infix fraction that also defines a fraction bar size. + +defineFunction({ + type: "infix", + names: ["\\above"], + props: { + numArgs: 1, + argTypes: ["size"], + infix: true + }, + handler: function handler(_ref4, args) { + var parser = _ref4.parser, + funcName = _ref4.funcName, + token = _ref4.token; + return { + type: "infix", + mode: parser.mode, + replaceWith: "\\\\abovefrac", + size: assertNodeType(args[0], "size").value, + token: token + }; + } +}); +defineFunction({ + type: "genfrac", + names: ["\\\\abovefrac"], + props: { + numArgs: 3, + argTypes: ["math", "size", "math"] + }, + handler: function handler(_ref5, args) { + var parser = _ref5.parser, + funcName = _ref5.funcName; + var numer = args[0]; + var barSize = assert(assertNodeType(args[1], "infix").size); + var denom = args[2]; + var hasBarLine = barSize.number > 0; + return { + type: "genfrac", + mode: parser.mode, + numer: numer, + denom: denom, + continued: false, + hasBarLine: hasBarLine, + barSize: barSize, + leftDelim: null, + rightDelim: null, + size: "auto" + }; + }, + htmlBuilder: genfrac_htmlBuilder, + mathmlBuilder: genfrac_mathmlBuilder +}); +// CONCATENATED MODULE: ./src/functions/horizBrace.js + + + + + + + + +// NOTE: Unlike most `htmlBuilder`s, this one handles not only "horizBrace", but +var horizBrace_htmlBuilder = function htmlBuilder(grp, options) { + var style = options.style; // Pull out the `ParseNode<"horizBrace">` if `grp` is a "supsub" node. + + var supSubGroup; + var group; + var supSub = checkNodeType(grp, "supsub"); + + if (supSub) { + // Ref: LaTeX source2e: }}}}\limits} + // i.e. LaTeX treats the brace similar to an op and passes it + // with \limits, so we need to assign supsub style. + supSubGroup = supSub.sup ? buildHTML_buildGroup(supSub.sup, options.havingStyle(style.sup()), options) : buildHTML_buildGroup(supSub.sub, options.havingStyle(style.sub()), options); + group = assertNodeType(supSub.base, "horizBrace"); + } else { + group = assertNodeType(grp, "horizBrace"); + } // Build the base group + + + var body = buildHTML_buildGroup(group.base, options.havingBaseStyle(src_Style.DISPLAY)); // Create the stretchy element + + var braceBody = stretchy.svgSpan(group, options); // Generate the vlist, with the appropriate kerns ┏━━━━━━━━┓ + // This first vlist contains the content and the brace: equation + + var vlist; + + if (group.isOver) { + vlist = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: body + }, { + type: "kern", + size: 0.1 + }, { + type: "elem", + elem: braceBody + }] + }, options); // $FlowFixMe: Replace this with passing "svg-align" into makeVList. + + vlist.children[0].children[0].children[1].classes.push("svg-align"); + } else { + vlist = buildCommon.makeVList({ + positionType: "bottom", + positionData: body.depth + 0.1 + braceBody.height, + children: [{ + type: "elem", + elem: braceBody + }, { + type: "kern", + size: 0.1 + }, { + type: "elem", + elem: body + }] + }, options); // $FlowFixMe: Replace this with passing "svg-align" into makeVList. + + vlist.children[0].children[0].children[0].classes.push("svg-align"); + } + + if (supSubGroup) { + // To write the supsub, wrap the first vlist in another vlist: + // They can't all go in the same vlist, because the note might be + // wider than the equation. We want the equation to control the + // brace width. + // note long note long note + // ┏━━━━━━━━┓ or ┏━━━┓ not ┏━━━━━━━━━┓ + // equation eqn eqn + var vSpan = buildCommon.makeSpan(["mord", group.isOver ? "mover" : "munder"], [vlist], options); + + if (group.isOver) { + vlist = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: vSpan + }, { + type: "kern", + size: 0.2 + }, { + type: "elem", + elem: supSubGroup + }] + }, options); + } else { + vlist = buildCommon.makeVList({ + positionType: "bottom", + positionData: vSpan.depth + 0.2 + supSubGroup.height + supSubGroup.depth, + children: [{ + type: "elem", + elem: supSubGroup + }, { + type: "kern", + size: 0.2 + }, { + type: "elem", + elem: vSpan + }] + }, options); + } + } + + return buildCommon.makeSpan(["mord", group.isOver ? "mover" : "munder"], [vlist], options); +}; + +var horizBrace_mathmlBuilder = function mathmlBuilder(group, options) { + var accentNode = stretchy.mathMLnode(group.label); + return new mathMLTree.MathNode(group.isOver ? "mover" : "munder", [buildMathML_buildGroup(group.base, options), accentNode]); +}; // Horizontal stretchy braces + + +defineFunction({ + type: "horizBrace", + names: ["\\overbrace", "\\underbrace"], + props: { + numArgs: 1 + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + return { + type: "horizBrace", + mode: parser.mode, + label: funcName, + isOver: /^\\over/.test(funcName), + base: args[0] + }; + }, + htmlBuilder: horizBrace_htmlBuilder, + mathmlBuilder: horizBrace_mathmlBuilder +}); +// CONCATENATED MODULE: ./src/functions/href.js + + + + + + +defineFunction({ + type: "href", + names: ["\\href"], + props: { + numArgs: 2, + argTypes: ["url", "original"], + allowedInText: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + var body = args[1]; + var href = assertNodeType(args[0], "url").url; + + if (!parser.settings.isTrusted({ + command: "\\href", + url: href + })) { + return parser.formatUnsupportedCmd("\\href"); + } + + return { + type: "href", + mode: parser.mode, + href: href, + body: defineFunction_ordargument(body) + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var elements = buildHTML_buildExpression(group.body, options, false); + return buildCommon.makeAnchor(group.href, [], elements, options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var math = buildExpressionRow(group.body, options); + + if (!(math instanceof mathMLTree_MathNode)) { + math = new mathMLTree_MathNode("mrow", [math]); + } + + math.setAttribute("href", group.href); + return math; + } +}); +defineFunction({ + type: "href", + names: ["\\url"], + props: { + numArgs: 1, + argTypes: ["url"], + allowedInText: true + }, + handler: function handler(_ref2, args) { + var parser = _ref2.parser; + var href = assertNodeType(args[0], "url").url; + + if (!parser.settings.isTrusted({ + command: "\\url", + url: href + })) { + return parser.formatUnsupportedCmd("\\url"); + } + + var chars = []; + + for (var i = 0; i < href.length; i++) { + var c = href[i]; + + if (c === "~") { + c = "\\textasciitilde"; + } + + chars.push({ + type: "textord", + mode: "text", + text: c + }); + } + + var body = { + type: "text", + mode: parser.mode, + font: "\\texttt", + body: chars + }; + return { + type: "href", + mode: parser.mode, + href: href, + body: defineFunction_ordargument(body) + }; + } +}); +// CONCATENATED MODULE: ./src/functions/htmlmathml.js + + + + +defineFunction({ + type: "htmlmathml", + names: ["\\html@mathml"], + props: { + numArgs: 2, + allowedInText: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + return { + type: "htmlmathml", + mode: parser.mode, + html: defineFunction_ordargument(args[0]), + mathml: defineFunction_ordargument(args[1]) + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var elements = buildHTML_buildExpression(group.html, options, false); + return buildCommon.makeFragment(elements); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + return buildExpressionRow(group.mathml, options); + } +}); +// CONCATENATED MODULE: ./src/functions/includegraphics.js + + + + + + + +var includegraphics_sizeData = function sizeData(str) { + if (/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(str)) { + // str is a number with no unit specified. + // default unit is bp, per graphix package. + return { + number: +str, + unit: "bp" + }; + } else { + var match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(str); + + if (!match) { + throw new src_ParseError("Invalid size: '" + str + "' in \\includegraphics"); + } + + var data = { + number: +(match[1] + match[2]), + // sign + magnitude, cast to number + unit: match[3] + }; + + if (!validUnit(data)) { + throw new src_ParseError("Invalid unit: '" + data.unit + "' in \\includegraphics."); + } + + return data; + } +}; + +defineFunction({ + type: "includegraphics", + names: ["\\includegraphics"], + props: { + numArgs: 1, + numOptionalArgs: 1, + argTypes: ["raw", "url"], + allowedInText: false + }, + handler: function handler(_ref, args, optArgs) { + var parser = _ref.parser; + var width = { + number: 0, + unit: "em" + }; + var height = { + number: 0.9, + unit: "em" + }; // sorta character sized. + + var totalheight = { + number: 0, + unit: "em" + }; + var alt = ""; + + if (optArgs[0]) { + var attributeStr = assertNodeType(optArgs[0], "raw").string; // Parser.js does not parse key/value pairs. We get a string. + + var attributes = attributeStr.split(","); + + for (var i = 0; i < attributes.length; i++) { + var keyVal = attributes[i].split("="); + + if (keyVal.length === 2) { + var str = keyVal[1].trim(); + + switch (keyVal[0].trim()) { + case "alt": + alt = str; + break; + + case "width": + width = includegraphics_sizeData(str); + break; + + case "height": + height = includegraphics_sizeData(str); + break; + + case "totalheight": + totalheight = includegraphics_sizeData(str); + break; + + default: + throw new src_ParseError("Invalid key: '" + keyVal[0] + "' in \\includegraphics."); + } + } + } + } + + var src = assertNodeType(args[0], "url").url; + + if (alt === "") { + // No alt given. Use the file name. Strip away the path. + alt = src; + alt = alt.replace(/^.*[\\/]/, ''); + alt = alt.substring(0, alt.lastIndexOf('.')); + } + + if (!parser.settings.isTrusted({ + command: "\\includegraphics", + url: src + })) { + return parser.formatUnsupportedCmd("\\includegraphics"); + } + + return { + type: "includegraphics", + mode: parser.mode, + alt: alt, + width: width, + height: height, + totalheight: totalheight, + src: src + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var height = units_calculateSize(group.height, options); + var depth = 0; + + if (group.totalheight.number > 0) { + depth = units_calculateSize(group.totalheight, options) - height; + depth = Number(depth.toFixed(2)); + } + + var width = 0; + + if (group.width.number > 0) { + width = units_calculateSize(group.width, options); + } + + var style = { + height: height + depth + "em" + }; + + if (width > 0) { + style.width = width + "em"; + } + + if (depth > 0) { + style.verticalAlign = -depth + "em"; + } + + var node = new domTree_Img(group.src, group.alt, style); + node.height = height; + node.depth = depth; + return node; + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mglyph", []); + node.setAttribute("alt", group.alt); + var height = units_calculateSize(group.height, options); + var depth = 0; + + if (group.totalheight.number > 0) { + depth = units_calculateSize(group.totalheight, options) - height; + depth = depth.toFixed(2); + node.setAttribute("valign", "-" + depth + "em"); + } + + node.setAttribute("height", height + depth + "em"); + + if (group.width.number > 0) { + var width = units_calculateSize(group.width, options); + node.setAttribute("width", width + "em"); + } + + node.setAttribute("src", group.src); + return node; + } +}); +// CONCATENATED MODULE: ./src/functions/kern.js +// Horizontal spacing commands + + + + + // TODO: \hskip and \mskip should support plus and minus in lengths + +defineFunction({ + type: "kern", + names: ["\\kern", "\\mkern", "\\hskip", "\\mskip"], + props: { + numArgs: 1, + argTypes: ["size"], + allowedInText: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + var size = assertNodeType(args[0], "size"); + + if (parser.settings.strict) { + var mathFunction = funcName[1] === 'm'; // \mkern, \mskip + + var muUnit = size.value.unit === 'mu'; + + if (mathFunction) { + if (!muUnit) { + parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " supports only mu units, " + ("not " + size.value.unit + " units")); + } + + if (parser.mode !== "math") { + parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " works only in math mode"); + } + } else { + // !mathFunction + if (muUnit) { + parser.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + funcName + " doesn't support mu units"); + } + } + } + + return { + type: "kern", + mode: parser.mode, + dimension: size.value + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + return buildCommon.makeGlue(group.dimension, options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var dimension = units_calculateSize(group.dimension, options); + return new mathMLTree.SpaceNode(dimension); + } +}); +// CONCATENATED MODULE: ./src/functions/lap.js +// Horizontal overlap functions + + + + + +defineFunction({ + type: "lap", + names: ["\\mathllap", "\\mathrlap", "\\mathclap"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + var body = args[0]; + return { + type: "lap", + mode: parser.mode, + alignment: funcName.slice(5), + body: body + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + // mathllap, mathrlap, mathclap + var inner; + + if (group.alignment === "clap") { + // ref: https://www.math.lsu.edu/~aperlis/publications/mathclap/ + inner = buildCommon.makeSpan([], [buildHTML_buildGroup(group.body, options)]); // wrap, since CSS will center a .clap > .inner > span + + inner = buildCommon.makeSpan(["inner"], [inner], options); + } else { + inner = buildCommon.makeSpan(["inner"], [buildHTML_buildGroup(group.body, options)]); + } + + var fix = buildCommon.makeSpan(["fix"], []); + var node = buildCommon.makeSpan([group.alignment], [inner, fix], options); // At this point, we have correctly set horizontal alignment of the + // two items involved in the lap. + // Next, use a strut to set the height of the HTML bounding box. + // Otherwise, a tall argument may be misplaced. + + var strut = buildCommon.makeSpan(["strut"]); + strut.style.height = node.height + node.depth + "em"; + strut.style.verticalAlign = -node.depth + "em"; + node.children.unshift(strut); // Next, prevent vertical misplacement when next to something tall. + + node = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: node + }] + }, options); // Get the horizontal spacing correct relative to adjacent items. + + return buildCommon.makeSpan(["mord"], [node], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + // mathllap, mathrlap, mathclap + var node = new mathMLTree.MathNode("mpadded", [buildMathML_buildGroup(group.body, options)]); + + if (group.alignment !== "rlap") { + var offset = group.alignment === "llap" ? "-1" : "-0.5"; + node.setAttribute("lspace", offset + "width"); + } + + node.setAttribute("width", "0px"); + return node; + } +}); +// CONCATENATED MODULE: ./src/functions/math.js + + // Switching from text mode back to math mode + +defineFunction({ + type: "styling", + names: ["\\(", "$"], + props: { + numArgs: 0, + allowedInText: true, + allowedInMath: false + }, + handler: function handler(_ref, args) { + var funcName = _ref.funcName, + parser = _ref.parser; + var outerMode = parser.mode; + parser.switchMode("math"); + var close = funcName === "\\(" ? "\\)" : "$"; + var body = parser.parseExpression(false, close); + parser.expect(close); + parser.switchMode(outerMode); + return { + type: "styling", + mode: parser.mode, + style: "text", + body: body + }; + } +}); // Check for extra closing math delimiters + +defineFunction({ + type: "text", + // Doesn't matter what this is. + names: ["\\)", "\\]"], + props: { + numArgs: 0, + allowedInText: true, + allowedInMath: false + }, + handler: function handler(context, args) { + throw new src_ParseError("Mismatched " + context.funcName); + } +}); +// CONCATENATED MODULE: ./src/functions/mathchoice.js + + + + + + +var mathchoice_chooseMathStyle = function chooseMathStyle(group, options) { + switch (options.style.size) { + case src_Style.DISPLAY.size: + return group.display; + + case src_Style.TEXT.size: + return group.text; + + case src_Style.SCRIPT.size: + return group.script; + + case src_Style.SCRIPTSCRIPT.size: + return group.scriptscript; + + default: + return group.text; + } +}; + +defineFunction({ + type: "mathchoice", + names: ["\\mathchoice"], + props: { + numArgs: 4 + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + return { + type: "mathchoice", + mode: parser.mode, + display: defineFunction_ordargument(args[0]), + text: defineFunction_ordargument(args[1]), + script: defineFunction_ordargument(args[2]), + scriptscript: defineFunction_ordargument(args[3]) + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var body = mathchoice_chooseMathStyle(group, options); + var elements = buildHTML_buildExpression(body, options, false); + return buildCommon.makeFragment(elements); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var body = mathchoice_chooseMathStyle(group, options); + return buildExpressionRow(body, options); + } +}); +// CONCATENATED MODULE: ./src/functions/utils/assembleSupSub.js + + +// For an operator with limits, assemble the base, sup, and sub into a span. +var assembleSupSub_assembleSupSub = function assembleSupSub(base, supGroup, subGroup, options, style, slant, baseShift) { + // IE 8 clips \int if it is in a display: inline-block. We wrap it + // in a new span so it is an inline, and works. + base = buildCommon.makeSpan([], [base]); + var sub; + var sup; // We manually have to handle the superscripts and subscripts. This, + // aside from the kern calculations, is copied from supsub. + + if (supGroup) { + var elem = buildHTML_buildGroup(supGroup, options.havingStyle(style.sup()), options); + sup = { + elem: elem, + kern: Math.max(options.fontMetrics().bigOpSpacing1, options.fontMetrics().bigOpSpacing3 - elem.depth) + }; + } + + if (subGroup) { + var _elem = buildHTML_buildGroup(subGroup, options.havingStyle(style.sub()), options); + + sub = { + elem: _elem, + kern: Math.max(options.fontMetrics().bigOpSpacing2, options.fontMetrics().bigOpSpacing4 - _elem.height) + }; + } // Build the final group as a vlist of the possible subscript, base, + // and possible superscript. + + + var finalGroup; + + if (sup && sub) { + var bottom = options.fontMetrics().bigOpSpacing5 + sub.elem.height + sub.elem.depth + sub.kern + base.depth + baseShift; + finalGroup = buildCommon.makeVList({ + positionType: "bottom", + positionData: bottom, + children: [{ + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }, { + type: "elem", + elem: sub.elem, + marginLeft: -slant + "em" + }, { + type: "kern", + size: sub.kern + }, { + type: "elem", + elem: base + }, { + type: "kern", + size: sup.kern + }, { + type: "elem", + elem: sup.elem, + marginLeft: slant + "em" + }, { + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }] + }, options); + } else if (sub) { + var top = base.height - baseShift; // Shift the limits by the slant of the symbol. Note + // that we are supposed to shift the limits by 1/2 of the slant, + // but since we are centering the limits adding a full slant of + // margin will shift by 1/2 that. + + finalGroup = buildCommon.makeVList({ + positionType: "top", + positionData: top, + children: [{ + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }, { + type: "elem", + elem: sub.elem, + marginLeft: -slant + "em" + }, { + type: "kern", + size: sub.kern + }, { + type: "elem", + elem: base + }] + }, options); + } else if (sup) { + var _bottom = base.depth + baseShift; + + finalGroup = buildCommon.makeVList({ + positionType: "bottom", + positionData: _bottom, + children: [{ + type: "elem", + elem: base + }, { + type: "kern", + size: sup.kern + }, { + type: "elem", + elem: sup.elem, + marginLeft: slant + "em" + }, { + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }] + }, options); + } else { + // This case probably shouldn't occur (this would mean the + // supsub was sending us a group with no superscript or + // subscript) but be safe. + return base; + } + + return buildCommon.makeSpan(["mop", "op-limits"], [finalGroup], options); +}; +// CONCATENATED MODULE: ./src/functions/op.js +// Limits, symbols + + + + + + + + + + +// Most operators have a large successor symbol, but these don't. +var noSuccessor = ["\\smallint"]; // NOTE: Unlike most `htmlBuilder`s, this one handles not only "op", but also +// "supsub" since some of them (like \int) can affect super/subscripting. + +var op_htmlBuilder = function htmlBuilder(grp, options) { + // Operators are handled in the TeXbook pg. 443-444, rule 13(a). + var supGroup; + var subGroup; + var hasLimits = false; + var group; + var supSub = checkNodeType(grp, "supsub"); + + if (supSub) { + // If we have limits, supsub will pass us its group to handle. Pull + // out the superscript and subscript and set the group to the op in + // its base. + supGroup = supSub.sup; + subGroup = supSub.sub; + group = assertNodeType(supSub.base, "op"); + hasLimits = true; + } else { + group = assertNodeType(grp, "op"); + } + + var style = options.style; + var large = false; + + if (style.size === src_Style.DISPLAY.size && group.symbol && !utils.contains(noSuccessor, group.name)) { + // Most symbol operators get larger in displaystyle (rule 13) + large = true; + } + + var base; + + if (group.symbol) { + // If this is a symbol, create the symbol. + var fontName = large ? "Size2-Regular" : "Size1-Regular"; + var stash = ""; + + if (group.name === "\\oiint" || group.name === "\\oiiint") { + // No font glyphs yet, so use a glyph w/o the oval. + // TODO: When font glyphs are available, delete this code. + stash = group.name.substr(1); // $FlowFixMe + + group.name = stash === "oiint" ? "\\iint" : "\\iiint"; + } + + base = buildCommon.makeSymbol(group.name, fontName, "math", options, ["mop", "op-symbol", large ? "large-op" : "small-op"]); + + if (stash.length > 0) { + // We're in \oiint or \oiiint. Overlay the oval. + // TODO: When font glyphs are available, delete this code. + var italic = base.italic; + var oval = buildCommon.staticSvg(stash + "Size" + (large ? "2" : "1"), options); + base = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: base, + shift: 0 + }, { + type: "elem", + elem: oval, + shift: large ? 0.08 : 0 + }] + }, options); // $FlowFixMe + + group.name = "\\" + stash; + base.classes.unshift("mop"); // $FlowFixMe + + base.italic = italic; + } + } else if (group.body) { + // If this is a list, compose that list. + var inner = buildHTML_buildExpression(group.body, options, true); + + if (inner.length === 1 && inner[0] instanceof domTree_SymbolNode) { + base = inner[0]; + base.classes[0] = "mop"; // replace old mclass + } else { + base = buildCommon.makeSpan(["mop"], buildCommon.tryCombineChars(inner), options); + } + } else { + // Otherwise, this is a text operator. Build the text from the + // operator's name. + // TODO(emily): Add a space in the middle of some of these + // operators, like \limsup + var output = []; + + for (var i = 1; i < group.name.length; i++) { + output.push(buildCommon.mathsym(group.name[i], group.mode, options)); + } + + base = buildCommon.makeSpan(["mop"], output, options); + } // If content of op is a single symbol, shift it vertically. + + + var baseShift = 0; + var slant = 0; + + if ((base instanceof domTree_SymbolNode || group.name === "\\oiint" || group.name === "\\oiiint") && !group.suppressBaseShift) { + // We suppress the shift of the base of \overset and \underset. Otherwise, + // shift the symbol so its center lies on the axis (rule 13). It + // appears that our fonts have the centers of the symbols already + // almost on the axis, so these numbers are very small. Note we + // don't actually apply this here, but instead it is used either in + // the vlist creation or separately when there are no limits. + baseShift = (base.height - base.depth) / 2 - options.fontMetrics().axisHeight; // The slant of the symbol is just its italic correction. + // $FlowFixMe + + slant = base.italic; + } + + if (hasLimits) { + return assembleSupSub_assembleSupSub(base, supGroup, subGroup, options, style, slant, baseShift); + } else { + if (baseShift) { + base.style.position = "relative"; + base.style.top = baseShift + "em"; + } + + return base; + } +}; + +var op_mathmlBuilder = function mathmlBuilder(group, options) { + var node; + + if (group.symbol) { + // This is a symbol. Just add the symbol. + node = new mathMLTree_MathNode("mo", [buildMathML_makeText(group.name, group.mode)]); + + if (utils.contains(noSuccessor, group.name)) { + node.setAttribute("largeop", "false"); + } + } else if (group.body) { + // This is an operator with children. Add them. + node = new mathMLTree_MathNode("mo", buildMathML_buildExpression(group.body, options)); + } else { + // This is a text operator. Add all of the characters from the + // operator's name. + node = new mathMLTree_MathNode("mi", [new mathMLTree_TextNode(group.name.slice(1))]); // Append an . + // ref: https://www.w3.org/TR/REC-MathML/chap3_2.html#sec3.2.4 + + var operator = new mathMLTree_MathNode("mo", [buildMathML_makeText("\u2061", "text")]); + + if (group.parentIsSupSub) { + node = new mathMLTree_MathNode("mo", [node, operator]); + } else { + node = newDocumentFragment([node, operator]); + } + } + + return node; +}; + +var singleCharBigOps = { + "\u220F": "\\prod", + "\u2210": "\\coprod", + "\u2211": "\\sum", + "\u22C0": "\\bigwedge", + "\u22C1": "\\bigvee", + "\u22C2": "\\bigcap", + "\u22C3": "\\bigcup", + "\u2A00": "\\bigodot", + "\u2A01": "\\bigoplus", + "\u2A02": "\\bigotimes", + "\u2A04": "\\biguplus", + "\u2A06": "\\bigsqcup" +}; +defineFunction({ + type: "op", + names: ["\\coprod", "\\bigvee", "\\bigwedge", "\\biguplus", "\\bigcap", "\\bigcup", "\\intop", "\\prod", "\\sum", "\\bigotimes", "\\bigoplus", "\\bigodot", "\\bigsqcup", "\\smallint", "\u220F", "\u2210", "\u2211", "\u22C0", "\u22C1", "\u22C2", "\u22C3", "\u2A00", "\u2A01", "\u2A02", "\u2A04", "\u2A06"], + props: { + numArgs: 0 + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + var fName = funcName; + + if (fName.length === 1) { + fName = singleCharBigOps[fName]; + } + + return { + type: "op", + mode: parser.mode, + limits: true, + parentIsSupSub: false, + symbol: true, + name: fName + }; + }, + htmlBuilder: op_htmlBuilder, + mathmlBuilder: op_mathmlBuilder +}); // Note: calling defineFunction with a type that's already been defined only +// works because the same htmlBuilder and mathmlBuilder are being used. + +defineFunction({ + type: "op", + names: ["\\mathop"], + props: { + numArgs: 1 + }, + handler: function handler(_ref2, args) { + var parser = _ref2.parser; + var body = args[0]; + return { + type: "op", + mode: parser.mode, + limits: false, + parentIsSupSub: false, + symbol: false, + body: defineFunction_ordargument(body) + }; + }, + htmlBuilder: op_htmlBuilder, + mathmlBuilder: op_mathmlBuilder +}); // There are 2 flags for operators; whether they produce limits in +// displaystyle, and whether they are symbols and should grow in +// displaystyle. These four groups cover the four possible choices. + +var singleCharIntegrals = { + "\u222B": "\\int", + "\u222C": "\\iint", + "\u222D": "\\iiint", + "\u222E": "\\oint", + "\u222F": "\\oiint", + "\u2230": "\\oiiint" +}; // No limits, not symbols + +defineFunction({ + type: "op", + names: ["\\arcsin", "\\arccos", "\\arctan", "\\arctg", "\\arcctg", "\\arg", "\\ch", "\\cos", "\\cosec", "\\cosh", "\\cot", "\\cotg", "\\coth", "\\csc", "\\ctg", "\\cth", "\\deg", "\\dim", "\\exp", "\\hom", "\\ker", "\\lg", "\\ln", "\\log", "\\sec", "\\sin", "\\sinh", "\\sh", "\\tan", "\\tanh", "\\tg", "\\th"], + props: { + numArgs: 0 + }, + handler: function handler(_ref3) { + var parser = _ref3.parser, + funcName = _ref3.funcName; + return { + type: "op", + mode: parser.mode, + limits: false, + parentIsSupSub: false, + symbol: false, + name: funcName + }; + }, + htmlBuilder: op_htmlBuilder, + mathmlBuilder: op_mathmlBuilder +}); // Limits, not symbols + +defineFunction({ + type: "op", + names: ["\\det", "\\gcd", "\\inf", "\\lim", "\\max", "\\min", "\\Pr", "\\sup"], + props: { + numArgs: 0 + }, + handler: function handler(_ref4) { + var parser = _ref4.parser, + funcName = _ref4.funcName; + return { + type: "op", + mode: parser.mode, + limits: true, + parentIsSupSub: false, + symbol: false, + name: funcName + }; + }, + htmlBuilder: op_htmlBuilder, + mathmlBuilder: op_mathmlBuilder +}); // No limits, symbols + +defineFunction({ + type: "op", + names: ["\\int", "\\iint", "\\iiint", "\\oint", "\\oiint", "\\oiiint", "\u222B", "\u222C", "\u222D", "\u222E", "\u222F", "\u2230"], + props: { + numArgs: 0 + }, + handler: function handler(_ref5) { + var parser = _ref5.parser, + funcName = _ref5.funcName; + var fName = funcName; + + if (fName.length === 1) { + fName = singleCharIntegrals[fName]; + } + + return { + type: "op", + mode: parser.mode, + limits: false, + parentIsSupSub: false, + symbol: true, + name: fName + }; + }, + htmlBuilder: op_htmlBuilder, + mathmlBuilder: op_mathmlBuilder +}); +// CONCATENATED MODULE: ./src/functions/operatorname.js + + + + + + + + +// NOTE: Unlike most `htmlBuilder`s, this one handles not only +// "operatorname", but also "supsub" since \operatorname* can +var operatorname_htmlBuilder = function htmlBuilder(grp, options) { + // Operators are handled in the TeXbook pg. 443-444, rule 13(a). + var supGroup; + var subGroup; + var hasLimits = false; + var group; + var supSub = checkNodeType(grp, "supsub"); + + if (supSub) { + // If we have limits, supsub will pass us its group to handle. Pull + // out the superscript and subscript and set the group to the op in + // its base. + supGroup = supSub.sup; + subGroup = supSub.sub; + group = assertNodeType(supSub.base, "operatorname"); + hasLimits = true; + } else { + group = assertNodeType(grp, "operatorname"); + } + + var base; + + if (group.body.length > 0) { + var body = group.body.map(function (child) { + // $FlowFixMe: Check if the node has a string `text` property. + var childText = child.text; + + if (typeof childText === "string") { + return { + type: "textord", + mode: child.mode, + text: childText + }; + } else { + return child; + } + }); // Consolidate function names into symbol characters. + + var expression = buildHTML_buildExpression(body, options.withFont("mathrm"), true); + + for (var i = 0; i < expression.length; i++) { + var child = expression[i]; + + if (child instanceof domTree_SymbolNode) { + // Per amsopn package, + // change minus to hyphen and \ast to asterisk + child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*"); + } + } + + base = buildCommon.makeSpan(["mop"], expression, options); + } else { + base = buildCommon.makeSpan(["mop"], [], options); + } + + if (hasLimits) { + return assembleSupSub_assembleSupSub(base, supGroup, subGroup, options, options.style, 0, 0); + } else { + return base; + } +}; + +var operatorname_mathmlBuilder = function mathmlBuilder(group, options) { + // The steps taken here are similar to the html version. + var expression = buildMathML_buildExpression(group.body, options.withFont("mathrm")); // Is expression a string or has it something like a fraction? + + var isAllString = true; // default + + for (var i = 0; i < expression.length; i++) { + var node = expression[i]; + + if (node instanceof mathMLTree.SpaceNode) {// Do nothing + } else if (node instanceof mathMLTree.MathNode) { + switch (node.type) { + case "mi": + case "mn": + case "ms": + case "mspace": + case "mtext": + break; + // Do nothing yet. + + case "mo": + { + var child = node.children[0]; + + if (node.children.length === 1 && child instanceof mathMLTree.TextNode) { + child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*"); + } else { + isAllString = false; + } + + break; + } + + default: + isAllString = false; + } + } else { + isAllString = false; + } + } + + if (isAllString) { + // Write a single TextNode instead of multiple nested tags. + var word = expression.map(function (node) { + return node.toText(); + }).join(""); + expression = [new mathMLTree.TextNode(word)]; + } + + var identifier = new mathMLTree.MathNode("mi", expression); + identifier.setAttribute("mathvariant", "normal"); // \u2061 is the same as ⁡ + // ref: https://www.w3schools.com/charsets/ref_html_entities_a.asp + + var operator = new mathMLTree.MathNode("mo", [buildMathML_makeText("\u2061", "text")]); + + if (group.parentIsSupSub) { + return new mathMLTree.MathNode("mo", [identifier, operator]); + } else { + return mathMLTree.newDocumentFragment([identifier, operator]); + } +}; // \operatorname +// amsopn.dtx: \mathop{#1\kern\z@\operator@font#3}\newmcodes@ + + +defineFunction({ + type: "operatorname", + names: ["\\operatorname", "\\operatorname*"], + props: { + numArgs: 1 + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + var body = args[0]; + return { + type: "operatorname", + mode: parser.mode, + body: defineFunction_ordargument(body), + alwaysHandleSupSub: funcName === "\\operatorname*", + limits: false, + parentIsSupSub: false + }; + }, + htmlBuilder: operatorname_htmlBuilder, + mathmlBuilder: operatorname_mathmlBuilder +}); +// CONCATENATED MODULE: ./src/functions/ordgroup.js + + + + +defineFunctionBuilders({ + type: "ordgroup", + htmlBuilder: function htmlBuilder(group, options) { + if (group.semisimple) { + return buildCommon.makeFragment(buildHTML_buildExpression(group.body, options, false)); + } + + return buildCommon.makeSpan(["mord"], buildHTML_buildExpression(group.body, options, true), options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + return buildExpressionRow(group.body, options, true); + } +}); +// CONCATENATED MODULE: ./src/functions/overline.js + + + + + +defineFunction({ + type: "overline", + names: ["\\overline"], + props: { + numArgs: 1 + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + var body = args[0]; + return { + type: "overline", + mode: parser.mode, + body: body + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + // Overlines are handled in the TeXbook pg 443, Rule 9. + // Build the inner group in the cramped style. + var innerGroup = buildHTML_buildGroup(group.body, options.havingCrampedStyle()); // Create the line above the body + + var line = buildCommon.makeLineSpan("overline-line", options); // Generate the vlist, with the appropriate kerns + + var defaultRuleThickness = options.fontMetrics().defaultRuleThickness; + var vlist = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: innerGroup + }, { + type: "kern", + size: 3 * defaultRuleThickness + }, { + type: "elem", + elem: line + }, { + type: "kern", + size: defaultRuleThickness + }] + }, options); + return buildCommon.makeSpan(["mord", "overline"], [vlist], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var operator = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode("\u203E")]); + operator.setAttribute("stretchy", "true"); + var node = new mathMLTree.MathNode("mover", [buildMathML_buildGroup(group.body, options), operator]); + node.setAttribute("accent", "true"); + return node; + } +}); +// CONCATENATED MODULE: ./src/functions/phantom.js + + + + + +defineFunction({ + type: "phantom", + names: ["\\phantom"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + var body = args[0]; + return { + type: "phantom", + mode: parser.mode, + body: defineFunction_ordargument(body) + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var elements = buildHTML_buildExpression(group.body, options.withPhantom(), false); // \phantom isn't supposed to affect the elements it contains. + // See "color" for more details. + + return buildCommon.makeFragment(elements); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var inner = buildMathML_buildExpression(group.body, options); + return new mathMLTree.MathNode("mphantom", inner); + } +}); +defineFunction({ + type: "hphantom", + names: ["\\hphantom"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: function handler(_ref2, args) { + var parser = _ref2.parser; + var body = args[0]; + return { + type: "hphantom", + mode: parser.mode, + body: body + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var node = buildCommon.makeSpan([], [buildHTML_buildGroup(group.body, options.withPhantom())]); + node.height = 0; + node.depth = 0; + + if (node.children) { + for (var i = 0; i < node.children.length; i++) { + node.children[i].height = 0; + node.children[i].depth = 0; + } + } // See smash for comment re: use of makeVList + + + node = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: node + }] + }, options); // For spacing, TeX treats \smash as a math group (same spacing as ord). + + return buildCommon.makeSpan(["mord"], [node], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var inner = buildMathML_buildExpression(defineFunction_ordargument(group.body), options); + var phantom = new mathMLTree.MathNode("mphantom", inner); + var node = new mathMLTree.MathNode("mpadded", [phantom]); + node.setAttribute("height", "0px"); + node.setAttribute("depth", "0px"); + return node; + } +}); +defineFunction({ + type: "vphantom", + names: ["\\vphantom"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: function handler(_ref3, args) { + var parser = _ref3.parser; + var body = args[0]; + return { + type: "vphantom", + mode: parser.mode, + body: body + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var inner = buildCommon.makeSpan(["inner"], [buildHTML_buildGroup(group.body, options.withPhantom())]); + var fix = buildCommon.makeSpan(["fix"], []); + return buildCommon.makeSpan(["mord", "rlap"], [inner, fix], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var inner = buildMathML_buildExpression(defineFunction_ordargument(group.body), options); + var phantom = new mathMLTree.MathNode("mphantom", inner); + var node = new mathMLTree.MathNode("mpadded", [phantom]); + node.setAttribute("width", "0px"); + return node; + } +}); +// CONCATENATED MODULE: ./src/functions/raisebox.js + + + + + + + // Box manipulation + +defineFunction({ + type: "raisebox", + names: ["\\raisebox"], + props: { + numArgs: 2, + argTypes: ["size", "hbox"], + allowedInText: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + var amount = assertNodeType(args[0], "size").value; + var body = args[1]; + return { + type: "raisebox", + mode: parser.mode, + dy: amount, + body: body + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var body = buildHTML_buildGroup(group.body, options); + var dy = units_calculateSize(group.dy, options); + return buildCommon.makeVList({ + positionType: "shift", + positionData: -dy, + children: [{ + type: "elem", + elem: body + }] + }, options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mpadded", [buildMathML_buildGroup(group.body, options)]); + var dy = group.dy.number + group.dy.unit; + node.setAttribute("voffset", dy); + return node; + } +}); +// CONCATENATED MODULE: ./src/functions/rule.js + + + + + +defineFunction({ + type: "rule", + names: ["\\rule"], + props: { + numArgs: 2, + numOptionalArgs: 1, + argTypes: ["size", "size", "size"] + }, + handler: function handler(_ref, args, optArgs) { + var parser = _ref.parser; + var shift = optArgs[0]; + var width = assertNodeType(args[0], "size"); + var height = assertNodeType(args[1], "size"); + return { + type: "rule", + mode: parser.mode, + shift: shift && assertNodeType(shift, "size").value, + width: width.value, + height: height.value + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + // Make an empty span for the rule + var rule = buildCommon.makeSpan(["mord", "rule"], [], options); // Calculate the shift, width, and height of the rule, and account for units + + var width = units_calculateSize(group.width, options); + var height = units_calculateSize(group.height, options); + var shift = group.shift ? units_calculateSize(group.shift, options) : 0; // Style the rule to the right size + + rule.style.borderRightWidth = width + "em"; + rule.style.borderTopWidth = height + "em"; + rule.style.bottom = shift + "em"; // Record the height and width + + rule.width = width; + rule.height = height + shift; + rule.depth = -shift; // Font size is the number large enough that the browser will + // reserve at least `absHeight` space above the baseline. + // The 1.125 factor was empirically determined + + rule.maxFontSize = height * 1.125 * options.sizeMultiplier; + return rule; + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var width = units_calculateSize(group.width, options); + var height = units_calculateSize(group.height, options); + var shift = group.shift ? units_calculateSize(group.shift, options) : 0; + var color = options.color && options.getColor() || "black"; + var rule = new mathMLTree.MathNode("mspace"); + rule.setAttribute("mathbackground", color); + rule.setAttribute("width", width + "em"); + rule.setAttribute("height", height + "em"); + var wrapper = new mathMLTree.MathNode("mpadded", [rule]); + + if (shift >= 0) { + wrapper.setAttribute("height", "+" + shift + "em"); + } else { + wrapper.setAttribute("height", shift + "em"); + wrapper.setAttribute("depth", "+" + -shift + "em"); + } + + wrapper.setAttribute("voffset", shift + "em"); + return wrapper; + } +}); +// CONCATENATED MODULE: ./src/functions/sizing.js + + + + + +function sizingGroup(value, options, baseOptions) { + var inner = buildHTML_buildExpression(value, options, false); + var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; // Add size-resetting classes to the inner list and set maxFontSize + // manually. Handle nested size changes. + + for (var i = 0; i < inner.length; i++) { + var pos = inner[i].classes.indexOf("sizing"); + + if (pos < 0) { + Array.prototype.push.apply(inner[i].classes, options.sizingClasses(baseOptions)); + } else if (inner[i].classes[pos + 1] === "reset-size" + options.size) { + // This is a nested size change: e.g., inner[i] is the "b" in + // `\Huge a \small b`. Override the old size (the `reset-` class) + // but not the new size. + inner[i].classes[pos + 1] = "reset-size" + baseOptions.size; + } + + inner[i].height *= multiplier; + inner[i].depth *= multiplier; + } + + return buildCommon.makeFragment(inner); +} +var sizeFuncs = ["\\tiny", "\\sixptsize", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge"]; +var sizing_htmlBuilder = function htmlBuilder(group, options) { + // Handle sizing operators like \Huge. Real TeX doesn't actually allow + // these functions inside of math expressions, so we do some special + // handling. + var newOptions = options.havingSize(group.size); + return sizingGroup(group.body, newOptions, options); +}; +defineFunction({ + type: "sizing", + names: sizeFuncs, + props: { + numArgs: 0, + allowedInText: true + }, + handler: function handler(_ref, args) { + var breakOnTokenText = _ref.breakOnTokenText, + funcName = _ref.funcName, + parser = _ref.parser; + var body = parser.parseExpression(false, breakOnTokenText); + return { + type: "sizing", + mode: parser.mode, + // Figure out what size to use based on the list of functions above + size: sizeFuncs.indexOf(funcName) + 1, + body: body + }; + }, + htmlBuilder: sizing_htmlBuilder, + mathmlBuilder: function mathmlBuilder(group, options) { + var newOptions = options.havingSize(group.size); + var inner = buildMathML_buildExpression(group.body, newOptions); + var node = new mathMLTree.MathNode("mstyle", inner); // TODO(emily): This doesn't produce the correct size for nested size + // changes, because we don't keep state of what style we're currently + // in, so we can't reset the size to normal before changing it. Now + // that we're passing an options parameter we should be able to fix + // this. + + node.setAttribute("mathsize", newOptions.sizeMultiplier + "em"); + return node; + } +}); +// CONCATENATED MODULE: ./src/functions/smash.js +// smash, with optional [tb], as in AMS + + + + + + +defineFunction({ + type: "smash", + names: ["\\smash"], + props: { + numArgs: 1, + numOptionalArgs: 1, + allowedInText: true + }, + handler: function handler(_ref, args, optArgs) { + var parser = _ref.parser; + var smashHeight = false; + var smashDepth = false; + var tbArg = optArgs[0] && assertNodeType(optArgs[0], "ordgroup"); + + if (tbArg) { + // Optional [tb] argument is engaged. + // ref: amsmath: \renewcommand{\smash}[1][tb]{% + // def\mb@t{\ht}\def\mb@b{\dp}\def\mb@tb{\ht\z@\z@\dp}% + var letter = ""; + + for (var i = 0; i < tbArg.body.length; ++i) { + var node = tbArg.body[i]; // $FlowFixMe: Not every node type has a `text` property. + + letter = node.text; + + if (letter === "t") { + smashHeight = true; + } else if (letter === "b") { + smashDepth = true; + } else { + smashHeight = false; + smashDepth = false; + break; + } + } + } else { + smashHeight = true; + smashDepth = true; + } + + var body = args[0]; + return { + type: "smash", + mode: parser.mode, + body: body, + smashHeight: smashHeight, + smashDepth: smashDepth + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var node = buildCommon.makeSpan([], [buildHTML_buildGroup(group.body, options)]); + + if (!group.smashHeight && !group.smashDepth) { + return node; + } + + if (group.smashHeight) { + node.height = 0; // In order to influence makeVList, we have to reset the children. + + if (node.children) { + for (var i = 0; i < node.children.length; i++) { + node.children[i].height = 0; + } + } + } + + if (group.smashDepth) { + node.depth = 0; + + if (node.children) { + for (var _i = 0; _i < node.children.length; _i++) { + node.children[_i].depth = 0; + } + } + } // At this point, we've reset the TeX-like height and depth values. + // But the span still has an HTML line height. + // makeVList applies "display: table-cell", which prevents the browser + // from acting on that line height. So we'll call makeVList now. + + + var smashedNode = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: node + }] + }, options); // For spacing, TeX treats \hphantom as a math group (same spacing as ord). + + return buildCommon.makeSpan(["mord"], [smashedNode], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mpadded", [buildMathML_buildGroup(group.body, options)]); + + if (group.smashHeight) { + node.setAttribute("height", "0px"); + } + + if (group.smashDepth) { + node.setAttribute("depth", "0px"); + } + + return node; + } +}); +// CONCATENATED MODULE: ./src/functions/sqrt.js + + + + + + + +defineFunction({ + type: "sqrt", + names: ["\\sqrt"], + props: { + numArgs: 1, + numOptionalArgs: 1 + }, + handler: function handler(_ref, args, optArgs) { + var parser = _ref.parser; + var index = optArgs[0]; + var body = args[0]; + return { + type: "sqrt", + mode: parser.mode, + body: body, + index: index + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + // Square roots are handled in the TeXbook pg. 443, Rule 11. + // First, we do the same steps as in overline to build the inner group + // and line + var inner = buildHTML_buildGroup(group.body, options.havingCrampedStyle()); + + if (inner.height === 0) { + // Render a small surd. + inner.height = options.fontMetrics().xHeight; + } // Some groups can return document fragments. Handle those by wrapping + // them in a span. + + + inner = buildCommon.wrapFragment(inner, options); // Calculate the minimum size for the \surd delimiter + + var metrics = options.fontMetrics(); + var theta = metrics.defaultRuleThickness; + var phi = theta; + + if (options.style.id < src_Style.TEXT.id) { + phi = options.fontMetrics().xHeight; + } // Calculate the clearance between the body and line + + + var lineClearance = theta + phi / 4; + var minDelimiterHeight = inner.height + inner.depth + lineClearance + theta; // Create a sqrt SVG of the required minimum size + + var _delimiter$sqrtImage = delimiter.sqrtImage(minDelimiterHeight, options), + img = _delimiter$sqrtImage.span, + ruleWidth = _delimiter$sqrtImage.ruleWidth, + advanceWidth = _delimiter$sqrtImage.advanceWidth; + + var delimDepth = img.height - ruleWidth; // Adjust the clearance based on the delimiter size + + if (delimDepth > inner.height + inner.depth + lineClearance) { + lineClearance = (lineClearance + delimDepth - inner.height - inner.depth) / 2; + } // Shift the sqrt image + + + var imgShift = img.height - inner.height - lineClearance - ruleWidth; + inner.style.paddingLeft = advanceWidth + "em"; // Overlay the image and the argument. + + var body = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: inner, + wrapperClasses: ["svg-align"] + }, { + type: "kern", + size: -(inner.height + imgShift) + }, { + type: "elem", + elem: img + }, { + type: "kern", + size: ruleWidth + }] + }, options); + + if (!group.index) { + return buildCommon.makeSpan(["mord", "sqrt"], [body], options); + } else { + // Handle the optional root index + // The index is always in scriptscript style + var newOptions = options.havingStyle(src_Style.SCRIPTSCRIPT); + var rootm = buildHTML_buildGroup(group.index, newOptions, options); // The amount the index is shifted by. This is taken from the TeX + // source, in the definition of `\r@@t`. + + var toShift = 0.6 * (body.height - body.depth); // Build a VList with the superscript shifted up correctly + + var rootVList = buildCommon.makeVList({ + positionType: "shift", + positionData: -toShift, + children: [{ + type: "elem", + elem: rootm + }] + }, options); // Add a class surrounding it so we can add on the appropriate + // kerning + + var rootVListWrap = buildCommon.makeSpan(["root"], [rootVList]); + return buildCommon.makeSpan(["mord", "sqrt"], [rootVListWrap, body], options); + } + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var body = group.body, + index = group.index; + return index ? new mathMLTree.MathNode("mroot", [buildMathML_buildGroup(body, options), buildMathML_buildGroup(index, options)]) : new mathMLTree.MathNode("msqrt", [buildMathML_buildGroup(body, options)]); + } +}); +// CONCATENATED MODULE: ./src/functions/styling.js + + + + + +var styling_styleMap = { + "display": src_Style.DISPLAY, + "text": src_Style.TEXT, + "script": src_Style.SCRIPT, + "scriptscript": src_Style.SCRIPTSCRIPT +}; +defineFunction({ + type: "styling", + names: ["\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle"], + props: { + numArgs: 0, + allowedInText: true + }, + handler: function handler(_ref, args) { + var breakOnTokenText = _ref.breakOnTokenText, + funcName = _ref.funcName, + parser = _ref.parser; + // parse out the implicit body + var body = parser.parseExpression(true, breakOnTokenText); // TODO: Refactor to avoid duplicating styleMap in multiple places (e.g. + // here and in buildHTML and de-dupe the enumeration of all the styles). + // $FlowFixMe: The names above exactly match the styles. + + var style = funcName.slice(1, funcName.length - 5); + return { + type: "styling", + mode: parser.mode, + // Figure out what style to use by pulling out the style from + // the function name + style: style, + body: body + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + // Style changes are handled in the TeXbook on pg. 442, Rule 3. + var newStyle = styling_styleMap[group.style]; + var newOptions = options.havingStyle(newStyle).withFont(''); + return sizingGroup(group.body, newOptions, options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + // Figure out what style we're changing to. + var newStyle = styling_styleMap[group.style]; + var newOptions = options.havingStyle(newStyle); + var inner = buildMathML_buildExpression(group.body, newOptions); + var node = new mathMLTree.MathNode("mstyle", inner); + var styleAttributes = { + "display": ["0", "true"], + "text": ["0", "false"], + "script": ["1", "false"], + "scriptscript": ["2", "false"] + }; + var attr = styleAttributes[group.style]; + node.setAttribute("scriptlevel", attr[0]); + node.setAttribute("displaystyle", attr[1]); + return node; + } +}); +// CONCATENATED MODULE: ./src/functions/supsub.js + + + + + + + + + + + + + + +/** + * Sometimes, groups perform special rules when they have superscripts or + * subscripts attached to them. This function lets the `supsub` group know that + * Sometimes, groups perform special rules when they have superscripts or + * its inner element should handle the superscripts and subscripts instead of + * handling them itself. + */ +var supsub_htmlBuilderDelegate = function htmlBuilderDelegate(group, options) { + var base = group.base; + + if (!base) { + return null; + } else if (base.type === "op") { + // Operators handle supsubs differently when they have limits + // (e.g. `\displaystyle\sum_2^3`) + var delegate = base.limits && (options.style.size === src_Style.DISPLAY.size || base.alwaysHandleSupSub); + return delegate ? op_htmlBuilder : null; + } else if (base.type === "operatorname") { + var _delegate = base.alwaysHandleSupSub && (options.style.size === src_Style.DISPLAY.size || base.limits); + + return _delegate ? operatorname_htmlBuilder : null; + } else if (base.type === "accent") { + return utils.isCharacterBox(base.base) ? accent_htmlBuilder : null; + } else if (base.type === "horizBrace") { + var isSup = !group.sub; + return isSup === base.isOver ? horizBrace_htmlBuilder : null; + } else { + return null; + } +}; // Super scripts and subscripts, whose precise placement can depend on other +// functions that precede them. + + +defineFunctionBuilders({ + type: "supsub", + htmlBuilder: function htmlBuilder(group, options) { + // Superscript and subscripts are handled in the TeXbook on page + // 445-446, rules 18(a-f). + // Here is where we defer to the inner group if it should handle + // superscripts and subscripts itself. + var builderDelegate = supsub_htmlBuilderDelegate(group, options); + + if (builderDelegate) { + return builderDelegate(group, options); + } + + var valueBase = group.base, + valueSup = group.sup, + valueSub = group.sub; + var base = buildHTML_buildGroup(valueBase, options); + var supm; + var subm; + var metrics = options.fontMetrics(); // Rule 18a + + var supShift = 0; + var subShift = 0; + var isCharacterBox = valueBase && utils.isCharacterBox(valueBase); + + if (valueSup) { + var newOptions = options.havingStyle(options.style.sup()); + supm = buildHTML_buildGroup(valueSup, newOptions, options); + + if (!isCharacterBox) { + supShift = base.height - newOptions.fontMetrics().supDrop * newOptions.sizeMultiplier / options.sizeMultiplier; + } + } + + if (valueSub) { + var _newOptions = options.havingStyle(options.style.sub()); + + subm = buildHTML_buildGroup(valueSub, _newOptions, options); + + if (!isCharacterBox) { + subShift = base.depth + _newOptions.fontMetrics().subDrop * _newOptions.sizeMultiplier / options.sizeMultiplier; + } + } // Rule 18c + + + var minSupShift; + + if (options.style === src_Style.DISPLAY) { + minSupShift = metrics.sup1; + } else if (options.style.cramped) { + minSupShift = metrics.sup3; + } else { + minSupShift = metrics.sup2; + } // scriptspace is a font-size-independent size, so scale it + // appropriately for use as the marginRight. + + + var multiplier = options.sizeMultiplier; + var marginRight = 0.5 / metrics.ptPerEm / multiplier + "em"; + var marginLeft = null; + + if (subm) { + // Subscripts shouldn't be shifted by the base's italic correction. + // Account for that by shifting the subscript back the appropriate + // amount. Note we only do this when the base is a single symbol. + var isOiint = group.base && group.base.type === "op" && group.base.name && (group.base.name === "\\oiint" || group.base.name === "\\oiiint"); + + if (base instanceof domTree_SymbolNode || isOiint) { + // $FlowFixMe + marginLeft = -base.italic + "em"; + } + } + + var supsub; + + if (supm && subm) { + supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight); + subShift = Math.max(subShift, metrics.sub2); + var ruleWidth = metrics.defaultRuleThickness; // Rule 18e + + var maxWidth = 4 * ruleWidth; + + if (supShift - supm.depth - (subm.height - subShift) < maxWidth) { + subShift = maxWidth - (supShift - supm.depth) + subm.height; + var psi = 0.8 * metrics.xHeight - (supShift - supm.depth); + + if (psi > 0) { + supShift += psi; + subShift -= psi; + } + } + + var vlistElem = [{ + type: "elem", + elem: subm, + shift: subShift, + marginRight: marginRight, + marginLeft: marginLeft + }, { + type: "elem", + elem: supm, + shift: -supShift, + marginRight: marginRight + }]; + supsub = buildCommon.makeVList({ + positionType: "individualShift", + children: vlistElem + }, options); + } else if (subm) { + // Rule 18b + subShift = Math.max(subShift, metrics.sub1, subm.height - 0.8 * metrics.xHeight); + var _vlistElem = [{ + type: "elem", + elem: subm, + marginLeft: marginLeft, + marginRight: marginRight + }]; + supsub = buildCommon.makeVList({ + positionType: "shift", + positionData: subShift, + children: _vlistElem + }, options); + } else if (supm) { + // Rule 18c, d + supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight); + supsub = buildCommon.makeVList({ + positionType: "shift", + positionData: -supShift, + children: [{ + type: "elem", + elem: supm, + marginRight: marginRight + }] + }, options); + } else { + throw new Error("supsub must have either sup or sub."); + } // Wrap the supsub vlist in a span.msupsub to reset text-align. + + + var mclass = getTypeOfDomTree(base, "right") || "mord"; + return buildCommon.makeSpan([mclass], [base, buildCommon.makeSpan(["msupsub"], [supsub])], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + // Is the inner group a relevant horizonal brace? + var isBrace = false; + var isOver; + var isSup; + var horizBrace = checkNodeType(group.base, "horizBrace"); + + if (horizBrace) { + isSup = !!group.sup; + + if (isSup === horizBrace.isOver) { + isBrace = true; + isOver = horizBrace.isOver; + } + } + + if (group.base && (group.base.type === "op" || group.base.type === "operatorname")) { + group.base.parentIsSupSub = true; + } + + var children = [buildMathML_buildGroup(group.base, options)]; + + if (group.sub) { + children.push(buildMathML_buildGroup(group.sub, options)); + } + + if (group.sup) { + children.push(buildMathML_buildGroup(group.sup, options)); + } + + var nodeType; + + if (isBrace) { + nodeType = isOver ? "mover" : "munder"; + } else if (!group.sub) { + var base = group.base; + + if (base && base.type === "op" && base.limits && (options.style === src_Style.DISPLAY || base.alwaysHandleSupSub)) { + nodeType = "mover"; + } else if (base && base.type === "operatorname" && base.alwaysHandleSupSub && (base.limits || options.style === src_Style.DISPLAY)) { + nodeType = "mover"; + } else { + nodeType = "msup"; + } + } else if (!group.sup) { + var _base = group.base; + + if (_base && _base.type === "op" && _base.limits && (options.style === src_Style.DISPLAY || _base.alwaysHandleSupSub)) { + nodeType = "munder"; + } else if (_base && _base.type === "operatorname" && _base.alwaysHandleSupSub && (_base.limits || options.style === src_Style.DISPLAY)) { + nodeType = "munder"; + } else { + nodeType = "msub"; + } + } else { + var _base2 = group.base; + + if (_base2 && _base2.type === "op" && _base2.limits && options.style === src_Style.DISPLAY) { + nodeType = "munderover"; + } else if (_base2 && _base2.type === "operatorname" && _base2.alwaysHandleSupSub && (options.style === src_Style.DISPLAY || _base2.limits)) { + nodeType = "munderover"; + } else { + nodeType = "msubsup"; + } + } + + var node = new mathMLTree.MathNode(nodeType, children); + return node; + } +}); +// CONCATENATED MODULE: ./src/functions/symbolsOp.js + + + + // Operator ParseNodes created in Parser.js from symbol Groups in src/symbols.js. + +defineFunctionBuilders({ + type: "atom", + htmlBuilder: function htmlBuilder(group, options) { + return buildCommon.mathsym(group.text, group.mode, options, ["m" + group.family]); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mo", [buildMathML_makeText(group.text, group.mode)]); + + if (group.family === "bin") { + var variant = buildMathML_getVariant(group, options); + + if (variant === "bold-italic") { + node.setAttribute("mathvariant", variant); + } + } else if (group.family === "punct") { + node.setAttribute("separator", "true"); + } else if (group.family === "open" || group.family === "close") { + // Delims built here should not stretch vertically. + // See delimsizing.js for stretchy delims. + node.setAttribute("stretchy", "false"); + } + + return node; + } +}); +// CONCATENATED MODULE: ./src/functions/symbolsOrd.js + + + + +// "mathord" and "textord" ParseNodes created in Parser.js from symbol Groups in +var defaultVariant = { + "mi": "italic", + "mn": "normal", + "mtext": "normal" +}; +defineFunctionBuilders({ + type: "mathord", + htmlBuilder: function htmlBuilder(group, options) { + return buildCommon.makeOrd(group, options, "mathord"); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var node = new mathMLTree.MathNode("mi", [buildMathML_makeText(group.text, group.mode, options)]); + var variant = buildMathML_getVariant(group, options) || "italic"; + + if (variant !== defaultVariant[node.type]) { + node.setAttribute("mathvariant", variant); + } + + return node; + } +}); +defineFunctionBuilders({ + type: "textord", + htmlBuilder: function htmlBuilder(group, options) { + return buildCommon.makeOrd(group, options, "textord"); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var text = buildMathML_makeText(group.text, group.mode, options); + var variant = buildMathML_getVariant(group, options) || "normal"; + var node; + + if (group.mode === 'text') { + node = new mathMLTree.MathNode("mtext", [text]); + } else if (/[0-9]/.test(group.text)) { + // TODO(kevinb) merge adjacent nodes + // do it as a post processing step + node = new mathMLTree.MathNode("mn", [text]); + } else if (group.text === "\\prime") { + node = new mathMLTree.MathNode("mo", [text]); + } else { + node = new mathMLTree.MathNode("mi", [text]); + } + + if (variant !== defaultVariant[node.type]) { + node.setAttribute("mathvariant", variant); + } + + return node; + } +}); +// CONCATENATED MODULE: ./src/functions/symbolsSpacing.js + + + + // A map of CSS-based spacing functions to their CSS class. + +var cssSpace = { + "\\nobreak": "nobreak", + "\\allowbreak": "allowbreak" +}; // A lookup table to determine whether a spacing function/symbol should be +// treated like a regular space character. If a symbol or command is a key +// in this table, then it should be a regular space character. Furthermore, +// the associated value may have a `className` specifying an extra CSS class +// to add to the created `span`. + +var regularSpace = { + " ": {}, + "\\ ": {}, + "~": { + className: "nobreak" + }, + "\\space": {}, + "\\nobreakspace": { + className: "nobreak" + } +}; // ParseNode<"spacing"> created in Parser.js from the "spacing" symbol Groups in +// src/symbols.js. + +defineFunctionBuilders({ + type: "spacing", + htmlBuilder: function htmlBuilder(group, options) { + if (regularSpace.hasOwnProperty(group.text)) { + var className = regularSpace[group.text].className || ""; // Spaces are generated by adding an actual space. Each of these + // things has an entry in the symbols table, so these will be turned + // into appropriate outputs. + + if (group.mode === "text") { + var ord = buildCommon.makeOrd(group, options, "textord"); + ord.classes.push(className); + return ord; + } else { + return buildCommon.makeSpan(["mspace", className], [buildCommon.mathsym(group.text, group.mode, options)], options); + } + } else if (cssSpace.hasOwnProperty(group.text)) { + // Spaces based on just a CSS class. + return buildCommon.makeSpan(["mspace", cssSpace[group.text]], [], options); + } else { + throw new src_ParseError("Unknown type of space \"" + group.text + "\""); + } + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var node; + + if (regularSpace.hasOwnProperty(group.text)) { + node = new mathMLTree.MathNode("mtext", [new mathMLTree.TextNode("\xA0")]); + } else if (cssSpace.hasOwnProperty(group.text)) { + // CSS-based MathML spaces (\nobreak, \allowbreak) are ignored + return new mathMLTree.MathNode("mspace"); + } else { + throw new src_ParseError("Unknown type of space \"" + group.text + "\""); + } + + return node; + } +}); +// CONCATENATED MODULE: ./src/functions/tag.js + + + + +var tag_pad = function pad() { + var padNode = new mathMLTree.MathNode("mtd", []); + padNode.setAttribute("width", "50%"); + return padNode; +}; + +defineFunctionBuilders({ + type: "tag", + mathmlBuilder: function mathmlBuilder(group, options) { + var table = new mathMLTree.MathNode("mtable", [new mathMLTree.MathNode("mtr", [tag_pad(), new mathMLTree.MathNode("mtd", [buildExpressionRow(group.body, options)]), tag_pad(), new mathMLTree.MathNode("mtd", [buildExpressionRow(group.tag, options)])])]); + table.setAttribute("width", "100%"); + return table; // TODO: Left-aligned tags. + // Currently, the group and options passed here do not contain + // enough info to set tag alignment. `leqno` is in Settings but it is + // not passed to Options. On the HTML side, leqno is + // set by a CSS class applied in buildTree.js. That would have worked + // in MathML if browsers supported . Since they don't, we + // need to rewrite the way this function is called. + } +}); +// CONCATENATED MODULE: ./src/functions/text.js + + + + // Non-mathy text, possibly in a font + +var textFontFamilies = { + "\\text": undefined, + "\\textrm": "textrm", + "\\textsf": "textsf", + "\\texttt": "texttt", + "\\textnormal": "textrm" +}; +var textFontWeights = { + "\\textbf": "textbf", + "\\textmd": "textmd" +}; +var textFontShapes = { + "\\textit": "textit", + "\\textup": "textup" +}; + +var optionsWithFont = function optionsWithFont(group, options) { + var font = group.font; // Checks if the argument is a font family or a font style. + + if (!font) { + return options; + } else if (textFontFamilies[font]) { + return options.withTextFontFamily(textFontFamilies[font]); + } else if (textFontWeights[font]) { + return options.withTextFontWeight(textFontWeights[font]); + } else { + return options.withTextFontShape(textFontShapes[font]); + } +}; + +defineFunction({ + type: "text", + names: [// Font families + "\\text", "\\textrm", "\\textsf", "\\texttt", "\\textnormal", // Font weights + "\\textbf", "\\textmd", // Font Shapes + "\\textit", "\\textup"], + props: { + numArgs: 1, + argTypes: ["text"], + greediness: 2, + allowedInText: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser, + funcName = _ref.funcName; + var body = args[0]; + return { + type: "text", + mode: parser.mode, + body: defineFunction_ordargument(body), + font: funcName + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + var newOptions = optionsWithFont(group, options); + var inner = buildHTML_buildExpression(group.body, newOptions, true); + return buildCommon.makeSpan(["mord", "text"], buildCommon.tryCombineChars(inner), newOptions); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var newOptions = optionsWithFont(group, options); + return buildExpressionRow(group.body, newOptions); + } +}); +// CONCATENATED MODULE: ./src/functions/underline.js + + + + + +defineFunction({ + type: "underline", + names: ["\\underline"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: function handler(_ref, args) { + var parser = _ref.parser; + return { + type: "underline", + mode: parser.mode, + body: args[0] + }; + }, + htmlBuilder: function htmlBuilder(group, options) { + // Underlines are handled in the TeXbook pg 443, Rule 10. + // Build the inner group. + var innerGroup = buildHTML_buildGroup(group.body, options); // Create the line to go below the body + + var line = buildCommon.makeLineSpan("underline-line", options); // Generate the vlist, with the appropriate kerns + + var defaultRuleThickness = options.fontMetrics().defaultRuleThickness; + var vlist = buildCommon.makeVList({ + positionType: "top", + positionData: innerGroup.height, + children: [{ + type: "kern", + size: defaultRuleThickness + }, { + type: "elem", + elem: line + }, { + type: "kern", + size: 3 * defaultRuleThickness + }, { + type: "elem", + elem: innerGroup + }] + }, options); + return buildCommon.makeSpan(["mord", "underline"], [vlist], options); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var operator = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode("\u203E")]); + operator.setAttribute("stretchy", "true"); + var node = new mathMLTree.MathNode("munder", [buildMathML_buildGroup(group.body, options), operator]); + node.setAttribute("accentunder", "true"); + return node; + } +}); +// CONCATENATED MODULE: ./src/functions/verb.js + + + + +defineFunction({ + type: "verb", + names: ["\\verb"], + props: { + numArgs: 0, + allowedInText: true + }, + handler: function handler(context, args, optArgs) { + // \verb and \verb* are dealt with directly in Parser.js. + // If we end up here, it's because of a failure to match the two delimiters + // in the regex in Lexer.js. LaTeX raises the following error when \verb is + // terminated by end of line (or file). + throw new src_ParseError("\\verb ended by end of line instead of matching delimiter"); + }, + htmlBuilder: function htmlBuilder(group, options) { + var text = makeVerb(group); + var body = []; // \verb enters text mode and therefore is sized like \textstyle + + var newOptions = options.havingStyle(options.style.text()); + + for (var i = 0; i < text.length; i++) { + var c = text[i]; + + if (c === '~') { + c = '\\textasciitilde'; + } + + body.push(buildCommon.makeSymbol(c, "Typewriter-Regular", group.mode, newOptions, ["mord", "texttt"])); + } + + return buildCommon.makeSpan(["mord", "text"].concat(newOptions.sizingClasses(options)), buildCommon.tryCombineChars(body), newOptions); + }, + mathmlBuilder: function mathmlBuilder(group, options) { + var text = new mathMLTree.TextNode(makeVerb(group)); + var node = new mathMLTree.MathNode("mtext", [text]); + node.setAttribute("mathvariant", "monospace"); + return node; + } +}); +/** + * Converts verb group into body string. + * + * \verb* replaces each space with an open box \u2423 + * \verb replaces each space with a no-break space \xA0 + */ + +var makeVerb = function makeVerb(group) { + return group.body.replace(/ /g, group.star ? "\u2423" : '\xA0'); +}; +// CONCATENATED MODULE: ./src/functions.js +/** Include this to ensure that all functions are defined. */ + +var functions = _functions; +/* harmony default export */ var src_functions = (functions); // TODO(kevinb): have functions return an object and call defineFunction with +// that object in this file instead of relying on side-effects. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +// CONCATENATED MODULE: ./src/Lexer.js +/** + * The Lexer class handles tokenizing the input in various ways. Since our + * parser expects us to be able to backtrack, the lexer allows lexing from any + * given starting point. + * + * Its main exposed function is the `lex` function, which takes a position to + * lex from and a type of token to lex. It defers to the appropriate `_innerLex` + * function. + * + * The various `_innerLex` functions perform the actual lexing of different + * kinds. + */ + + + + +/* The following tokenRegex + * - matches typical whitespace (but not NBSP etc.) using its first group + * - does not match any control character \x00-\x1f except whitespace + * - does not match a bare backslash + * - matches any ASCII character except those just mentioned + * - does not match the BMP private use area \uE000-\uF8FF + * - does not match bare surrogate code units + * - matches any BMP character except for those just described + * - matches any valid Unicode surrogate pair + * - matches a backslash followed by one or more letters + * - matches a backslash followed by any BMP character, including newline + * Just because the Lexer matches something doesn't mean it's valid input: + * If there is no matching function or symbol definition, the Parser will + * still reject the input. + */ +var spaceRegexString = "[ \r\n\t]"; +var controlWordRegexString = "\\\\[a-zA-Z@]+"; +var controlSymbolRegexString = "\\\\[^\uD800-\uDFFF]"; +var controlWordWhitespaceRegexString = "" + controlWordRegexString + spaceRegexString + "*"; +var controlWordWhitespaceRegex = new RegExp("^(" + controlWordRegexString + ")" + spaceRegexString + "*$"); +var combiningDiacriticalMarkString = "[\u0300-\u036F]"; +var combiningDiacriticalMarksEndRegex = new RegExp(combiningDiacriticalMarkString + "+$"); +var tokenRegexString = "(" + spaceRegexString + "+)|" + // whitespace +"([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]" + ( // single codepoint +combiningDiacriticalMarkString + "*") + // ...plus accents +"|[\uD800-\uDBFF][\uDC00-\uDFFF]" + ( // surrogate pair +combiningDiacriticalMarkString + "*") + // ...plus accents +"|\\\\verb\\*([^]).*?\\3" + // \verb* +"|\\\\verb([^*a-zA-Z]).*?\\4" + // \verb unstarred +"|\\\\operatorname\\*" + ( // \operatorname* +"|" + controlWordWhitespaceRegexString) + ( // \macroName + spaces +"|" + controlSymbolRegexString + ")"); // \\, \', etc. + +/** Main Lexer class */ + +var Lexer_Lexer = +/*#__PURE__*/ +function () { + // category codes, only supports comment characters (14) for now + function Lexer(input, settings) { + this.input = void 0; + this.settings = void 0; + this.tokenRegex = void 0; + this.catcodes = void 0; + // Separate accents from characters + this.input = input; + this.settings = settings; + this.tokenRegex = new RegExp(tokenRegexString, 'g'); + this.catcodes = { + "%": 14 // comment character + + }; + } + + var _proto = Lexer.prototype; + + _proto.setCatcode = function setCatcode(char, code) { + this.catcodes[char] = code; + } + /** + * This function lexes a single token. + */ + ; + + _proto.lex = function lex() { + var input = this.input; + var pos = this.tokenRegex.lastIndex; + + if (pos === input.length) { + return new Token_Token("EOF", new SourceLocation(this, pos, pos)); + } + + var match = this.tokenRegex.exec(input); + + if (match === null || match.index !== pos) { + throw new src_ParseError("Unexpected character: '" + input[pos] + "'", new Token_Token(input[pos], new SourceLocation(this, pos, pos + 1))); + } + + var text = match[2] || " "; + + if (this.catcodes[text] === 14) { + // comment character + var nlIndex = input.indexOf('\n', this.tokenRegex.lastIndex); + + if (nlIndex === -1) { + this.tokenRegex.lastIndex = input.length; // EOF + + this.settings.reportNonstrict("commentAtEnd", "% comment has no terminating newline; LaTeX would " + "fail because of commenting the end of math mode (e.g. $)"); + } else { + this.tokenRegex.lastIndex = nlIndex + 1; + } + + return this.lex(); + } // Trim any trailing whitespace from control word match + + + var controlMatch = text.match(controlWordWhitespaceRegex); + + if (controlMatch) { + text = controlMatch[1]; + } + + return new Token_Token(text, new SourceLocation(this, pos, this.tokenRegex.lastIndex)); + }; + + return Lexer; +}(); + + +// CONCATENATED MODULE: ./src/Namespace.js +/** + * A `Namespace` refers to a space of nameable things like macros or lengths, + * which can be `set` either globally or local to a nested group, using an + * undo stack similar to how TeX implements this functionality. + * Performance-wise, `get` and local `set` take constant time, while global + * `set` takes time proportional to the depth of group nesting. + */ + + +var Namespace_Namespace = +/*#__PURE__*/ +function () { + /** + * Both arguments are optional. The first argument is an object of + * built-in mappings which never change. The second argument is an object + * of initial (global-level) mappings, which will constantly change + * according to any global/top-level `set`s done. + */ + function Namespace(builtins, globalMacros) { + if (builtins === void 0) { + builtins = {}; + } + + if (globalMacros === void 0) { + globalMacros = {}; + } + + this.current = void 0; + this.builtins = void 0; + this.undefStack = void 0; + this.current = globalMacros; + this.builtins = builtins; + this.undefStack = []; + } + /** + * Start a new nested group, affecting future local `set`s. + */ + + + var _proto = Namespace.prototype; + + _proto.beginGroup = function beginGroup() { + this.undefStack.push({}); + } + /** + * End current nested group, restoring values before the group began. + */ + ; + + _proto.endGroup = function endGroup() { + if (this.undefStack.length === 0) { + throw new src_ParseError("Unbalanced namespace destruction: attempt " + "to pop global namespace; please report this as a bug"); + } + + var undefs = this.undefStack.pop(); + + for (var undef in undefs) { + if (undefs.hasOwnProperty(undef)) { + if (undefs[undef] === undefined) { + delete this.current[undef]; + } else { + this.current[undef] = undefs[undef]; + } + } + } + } + /** + * Detect whether `name` has a definition. Equivalent to + * `get(name) != null`. + */ + ; + + _proto.has = function has(name) { + return this.current.hasOwnProperty(name) || this.builtins.hasOwnProperty(name); + } + /** + * Get the current value of a name, or `undefined` if there is no value. + * + * Note: Do not use `if (namespace.get(...))` to detect whether a macro + * is defined, as the definition may be the empty string which evaluates + * to `false` in JavaScript. Use `if (namespace.get(...) != null)` or + * `if (namespace.has(...))`. + */ + ; + + _proto.get = function get(name) { + if (this.current.hasOwnProperty(name)) { + return this.current[name]; + } else { + return this.builtins[name]; + } + } + /** + * Set the current value of a name, and optionally set it globally too. + * Local set() sets the current value and (when appropriate) adds an undo + * operation to the undo stack. Global set() may change the undo + * operation at every level, so takes time linear in their number. + */ + ; + + _proto.set = function set(name, value, global) { + if (global === void 0) { + global = false; + } + + if (global) { + // Global set is equivalent to setting in all groups. Simulate this + // by destroying any undos currently scheduled for this name, + // and adding an undo with the *new* value (in case it later gets + // locally reset within this environment). + for (var i = 0; i < this.undefStack.length; i++) { + delete this.undefStack[i][name]; + } + + if (this.undefStack.length > 0) { + this.undefStack[this.undefStack.length - 1][name] = value; + } + } else { + // Undo this set at end of this group (possibly to `undefined`), + // unless an undo is already in place, in which case that older + // value is the correct one. + var top = this.undefStack[this.undefStack.length - 1]; + + if (top && !top.hasOwnProperty(name)) { + top[name] = this.current[name]; + } + } + + this.current[name] = value; + }; + + return Namespace; +}(); + + +// CONCATENATED MODULE: ./src/macros.js +/** + * Predefined macros for KaTeX. + * This can be used to define some commands in terms of others. + */ + + + + + +var builtinMacros = {}; +/* harmony default export */ var macros = (builtinMacros); // This function might one day accept an additional argument and do more things. + +function defineMacro(name, body) { + builtinMacros[name] = body; +} ////////////////////////////////////////////////////////////////////// +// macro tools +// LaTeX's \@firstoftwo{#1}{#2} expands to #1, skipping #2 +// TeX source: \long\def\@firstoftwo#1#2{#1} + +defineMacro("\\@firstoftwo", function (context) { + var args = context.consumeArgs(2); + return { + tokens: args[0], + numArgs: 0 + }; +}); // LaTeX's \@secondoftwo{#1}{#2} expands to #2, skipping #1 +// TeX source: \long\def\@secondoftwo#1#2{#2} + +defineMacro("\\@secondoftwo", function (context) { + var args = context.consumeArgs(2); + return { + tokens: args[1], + numArgs: 0 + }; +}); // LaTeX's \@ifnextchar{#1}{#2}{#3} looks ahead to the next (unexpanded) +// symbol. If it matches #1, then the macro expands to #2; otherwise, #3. +// Note, however, that it does not consume the next symbol in either case. + +defineMacro("\\@ifnextchar", function (context) { + var args = context.consumeArgs(3); // symbol, if, else + + var nextToken = context.future(); + + if (args[0].length === 1 && args[0][0].text === nextToken.text) { + return { + tokens: args[1], + numArgs: 0 + }; + } else { + return { + tokens: args[2], + numArgs: 0 + }; + } +}); // LaTeX's \@ifstar{#1}{#2} looks ahead to the next (unexpanded) symbol. +// If it is `*`, then it consumes the symbol, and the macro expands to #1; +// otherwise, the macro expands to #2 (without consuming the symbol). +// TeX source: \def\@ifstar#1{\@ifnextchar *{\@firstoftwo{#1}}} + +defineMacro("\\@ifstar", "\\@ifnextchar *{\\@firstoftwo{#1}}"); // LaTeX's \TextOrMath{#1}{#2} expands to #1 in text mode, #2 in math mode + +defineMacro("\\TextOrMath", function (context) { + var args = context.consumeArgs(2); + + if (context.mode === 'text') { + return { + tokens: args[0], + numArgs: 0 + }; + } else { + return { + tokens: args[1], + numArgs: 0 + }; + } +}); // Lookup table for parsing numbers in base 8 through 16 + +var digitToNumber = { + "0": 0, + "1": 1, + "2": 2, + "3": 3, + "4": 4, + "5": 5, + "6": 6, + "7": 7, + "8": 8, + "9": 9, + "a": 10, + "A": 10, + "b": 11, + "B": 11, + "c": 12, + "C": 12, + "d": 13, + "D": 13, + "e": 14, + "E": 14, + "f": 15, + "F": 15 +}; // TeX \char makes a literal character (catcode 12) using the following forms: +// (see The TeXBook, p. 43) +// \char123 -- decimal +// \char'123 -- octal +// \char"123 -- hex +// \char`x -- character that can be written (i.e. isn't active) +// \char`\x -- character that cannot be written (e.g. %) +// These all refer to characters from the font, so we turn them into special +// calls to a function \@char dealt with in the Parser. + +defineMacro("\\char", function (context) { + var token = context.popToken(); + var base; + var number = ''; + + if (token.text === "'") { + base = 8; + token = context.popToken(); + } else if (token.text === '"') { + base = 16; + token = context.popToken(); + } else if (token.text === "`") { + token = context.popToken(); + + if (token.text[0] === "\\") { + number = token.text.charCodeAt(1); + } else if (token.text === "EOF") { + throw new src_ParseError("\\char` missing argument"); + } else { + number = token.text.charCodeAt(0); + } + } else { + base = 10; + } + + if (base) { + // Parse a number in the given base, starting with first `token`. + number = digitToNumber[token.text]; + + if (number == null || number >= base) { + throw new src_ParseError("Invalid base-" + base + " digit " + token.text); + } + + var digit; + + while ((digit = digitToNumber[context.future().text]) != null && digit < base) { + number *= base; + number += digit; + context.popToken(); + } + } + + return "\\@char{" + number + "}"; +}); // Basic support for macro definitions: +// \def\macro{expansion} +// \def\macro#1{expansion} +// \def\macro#1#2{expansion} +// \def\macro#1#2#3#4#5#6#7#8#9{expansion} +// Also the \gdef and \global\def equivalents + +var macros_def = function def(context, global) { + var arg = context.consumeArgs(1)[0]; + + if (arg.length !== 1) { + throw new src_ParseError("\\gdef's first argument must be a macro name"); + } + + var name = arg[0].text; // Count argument specifiers, and check they are in the order #1 #2 ... + + var numArgs = 0; + arg = context.consumeArgs(1)[0]; + + while (arg.length === 1 && arg[0].text === "#") { + arg = context.consumeArgs(1)[0]; + + if (arg.length !== 1) { + throw new src_ParseError("Invalid argument number length \"" + arg.length + "\""); + } + + if (!/^[1-9]$/.test(arg[0].text)) { + throw new src_ParseError("Invalid argument number \"" + arg[0].text + "\""); + } + + numArgs++; + + if (parseInt(arg[0].text) !== numArgs) { + throw new src_ParseError("Argument number \"" + arg[0].text + "\" out of order"); + } + + arg = context.consumeArgs(1)[0]; + } // Final arg is the expansion of the macro + + + context.macros.set(name, { + tokens: arg, + numArgs: numArgs + }, global); + return ''; +}; + +defineMacro("\\gdef", function (context) { + return macros_def(context, true); +}); +defineMacro("\\def", function (context) { + return macros_def(context, false); +}); +defineMacro("\\global", function (context) { + var next = context.consumeArgs(1)[0]; + + if (next.length !== 1) { + throw new src_ParseError("Invalid command after \\global"); + } + + var command = next[0].text; // TODO: Should expand command + + if (command === "\\def") { + // \global\def is equivalent to \gdef + return macros_def(context, true); + } else { + throw new src_ParseError("Invalid command '" + command + "' after \\global"); + } +}); // \newcommand{\macro}[args]{definition} +// \renewcommand{\macro}[args]{definition} +// TODO: Optional arguments: \newcommand{\macro}[args][default]{definition} + +var macros_newcommand = function newcommand(context, existsOK, nonexistsOK) { + var arg = context.consumeArgs(1)[0]; + + if (arg.length !== 1) { + throw new src_ParseError("\\newcommand's first argument must be a macro name"); + } + + var name = arg[0].text; + var exists = context.isDefined(name); + + if (exists && !existsOK) { + throw new src_ParseError("\\newcommand{" + name + "} attempting to redefine " + (name + "; use \\renewcommand")); + } + + if (!exists && !nonexistsOK) { + throw new src_ParseError("\\renewcommand{" + name + "} when command " + name + " " + "does not yet exist; use \\newcommand"); + } + + var numArgs = 0; + arg = context.consumeArgs(1)[0]; + + if (arg.length === 1 && arg[0].text === "[") { + var argText = ''; + var token = context.expandNextToken(); + + while (token.text !== "]" && token.text !== "EOF") { + // TODO: Should properly expand arg, e.g., ignore {}s + argText += token.text; + token = context.expandNextToken(); + } + + if (!argText.match(/^\s*[0-9]+\s*$/)) { + throw new src_ParseError("Invalid number of arguments: " + argText); + } + + numArgs = parseInt(argText); + arg = context.consumeArgs(1)[0]; + } // Final arg is the expansion of the macro + + + context.macros.set(name, { + tokens: arg, + numArgs: numArgs + }); + return ''; +}; + +defineMacro("\\newcommand", function (context) { + return macros_newcommand(context, false, true); +}); +defineMacro("\\renewcommand", function (context) { + return macros_newcommand(context, true, false); +}); +defineMacro("\\providecommand", function (context) { + return macros_newcommand(context, true, true); +}); ////////////////////////////////////////////////////////////////////// +// Grouping +// \let\bgroup={ \let\egroup=} + +defineMacro("\\bgroup", "{"); +defineMacro("\\egroup", "}"); // Symbols from latex.ltx: +// \def\lq{`} +// \def\rq{'} +// \def \aa {\r a} +// \def \AA {\r A} + +defineMacro("\\lq", "`"); +defineMacro("\\rq", "'"); +defineMacro("\\aa", "\\r a"); +defineMacro("\\AA", "\\r A"); // Copyright (C) and registered (R) symbols. Use raw symbol in MathML. +// \DeclareTextCommandDefault{\textcopyright}{\textcircled{c}} +// \DeclareTextCommandDefault{\textregistered}{\textcircled{% +// \check@mathfonts\fontsize\sf@size\z@\math@fontsfalse\selectfont R}} +// \DeclareRobustCommand{\copyright}{% +// \ifmmode{\nfss@text{\textcopyright}}\else\textcopyright\fi} + +defineMacro("\\textcopyright", "\\html@mathml{\\textcircled{c}}{\\char`©}"); +defineMacro("\\copyright", "\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}"); +defineMacro("\\textregistered", "\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`®}"); // Characters omitted from Unicode range 1D400–1D7FF + +defineMacro("\u212C", "\\mathscr{B}"); // script + +defineMacro("\u2130", "\\mathscr{E}"); +defineMacro("\u2131", "\\mathscr{F}"); +defineMacro("\u210B", "\\mathscr{H}"); +defineMacro("\u2110", "\\mathscr{I}"); +defineMacro("\u2112", "\\mathscr{L}"); +defineMacro("\u2133", "\\mathscr{M}"); +defineMacro("\u211B", "\\mathscr{R}"); +defineMacro("\u212D", "\\mathfrak{C}"); // Fraktur + +defineMacro("\u210C", "\\mathfrak{H}"); +defineMacro("\u2128", "\\mathfrak{Z}"); // Define \Bbbk with a macro that works in both HTML and MathML. + +defineMacro("\\Bbbk", "\\Bbb{k}"); // Unicode middle dot +// The KaTeX fonts do not contain U+00B7. Instead, \cdotp displays +// the dot at U+22C5 and gives it punct spacing. + +defineMacro("\xB7", "\\cdotp"); // \llap and \rlap render their contents in text mode + +defineMacro("\\llap", "\\mathllap{\\textrm{#1}}"); +defineMacro("\\rlap", "\\mathrlap{\\textrm{#1}}"); +defineMacro("\\clap", "\\mathclap{\\textrm{#1}}"); // \not is defined by base/fontmath.ltx via +// \DeclareMathSymbol{\not}{\mathrel}{symbols}{"36} +// It's thus treated like a \mathrel, but defined by a symbol that has zero +// width but extends to the right. We use \rlap to get that spacing. +// For MathML we write U+0338 here. buildMathML.js will then do the overlay. + +defineMacro("\\not", '\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}'); // Negated symbols from base/fontmath.ltx: +// \def\neq{\not=} \let\ne=\neq +// \DeclareRobustCommand +// \notin{\mathrel{\m@th\mathpalette\c@ncel\in}} +// \def\c@ncel#1#2{\m@th\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}} + +defineMacro("\\neq", "\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`≠}}"); +defineMacro("\\ne", "\\neq"); +defineMacro("\u2260", "\\neq"); +defineMacro("\\notin", "\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}" + "{\\mathrel{\\char`∉}}"); +defineMacro("\u2209", "\\notin"); // Unicode stacked relations + +defineMacro("\u2258", "\\html@mathml{" + "\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}" + "}{\\mathrel{\\char`\u2258}}"); +defineMacro("\u2259", "\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}"); +defineMacro("\u225A", "\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225A}}"); +defineMacro("\u225B", "\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}" + "{\\mathrel{\\char`\u225B}}"); +defineMacro("\u225D", "\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}" + "{\\mathrel{\\char`\u225D}}"); +defineMacro("\u225E", "\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}" + "{\\mathrel{\\char`\u225E}}"); +defineMacro("\u225F", "\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225F}}"); // Misc Unicode + +defineMacro("\u27C2", "\\perp"); +defineMacro("\u203C", "\\mathclose{!\\mkern-0.8mu!}"); +defineMacro("\u220C", "\\notni"); +defineMacro("\u231C", "\\ulcorner"); +defineMacro("\u231D", "\\urcorner"); +defineMacro("\u231E", "\\llcorner"); +defineMacro("\u231F", "\\lrcorner"); +defineMacro("\xA9", "\\copyright"); +defineMacro("\xAE", "\\textregistered"); +defineMacro("\uFE0F", "\\textregistered"); ////////////////////////////////////////////////////////////////////// +// LaTeX_2ε +// \vdots{\vbox{\baselineskip4\p@ \lineskiplimit\z@ +// \kern6\p@\hbox{.}\hbox{.}\hbox{.}}} +// We'll call \varvdots, which gets a glyph from symbols.js. +// The zero-width rule gets us an equivalent to the vertical 6pt kern. + +defineMacro("\\vdots", "\\mathord{\\varvdots\\rule{0pt}{15pt}}"); +defineMacro("\u22EE", "\\vdots"); ////////////////////////////////////////////////////////////////////// +// amsmath.sty +// http://mirrors.concertpass.com/tex-archive/macros/latex/required/amsmath/amsmath.pdf +// Italic Greek capital letters. AMS defines these with \DeclareMathSymbol, +// but they are equivalent to \mathit{\Letter}. + +defineMacro("\\varGamma", "\\mathit{\\Gamma}"); +defineMacro("\\varDelta", "\\mathit{\\Delta}"); +defineMacro("\\varTheta", "\\mathit{\\Theta}"); +defineMacro("\\varLambda", "\\mathit{\\Lambda}"); +defineMacro("\\varXi", "\\mathit{\\Xi}"); +defineMacro("\\varPi", "\\mathit{\\Pi}"); +defineMacro("\\varSigma", "\\mathit{\\Sigma}"); +defineMacro("\\varUpsilon", "\\mathit{\\Upsilon}"); +defineMacro("\\varPhi", "\\mathit{\\Phi}"); +defineMacro("\\varPsi", "\\mathit{\\Psi}"); +defineMacro("\\varOmega", "\\mathit{\\Omega}"); //\newcommand{\substack}[1]{\subarray{c}#1\endsubarray} + +defineMacro("\\substack", "\\begin{subarray}{c}#1\\end{subarray}"); // \renewcommand{\colon}{\nobreak\mskip2mu\mathpunct{}\nonscript +// \mkern-\thinmuskip{:}\mskip6muplus1mu\relax} + +defineMacro("\\colon", "\\nobreak\\mskip2mu\\mathpunct{}" + "\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu"); // \newcommand{\boxed}[1]{\fbox{\m@th$\displaystyle#1$}} + +defineMacro("\\boxed", "\\fbox{$\\displaystyle{#1}$}"); // \def\iff{\DOTSB\;\Longleftrightarrow\;} +// \def\implies{\DOTSB\;\Longrightarrow\;} +// \def\impliedby{\DOTSB\;\Longleftarrow\;} + +defineMacro("\\iff", "\\DOTSB\\;\\Longleftrightarrow\\;"); +defineMacro("\\implies", "\\DOTSB\\;\\Longrightarrow\\;"); +defineMacro("\\impliedby", "\\DOTSB\\;\\Longleftarrow\\;"); // AMSMath's automatic \dots, based on \mdots@@ macro. + +var dotsByToken = { + ',': '\\dotsc', + '\\not': '\\dotsb', + // \keybin@ checks for the following: + '+': '\\dotsb', + '=': '\\dotsb', + '<': '\\dotsb', + '>': '\\dotsb', + '-': '\\dotsb', + '*': '\\dotsb', + ':': '\\dotsb', + // Symbols whose definition starts with \DOTSB: + '\\DOTSB': '\\dotsb', + '\\coprod': '\\dotsb', + '\\bigvee': '\\dotsb', + '\\bigwedge': '\\dotsb', + '\\biguplus': '\\dotsb', + '\\bigcap': '\\dotsb', + '\\bigcup': '\\dotsb', + '\\prod': '\\dotsb', + '\\sum': '\\dotsb', + '\\bigotimes': '\\dotsb', + '\\bigoplus': '\\dotsb', + '\\bigodot': '\\dotsb', + '\\bigsqcup': '\\dotsb', + '\\And': '\\dotsb', + '\\longrightarrow': '\\dotsb', + '\\Longrightarrow': '\\dotsb', + '\\longleftarrow': '\\dotsb', + '\\Longleftarrow': '\\dotsb', + '\\longleftrightarrow': '\\dotsb', + '\\Longleftrightarrow': '\\dotsb', + '\\mapsto': '\\dotsb', + '\\longmapsto': '\\dotsb', + '\\hookrightarrow': '\\dotsb', + '\\doteq': '\\dotsb', + // Symbols whose definition starts with \mathbin: + '\\mathbin': '\\dotsb', + // Symbols whose definition starts with \mathrel: + '\\mathrel': '\\dotsb', + '\\relbar': '\\dotsb', + '\\Relbar': '\\dotsb', + '\\xrightarrow': '\\dotsb', + '\\xleftarrow': '\\dotsb', + // Symbols whose definition starts with \DOTSI: + '\\DOTSI': '\\dotsi', + '\\int': '\\dotsi', + '\\oint': '\\dotsi', + '\\iint': '\\dotsi', + '\\iiint': '\\dotsi', + '\\iiiint': '\\dotsi', + '\\idotsint': '\\dotsi', + // Symbols whose definition starts with \DOTSX: + '\\DOTSX': '\\dotsx' +}; +defineMacro("\\dots", function (context) { + // TODO: If used in text mode, should expand to \textellipsis. + // However, in KaTeX, \textellipsis and \ldots behave the same + // (in text mode), and it's unlikely we'd see any of the math commands + // that affect the behavior of \dots when in text mode. So fine for now + // (until we support \ifmmode ... \else ... \fi). + var thedots = '\\dotso'; + var next = context.expandAfterFuture().text; + + if (next in dotsByToken) { + thedots = dotsByToken[next]; + } else if (next.substr(0, 4) === '\\not') { + thedots = '\\dotsb'; + } else if (next in src_symbols.math) { + if (utils.contains(['bin', 'rel'], src_symbols.math[next].group)) { + thedots = '\\dotsb'; + } + } + + return thedots; +}); +var spaceAfterDots = { + // \rightdelim@ checks for the following: + ')': true, + ']': true, + '\\rbrack': true, + '\\}': true, + '\\rbrace': true, + '\\rangle': true, + '\\rceil': true, + '\\rfloor': true, + '\\rgroup': true, + '\\rmoustache': true, + '\\right': true, + '\\bigr': true, + '\\biggr': true, + '\\Bigr': true, + '\\Biggr': true, + // \extra@ also tests for the following: + '$': true, + // \extrap@ checks for the following: + ';': true, + '.': true, + ',': true +}; +defineMacro("\\dotso", function (context) { + var next = context.future().text; + + if (next in spaceAfterDots) { + return "\\ldots\\,"; + } else { + return "\\ldots"; + } +}); +defineMacro("\\dotsc", function (context) { + var next = context.future().text; // \dotsc uses \extra@ but not \extrap@, instead specially checking for + // ';' and '.', but doesn't check for ','. + + if (next in spaceAfterDots && next !== ',') { + return "\\ldots\\,"; + } else { + return "\\ldots"; + } +}); +defineMacro("\\cdots", function (context) { + var next = context.future().text; + + if (next in spaceAfterDots) { + return "\\@cdots\\,"; + } else { + return "\\@cdots"; + } +}); +defineMacro("\\dotsb", "\\cdots"); +defineMacro("\\dotsm", "\\cdots"); +defineMacro("\\dotsi", "\\!\\cdots"); // amsmath doesn't actually define \dotsx, but \dots followed by a macro +// starting with \DOTSX implies \dotso, and then \extra@ detects this case +// and forces the added `\,`. + +defineMacro("\\dotsx", "\\ldots\\,"); // \let\DOTSI\relax +// \let\DOTSB\relax +// \let\DOTSX\relax + +defineMacro("\\DOTSI", "\\relax"); +defineMacro("\\DOTSB", "\\relax"); +defineMacro("\\DOTSX", "\\relax"); // Spacing, based on amsmath.sty's override of LaTeX defaults +// \DeclareRobustCommand{\tmspace}[3]{% +// \ifmmode\mskip#1#2\else\kern#1#3\fi\relax} + +defineMacro("\\tmspace", "\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"); // \renewcommand{\,}{\tmspace+\thinmuskip{.1667em}} +// TODO: math mode should use \thinmuskip + +defineMacro("\\,", "\\tmspace+{3mu}{.1667em}"); // \let\thinspace\, + +defineMacro("\\thinspace", "\\,"); // \def\>{\mskip\medmuskip} +// \renewcommand{\:}{\tmspace+\medmuskip{.2222em}} +// TODO: \> and math mode of \: should use \medmuskip = 4mu plus 2mu minus 4mu + +defineMacro("\\>", "\\mskip{4mu}"); +defineMacro("\\:", "\\tmspace+{4mu}{.2222em}"); // \let\medspace\: + +defineMacro("\\medspace", "\\:"); // \renewcommand{\;}{\tmspace+\thickmuskip{.2777em}} +// TODO: math mode should use \thickmuskip = 5mu plus 5mu + +defineMacro("\\;", "\\tmspace+{5mu}{.2777em}"); // \let\thickspace\; + +defineMacro("\\thickspace", "\\;"); // \renewcommand{\!}{\tmspace-\thinmuskip{.1667em}} +// TODO: math mode should use \thinmuskip + +defineMacro("\\!", "\\tmspace-{3mu}{.1667em}"); // \let\negthinspace\! + +defineMacro("\\negthinspace", "\\!"); // \newcommand{\negmedspace}{\tmspace-\medmuskip{.2222em}} +// TODO: math mode should use \medmuskip + +defineMacro("\\negmedspace", "\\tmspace-{4mu}{.2222em}"); // \newcommand{\negthickspace}{\tmspace-\thickmuskip{.2777em}} +// TODO: math mode should use \thickmuskip + +defineMacro("\\negthickspace", "\\tmspace-{5mu}{.277em}"); // \def\enspace{\kern.5em } + +defineMacro("\\enspace", "\\kern.5em "); // \def\enskip{\hskip.5em\relax} + +defineMacro("\\enskip", "\\hskip.5em\\relax"); // \def\quad{\hskip1em\relax} + +defineMacro("\\quad", "\\hskip1em\\relax"); // \def\qquad{\hskip2em\relax} + +defineMacro("\\qquad", "\\hskip2em\\relax"); // \tag@in@display form of \tag + +defineMacro("\\tag", "\\@ifstar\\tag@literal\\tag@paren"); +defineMacro("\\tag@paren", "\\tag@literal{({#1})}"); +defineMacro("\\tag@literal", function (context) { + if (context.macros.get("\\df@tag")) { + throw new src_ParseError("Multiple \\tag"); + } + + return "\\gdef\\df@tag{\\text{#1}}"; +}); // \renewcommand{\bmod}{\nonscript\mskip-\medmuskip\mkern5mu\mathbin +// {\operator@font mod}\penalty900 +// \mkern5mu\nonscript\mskip-\medmuskip} +// \newcommand{\pod}[1]{\allowbreak +// \if@display\mkern18mu\else\mkern8mu\fi(#1)} +// \renewcommand{\pmod}[1]{\pod{{\operator@font mod}\mkern6mu#1}} +// \newcommand{\mod}[1]{\allowbreak\if@display\mkern18mu +// \else\mkern12mu\fi{\operator@font mod}\,\,#1} +// TODO: math mode should use \medmuskip = 4mu plus 2mu minus 4mu + +defineMacro("\\bmod", "\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}" + "\\mathbin{\\rm mod}" + "\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"); +defineMacro("\\pod", "\\allowbreak" + "\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"); +defineMacro("\\pmod", "\\pod{{\\rm mod}\\mkern6mu#1}"); +defineMacro("\\mod", "\\allowbreak" + "\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}" + "{\\rm mod}\\,\\,#1"); // \pmb -- A simulation of bold. +// The version in ambsy.sty works by typesetting three copies of the argument +// with small offsets. We use two copies. We omit the vertical offset because +// of rendering problems that makeVList encounters in Safari. + +defineMacro("\\pmb", "\\html@mathml{" + "\\@binrel{#1}{\\mathrlap{#1}\\kern0.5px#1}}" + "{\\mathbf{#1}}"); ////////////////////////////////////////////////////////////////////// +// LaTeX source2e +// \\ defaults to \newline, but changes to \cr within array environment + +defineMacro("\\\\", "\\newline"); // \def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\@} +// TODO: Doesn't normally work in math mode because \@ fails. KaTeX doesn't +// support \@ yet, so that's omitted, and we add \text so that the result +// doesn't look funny in math mode. + +defineMacro("\\TeX", "\\textrm{\\html@mathml{" + "T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX" + "}{TeX}}"); // \DeclareRobustCommand{\LaTeX}{L\kern-.36em% +// {\sbox\z@ T% +// \vbox to\ht\z@{\hbox{\check@mathfonts +// \fontsize\sf@size\z@ +// \math@fontsfalse\selectfont +// A}% +// \vss}% +// }% +// \kern-.15em% +// \TeX} +// This code aligns the top of the A with the T (from the perspective of TeX's +// boxes, though visually the A appears to extend above slightly). +// We compute the corresponding \raisebox when A is rendered in \normalsize +// \scriptstyle, which has a scale factor of 0.7 (see Options.js). + +var latexRaiseA = fontMetricsData['Main-Regular']["T".charCodeAt(0)][1] - 0.7 * fontMetricsData['Main-Regular']["A".charCodeAt(0)][1] + "em"; +defineMacro("\\LaTeX", "\\textrm{\\html@mathml{" + ("L\\kern-.36em\\raisebox{" + latexRaiseA + "}{\\scriptstyle A}") + "\\kern-.15em\\TeX}{LaTeX}}"); // New KaTeX logo based on tweaking LaTeX logo + +defineMacro("\\KaTeX", "\\textrm{\\html@mathml{" + ("K\\kern-.17em\\raisebox{" + latexRaiseA + "}{\\scriptstyle A}") + "\\kern-.15em\\TeX}{KaTeX}}"); // \DeclareRobustCommand\hspace{\@ifstar\@hspacer\@hspace} +// \def\@hspace#1{\hskip #1\relax} +// \def\@hspacer#1{\vrule \@width\z@\nobreak +// \hskip #1\hskip \z@skip} + +defineMacro("\\hspace", "\\@ifstar\\@hspacer\\@hspace"); +defineMacro("\\@hspace", "\\hskip #1\\relax"); +defineMacro("\\@hspacer", "\\rule{0pt}{0pt}\\hskip #1\\relax"); ////////////////////////////////////////////////////////////////////// +// mathtools.sty +//\providecommand\ordinarycolon{:} + +defineMacro("\\ordinarycolon", ":"); //\def\vcentcolon{\mathrel{\mathop\ordinarycolon}} +//TODO(edemaine): Not yet centered. Fix via \raisebox or #726 + +defineMacro("\\vcentcolon", "\\mathrel{\\mathop\\ordinarycolon}"); // \providecommand*\dblcolon{\vcentcolon\mathrel{\mkern-.9mu}\vcentcolon} + +defineMacro("\\dblcolon", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}" + "{\\mathop{\\char\"2237}}"); // \providecommand*\coloneqq{\vcentcolon\mathrel{\mkern-1.2mu}=} + +defineMacro("\\coloneqq", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}" + "{\\mathop{\\char\"2254}}"); // ≔ +// \providecommand*\Coloneqq{\dblcolon\mathrel{\mkern-1.2mu}=} + +defineMacro("\\Coloneqq", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}" + "{\\mathop{\\char\"2237\\char\"3d}}"); // \providecommand*\coloneq{\vcentcolon\mathrel{\mkern-1.2mu}\mathrel{-}} + +defineMacro("\\coloneq", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}" + "{\\mathop{\\char\"3a\\char\"2212}}"); // \providecommand*\Coloneq{\dblcolon\mathrel{\mkern-1.2mu}\mathrel{-}} + +defineMacro("\\Coloneq", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}" + "{\\mathop{\\char\"2237\\char\"2212}}"); // \providecommand*\eqqcolon{=\mathrel{\mkern-1.2mu}\vcentcolon} + +defineMacro("\\eqqcolon", "\\html@mathml{" + "\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}" + "{\\mathop{\\char\"2255}}"); // ≕ +// \providecommand*\Eqqcolon{=\mathrel{\mkern-1.2mu}\dblcolon} + +defineMacro("\\Eqqcolon", "\\html@mathml{" + "\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}" + "{\\mathop{\\char\"3d\\char\"2237}}"); // \providecommand*\eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\vcentcolon} + +defineMacro("\\eqcolon", "\\html@mathml{" + "\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}" + "{\\mathop{\\char\"2239}}"); // \providecommand*\Eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\dblcolon} + +defineMacro("\\Eqcolon", "\\html@mathml{" + "\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}" + "{\\mathop{\\char\"2212\\char\"2237}}"); // \providecommand*\colonapprox{\vcentcolon\mathrel{\mkern-1.2mu}\approx} + +defineMacro("\\colonapprox", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}" + "{\\mathop{\\char\"3a\\char\"2248}}"); // \providecommand*\Colonapprox{\dblcolon\mathrel{\mkern-1.2mu}\approx} + +defineMacro("\\Colonapprox", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}" + "{\\mathop{\\char\"2237\\char\"2248}}"); // \providecommand*\colonsim{\vcentcolon\mathrel{\mkern-1.2mu}\sim} + +defineMacro("\\colonsim", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}" + "{\\mathop{\\char\"3a\\char\"223c}}"); // \providecommand*\Colonsim{\dblcolon\mathrel{\mkern-1.2mu}\sim} + +defineMacro("\\Colonsim", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}" + "{\\mathop{\\char\"2237\\char\"223c}}"); // Some Unicode characters are implemented with macros to mathtools functions. + +defineMacro("\u2237", "\\dblcolon"); // :: + +defineMacro("\u2239", "\\eqcolon"); // -: + +defineMacro("\u2254", "\\coloneqq"); // := + +defineMacro("\u2255", "\\eqqcolon"); // =: + +defineMacro("\u2A74", "\\Coloneqq"); // ::= +////////////////////////////////////////////////////////////////////// +// colonequals.sty +// Alternate names for mathtools's macros: + +defineMacro("\\ratio", "\\vcentcolon"); +defineMacro("\\coloncolon", "\\dblcolon"); +defineMacro("\\colonequals", "\\coloneqq"); +defineMacro("\\coloncolonequals", "\\Coloneqq"); +defineMacro("\\equalscolon", "\\eqqcolon"); +defineMacro("\\equalscoloncolon", "\\Eqqcolon"); +defineMacro("\\colonminus", "\\coloneq"); +defineMacro("\\coloncolonminus", "\\Coloneq"); +defineMacro("\\minuscolon", "\\eqcolon"); +defineMacro("\\minuscoloncolon", "\\Eqcolon"); // \colonapprox name is same in mathtools and colonequals. + +defineMacro("\\coloncolonapprox", "\\Colonapprox"); // \colonsim name is same in mathtools and colonequals. + +defineMacro("\\coloncolonsim", "\\Colonsim"); // Additional macros, implemented by analogy with mathtools definitions: + +defineMacro("\\simcolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"); +defineMacro("\\simcoloncolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"); +defineMacro("\\approxcolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"); +defineMacro("\\approxcoloncolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"); // Present in newtxmath, pxfonts and txfonts + +defineMacro("\\notni", "\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}"); +defineMacro("\\limsup", "\\DOTSB\\operatorname*{lim\\,sup}"); +defineMacro("\\liminf", "\\DOTSB\\operatorname*{lim\\,inf}"); ////////////////////////////////////////////////////////////////////// +// MathML alternates for KaTeX glyphs in the Unicode private area + +defineMacro("\\gvertneqq", "\\html@mathml{\\@gvertneqq}{\u2269}"); +defineMacro("\\lvertneqq", "\\html@mathml{\\@lvertneqq}{\u2268}"); +defineMacro("\\ngeqq", "\\html@mathml{\\@ngeqq}{\u2271}"); +defineMacro("\\ngeqslant", "\\html@mathml{\\@ngeqslant}{\u2271}"); +defineMacro("\\nleqq", "\\html@mathml{\\@nleqq}{\u2270}"); +defineMacro("\\nleqslant", "\\html@mathml{\\@nleqslant}{\u2270}"); +defineMacro("\\nshortmid", "\\html@mathml{\\@nshortmid}{∤}"); +defineMacro("\\nshortparallel", "\\html@mathml{\\@nshortparallel}{∦}"); +defineMacro("\\nsubseteqq", "\\html@mathml{\\@nsubseteqq}{\u2288}"); +defineMacro("\\nsupseteqq", "\\html@mathml{\\@nsupseteqq}{\u2289}"); +defineMacro("\\varsubsetneq", "\\html@mathml{\\@varsubsetneq}{⊊}"); +defineMacro("\\varsubsetneqq", "\\html@mathml{\\@varsubsetneqq}{⫋}"); +defineMacro("\\varsupsetneq", "\\html@mathml{\\@varsupsetneq}{⊋}"); +defineMacro("\\varsupsetneqq", "\\html@mathml{\\@varsupsetneqq}{⫌}"); ////////////////////////////////////////////////////////////////////// +// stmaryrd and semantic +// The stmaryrd and semantic packages render the next four items by calling a +// glyph. Those glyphs do not exist in the KaTeX fonts. Hence the macros. + +defineMacro("\\llbracket", "\\html@mathml{" + "\\mathopen{[\\mkern-3.2mu[}}" + "{\\mathopen{\\char`\u27E6}}"); +defineMacro("\\rrbracket", "\\html@mathml{" + "\\mathclose{]\\mkern-3.2mu]}}" + "{\\mathclose{\\char`\u27E7}}"); +defineMacro("\u27E6", "\\llbracket"); // blackboard bold [ + +defineMacro("\u27E7", "\\rrbracket"); // blackboard bold ] + +defineMacro("\\lBrace", "\\html@mathml{" + "\\mathopen{\\{\\mkern-3.2mu[}}" + "{\\mathopen{\\char`\u2983}}"); +defineMacro("\\rBrace", "\\html@mathml{" + "\\mathclose{]\\mkern-3.2mu\\}}}" + "{\\mathclose{\\char`\u2984}}"); +defineMacro("\u2983", "\\lBrace"); // blackboard bold { + +defineMacro("\u2984", "\\rBrace"); // blackboard bold } +// TODO: Create variable sized versions of the last two items. I believe that +// will require new font glyphs. +////////////////////////////////////////////////////////////////////// +// texvc.sty +// The texvc package contains macros available in mediawiki pages. +// We omit the functions deprecated at +// https://en.wikipedia.org/wiki/Help:Displaying_a_formula#Deprecated_syntax +// We also omit texvc's \O, which conflicts with \text{\O} + +defineMacro("\\darr", "\\downarrow"); +defineMacro("\\dArr", "\\Downarrow"); +defineMacro("\\Darr", "\\Downarrow"); +defineMacro("\\lang", "\\langle"); +defineMacro("\\rang", "\\rangle"); +defineMacro("\\uarr", "\\uparrow"); +defineMacro("\\uArr", "\\Uparrow"); +defineMacro("\\Uarr", "\\Uparrow"); +defineMacro("\\N", "\\mathbb{N}"); +defineMacro("\\R", "\\mathbb{R}"); +defineMacro("\\Z", "\\mathbb{Z}"); +defineMacro("\\alef", "\\aleph"); +defineMacro("\\alefsym", "\\aleph"); +defineMacro("\\Alpha", "\\mathrm{A}"); +defineMacro("\\Beta", "\\mathrm{B}"); +defineMacro("\\bull", "\\bullet"); +defineMacro("\\Chi", "\\mathrm{X}"); +defineMacro("\\clubs", "\\clubsuit"); +defineMacro("\\cnums", "\\mathbb{C}"); +defineMacro("\\Complex", "\\mathbb{C}"); +defineMacro("\\Dagger", "\\ddagger"); +defineMacro("\\diamonds", "\\diamondsuit"); +defineMacro("\\empty", "\\emptyset"); +defineMacro("\\Epsilon", "\\mathrm{E}"); +defineMacro("\\Eta", "\\mathrm{H}"); +defineMacro("\\exist", "\\exists"); +defineMacro("\\harr", "\\leftrightarrow"); +defineMacro("\\hArr", "\\Leftrightarrow"); +defineMacro("\\Harr", "\\Leftrightarrow"); +defineMacro("\\hearts", "\\heartsuit"); +defineMacro("\\image", "\\Im"); +defineMacro("\\infin", "\\infty"); +defineMacro("\\Iota", "\\mathrm{I}"); +defineMacro("\\isin", "\\in"); +defineMacro("\\Kappa", "\\mathrm{K}"); +defineMacro("\\larr", "\\leftarrow"); +defineMacro("\\lArr", "\\Leftarrow"); +defineMacro("\\Larr", "\\Leftarrow"); +defineMacro("\\lrarr", "\\leftrightarrow"); +defineMacro("\\lrArr", "\\Leftrightarrow"); +defineMacro("\\Lrarr", "\\Leftrightarrow"); +defineMacro("\\Mu", "\\mathrm{M}"); +defineMacro("\\natnums", "\\mathbb{N}"); +defineMacro("\\Nu", "\\mathrm{N}"); +defineMacro("\\Omicron", "\\mathrm{O}"); +defineMacro("\\plusmn", "\\pm"); +defineMacro("\\rarr", "\\rightarrow"); +defineMacro("\\rArr", "\\Rightarrow"); +defineMacro("\\Rarr", "\\Rightarrow"); +defineMacro("\\real", "\\Re"); +defineMacro("\\reals", "\\mathbb{R}"); +defineMacro("\\Reals", "\\mathbb{R}"); +defineMacro("\\Rho", "\\mathrm{P}"); +defineMacro("\\sdot", "\\cdot"); +defineMacro("\\sect", "\\S"); +defineMacro("\\spades", "\\spadesuit"); +defineMacro("\\sub", "\\subset"); +defineMacro("\\sube", "\\subseteq"); +defineMacro("\\supe", "\\supseteq"); +defineMacro("\\Tau", "\\mathrm{T}"); +defineMacro("\\thetasym", "\\vartheta"); // TODO: defineMacro("\\varcoppa", "\\\mbox{\\coppa}"); + +defineMacro("\\weierp", "\\wp"); +defineMacro("\\Zeta", "\\mathrm{Z}"); ////////////////////////////////////////////////////////////////////// +// statmath.sty +// https://ctan.math.illinois.edu/macros/latex/contrib/statmath/statmath.pdf + +defineMacro("\\argmin", "\\DOTSB\\operatorname*{arg\\,min}"); +defineMacro("\\argmax", "\\DOTSB\\operatorname*{arg\\,max}"); +defineMacro("\\plim", "\\DOTSB\\mathop{\\operatorname{plim}}\\limits"); // Custom Khan Academy colors, should be moved to an optional package + +defineMacro("\\blue", "\\textcolor{##6495ed}{#1}"); +defineMacro("\\orange", "\\textcolor{##ffa500}{#1}"); +defineMacro("\\pink", "\\textcolor{##ff00af}{#1}"); +defineMacro("\\red", "\\textcolor{##df0030}{#1}"); +defineMacro("\\green", "\\textcolor{##28ae7b}{#1}"); +defineMacro("\\gray", "\\textcolor{gray}{#1}"); +defineMacro("\\purple", "\\textcolor{##9d38bd}{#1}"); +defineMacro("\\blueA", "\\textcolor{##ccfaff}{#1}"); +defineMacro("\\blueB", "\\textcolor{##80f6ff}{#1}"); +defineMacro("\\blueC", "\\textcolor{##63d9ea}{#1}"); +defineMacro("\\blueD", "\\textcolor{##11accd}{#1}"); +defineMacro("\\blueE", "\\textcolor{##0c7f99}{#1}"); +defineMacro("\\tealA", "\\textcolor{##94fff5}{#1}"); +defineMacro("\\tealB", "\\textcolor{##26edd5}{#1}"); +defineMacro("\\tealC", "\\textcolor{##01d1c1}{#1}"); +defineMacro("\\tealD", "\\textcolor{##01a995}{#1}"); +defineMacro("\\tealE", "\\textcolor{##208170}{#1}"); +defineMacro("\\greenA", "\\textcolor{##b6ffb0}{#1}"); +defineMacro("\\greenB", "\\textcolor{##8af281}{#1}"); +defineMacro("\\greenC", "\\textcolor{##74cf70}{#1}"); +defineMacro("\\greenD", "\\textcolor{##1fab54}{#1}"); +defineMacro("\\greenE", "\\textcolor{##0d923f}{#1}"); +defineMacro("\\goldA", "\\textcolor{##ffd0a9}{#1}"); +defineMacro("\\goldB", "\\textcolor{##ffbb71}{#1}"); +defineMacro("\\goldC", "\\textcolor{##ff9c39}{#1}"); +defineMacro("\\goldD", "\\textcolor{##e07d10}{#1}"); +defineMacro("\\goldE", "\\textcolor{##a75a05}{#1}"); +defineMacro("\\redA", "\\textcolor{##fca9a9}{#1}"); +defineMacro("\\redB", "\\textcolor{##ff8482}{#1}"); +defineMacro("\\redC", "\\textcolor{##f9685d}{#1}"); +defineMacro("\\redD", "\\textcolor{##e84d39}{#1}"); +defineMacro("\\redE", "\\textcolor{##bc2612}{#1}"); +defineMacro("\\maroonA", "\\textcolor{##ffbde0}{#1}"); +defineMacro("\\maroonB", "\\textcolor{##ff92c6}{#1}"); +defineMacro("\\maroonC", "\\textcolor{##ed5fa6}{#1}"); +defineMacro("\\maroonD", "\\textcolor{##ca337c}{#1}"); +defineMacro("\\maroonE", "\\textcolor{##9e034e}{#1}"); +defineMacro("\\purpleA", "\\textcolor{##ddd7ff}{#1}"); +defineMacro("\\purpleB", "\\textcolor{##c6b9fc}{#1}"); +defineMacro("\\purpleC", "\\textcolor{##aa87ff}{#1}"); +defineMacro("\\purpleD", "\\textcolor{##7854ab}{#1}"); +defineMacro("\\purpleE", "\\textcolor{##543b78}{#1}"); +defineMacro("\\mintA", "\\textcolor{##f5f9e8}{#1}"); +defineMacro("\\mintB", "\\textcolor{##edf2df}{#1}"); +defineMacro("\\mintC", "\\textcolor{##e0e5cc}{#1}"); +defineMacro("\\grayA", "\\textcolor{##f6f7f7}{#1}"); +defineMacro("\\grayB", "\\textcolor{##f0f1f2}{#1}"); +defineMacro("\\grayC", "\\textcolor{##e3e5e6}{#1}"); +defineMacro("\\grayD", "\\textcolor{##d6d8da}{#1}"); +defineMacro("\\grayE", "\\textcolor{##babec2}{#1}"); +defineMacro("\\grayF", "\\textcolor{##888d93}{#1}"); +defineMacro("\\grayG", "\\textcolor{##626569}{#1}"); +defineMacro("\\grayH", "\\textcolor{##3b3e40}{#1}"); +defineMacro("\\grayI", "\\textcolor{##21242c}{#1}"); +defineMacro("\\kaBlue", "\\textcolor{##314453}{#1}"); +defineMacro("\\kaGreen", "\\textcolor{##71B307}{#1}"); +// CONCATENATED MODULE: ./src/MacroExpander.js +/** + * This file contains the “gullet” where macros are expanded + * until only non-macro tokens remain. + */ + + + + + + + +// List of commands that act like macros but aren't defined as a macro, +// function, or symbol. Used in `isDefined`. +var implicitCommands = { + "\\relax": true, + // MacroExpander.js + "^": true, + // Parser.js + "_": true, + // Parser.js + "\\limits": true, + // Parser.js + "\\nolimits": true // Parser.js + +}; + +var MacroExpander_MacroExpander = +/*#__PURE__*/ +function () { + function MacroExpander(input, settings, mode) { + this.settings = void 0; + this.expansionCount = void 0; + this.lexer = void 0; + this.macros = void 0; + this.stack = void 0; + this.mode = void 0; + this.settings = settings; + this.expansionCount = 0; + this.feed(input); // Make new global namespace + + this.macros = new Namespace_Namespace(macros, settings.macros); + this.mode = mode; + this.stack = []; // contains tokens in REVERSE order + } + /** + * Feed a new input string to the same MacroExpander + * (with existing macros etc.). + */ + + + var _proto = MacroExpander.prototype; + + _proto.feed = function feed(input) { + this.lexer = new Lexer_Lexer(input, this.settings); + } + /** + * Switches between "text" and "math" modes. + */ + ; + + _proto.switchMode = function switchMode(newMode) { + this.mode = newMode; + } + /** + * Start a new group nesting within all namespaces. + */ + ; + + _proto.beginGroup = function beginGroup() { + this.macros.beginGroup(); + } + /** + * End current group nesting within all namespaces. + */ + ; + + _proto.endGroup = function endGroup() { + this.macros.endGroup(); + } + /** + * Returns the topmost token on the stack, without expanding it. + * Similar in behavior to TeX's `\futurelet`. + */ + ; + + _proto.future = function future() { + if (this.stack.length === 0) { + this.pushToken(this.lexer.lex()); + } + + return this.stack[this.stack.length - 1]; + } + /** + * Remove and return the next unexpanded token. + */ + ; + + _proto.popToken = function popToken() { + this.future(); // ensure non-empty stack + + return this.stack.pop(); + } + /** + * Add a given token to the token stack. In particular, this get be used + * to put back a token returned from one of the other methods. + */ + ; + + _proto.pushToken = function pushToken(token) { + this.stack.push(token); + } + /** + * Append an array of tokens to the token stack. + */ + ; + + _proto.pushTokens = function pushTokens(tokens) { + var _this$stack; + + (_this$stack = this.stack).push.apply(_this$stack, tokens); + } + /** + * Consume all following space tokens, without expansion. + */ + ; + + _proto.consumeSpaces = function consumeSpaces() { + for (;;) { + var token = this.future(); + + if (token.text === " ") { + this.stack.pop(); + } else { + break; + } + } + } + /** + * Consume the specified number of arguments from the token stream, + * and return the resulting array of arguments. + */ + ; + + _proto.consumeArgs = function consumeArgs(numArgs) { + var args = []; // obtain arguments, either single token or balanced {…} group + + for (var i = 0; i < numArgs; ++i) { + this.consumeSpaces(); // ignore spaces before each argument + + var startOfArg = this.popToken(); + + if (startOfArg.text === "{") { + var arg = []; + var depth = 1; + + while (depth !== 0) { + var tok = this.popToken(); + arg.push(tok); + + if (tok.text === "{") { + ++depth; + } else if (tok.text === "}") { + --depth; + } else if (tok.text === "EOF") { + throw new src_ParseError("End of input in macro argument", startOfArg); + } + } + + arg.pop(); // remove last } + + arg.reverse(); // like above, to fit in with stack order + + args[i] = arg; + } else if (startOfArg.text === "EOF") { + throw new src_ParseError("End of input expecting macro argument"); + } else { + args[i] = [startOfArg]; + } + } + + return args; + } + /** + * Expand the next token only once if possible. + * + * If the token is expanded, the resulting tokens will be pushed onto + * the stack in reverse order and will be returned as an array, + * also in reverse order. + * + * If not, the next token will be returned without removing it + * from the stack. This case can be detected by a `Token` return value + * instead of an `Array` return value. + * + * In either case, the next token will be on the top of the stack, + * or the stack will be empty. + * + * Used to implement `expandAfterFuture` and `expandNextToken`. + * + * At the moment, macro expansion doesn't handle delimited macros, + * i.e. things like those defined by \def\foo#1\end{…}. + * See the TeX book page 202ff. for details on how those should behave. + */ + ; + + _proto.expandOnce = function expandOnce() { + var topToken = this.popToken(); + var name = topToken.text; + + var expansion = this._getExpansion(name); + + if (expansion == null) { + // mainly checking for undefined here + // Fully expanded + this.pushToken(topToken); + return topToken; + } + + this.expansionCount++; + + if (this.expansionCount > this.settings.maxExpand) { + throw new src_ParseError("Too many expansions: infinite loop or " + "need to increase maxExpand setting"); + } + + var tokens = expansion.tokens; + + if (expansion.numArgs) { + var args = this.consumeArgs(expansion.numArgs); // paste arguments in place of the placeholders + + tokens = tokens.slice(); // make a shallow copy + + for (var i = tokens.length - 1; i >= 0; --i) { + var tok = tokens[i]; + + if (tok.text === "#") { + if (i === 0) { + throw new src_ParseError("Incomplete placeholder at end of macro body", tok); + } + + tok = tokens[--i]; // next token on stack + + if (tok.text === "#") { + // ## → # + tokens.splice(i + 1, 1); // drop first # + } else if (/^[1-9]$/.test(tok.text)) { + var _tokens; + + // replace the placeholder with the indicated argument + (_tokens = tokens).splice.apply(_tokens, [i, 2].concat(args[+tok.text - 1])); + } else { + throw new src_ParseError("Not a valid argument number", tok); + } + } + } + } // Concatenate expansion onto top of stack. + + + this.pushTokens(tokens); + return tokens; + } + /** + * Expand the next token only once (if possible), and return the resulting + * top token on the stack (without removing anything from the stack). + * Similar in behavior to TeX's `\expandafter\futurelet`. + * Equivalent to expandOnce() followed by future(). + */ + ; + + _proto.expandAfterFuture = function expandAfterFuture() { + this.expandOnce(); + return this.future(); + } + /** + * Recursively expand first token, then return first non-expandable token. + */ + ; + + _proto.expandNextToken = function expandNextToken() { + for (;;) { + var expanded = this.expandOnce(); // expandOnce returns Token if and only if it's fully expanded. + + if (expanded instanceof Token_Token) { + // \relax stops the expansion, but shouldn't get returned (a + // null return value couldn't get implemented as a function). + if (expanded.text === "\\relax") { + this.stack.pop(); + } else { + return this.stack.pop(); // === expanded + } + } + } // Flow unable to figure out that this pathway is impossible. + // https://github.com/facebook/flow/issues/4808 + + + throw new Error(); // eslint-disable-line no-unreachable + } + /** + * Fully expand the given macro name and return the resulting list of + * tokens, or return `undefined` if no such macro is defined. + */ + ; + + _proto.expandMacro = function expandMacro(name) { + if (!this.macros.get(name)) { + return undefined; + } + + var output = []; + var oldStackLength = this.stack.length; + this.pushToken(new Token_Token(name)); + + while (this.stack.length > oldStackLength) { + var expanded = this.expandOnce(); // expandOnce returns Token if and only if it's fully expanded. + + if (expanded instanceof Token_Token) { + output.push(this.stack.pop()); + } + } + + return output; + } + /** + * Fully expand the given macro name and return the result as a string, + * or return `undefined` if no such macro is defined. + */ + ; + + _proto.expandMacroAsText = function expandMacroAsText(name) { + var tokens = this.expandMacro(name); + + if (tokens) { + return tokens.map(function (token) { + return token.text; + }).join(""); + } else { + return tokens; + } + } + /** + * Returns the expanded macro as a reversed array of tokens and a macro + * argument count. Or returns `null` if no such macro. + */ + ; + + _proto._getExpansion = function _getExpansion(name) { + var definition = this.macros.get(name); + + if (definition == null) { + // mainly checking for undefined here + return definition; + } + + var expansion = typeof definition === "function" ? definition(this) : definition; + + if (typeof expansion === "string") { + var numArgs = 0; + + if (expansion.indexOf("#") !== -1) { + var stripped = expansion.replace(/##/g, ""); + + while (stripped.indexOf("#" + (numArgs + 1)) !== -1) { + ++numArgs; + } + } + + var bodyLexer = new Lexer_Lexer(expansion, this.settings); + var tokens = []; + var tok = bodyLexer.lex(); + + while (tok.text !== "EOF") { + tokens.push(tok); + tok = bodyLexer.lex(); + } + + tokens.reverse(); // to fit in with stack using push and pop + + var expanded = { + tokens: tokens, + numArgs: numArgs + }; + return expanded; + } + + return expansion; + } + /** + * Determine whether a command is currently "defined" (has some + * functionality), meaning that it's a macro (in the current group), + * a function, a symbol, or one of the special commands listed in + * `implicitCommands`. + */ + ; + + _proto.isDefined = function isDefined(name) { + return this.macros.has(name) || src_functions.hasOwnProperty(name) || src_symbols.math.hasOwnProperty(name) || src_symbols.text.hasOwnProperty(name) || implicitCommands.hasOwnProperty(name); + }; + + return MacroExpander; +}(); + + +// CONCATENATED MODULE: ./src/unicodeAccents.js +// Mapping of Unicode accent characters to their LaTeX equivalent in text and +// math mode (when they exist). +/* harmony default export */ var unicodeAccents = ({ + "\u0301": { + text: "\\'", + math: '\\acute' + }, + "\u0300": { + text: '\\`', + math: '\\grave' + }, + "\u0308": { + text: '\\"', + math: '\\ddot' + }, + "\u0303": { + text: '\\~', + math: '\\tilde' + }, + "\u0304": { + text: '\\=', + math: '\\bar' + }, + "\u0306": { + text: "\\u", + math: '\\breve' + }, + "\u030C": { + text: '\\v', + math: '\\check' + }, + "\u0302": { + text: '\\^', + math: '\\hat' + }, + "\u0307": { + text: '\\.', + math: '\\dot' + }, + "\u030A": { + text: '\\r', + math: '\\mathring' + }, + "\u030B": { + text: '\\H' + } +}); +// CONCATENATED MODULE: ./src/unicodeSymbols.js +// This file is GENERATED by unicodeMake.js. DO NOT MODIFY. +/* harmony default export */ var unicodeSymbols = ({ + "\xE1": "a\u0301", + // á = \'{a} + "\xE0": "a\u0300", + // à = \`{a} + "\xE4": "a\u0308", + // ä = \"{a} + "\u01DF": "a\u0308\u0304", + // ǟ = \"\={a} + "\xE3": "a\u0303", + // ã = \~{a} + "\u0101": "a\u0304", + // ā = \={a} + "\u0103": "a\u0306", + // ă = \u{a} + "\u1EAF": "a\u0306\u0301", + // ắ = \u\'{a} + "\u1EB1": "a\u0306\u0300", + // ằ = \u\`{a} + "\u1EB5": "a\u0306\u0303", + // ẵ = \u\~{a} + "\u01CE": "a\u030C", + // ǎ = \v{a} + "\xE2": "a\u0302", + // â = \^{a} + "\u1EA5": "a\u0302\u0301", + // ấ = \^\'{a} + "\u1EA7": "a\u0302\u0300", + // ầ = \^\`{a} + "\u1EAB": "a\u0302\u0303", + // ẫ = \^\~{a} + "\u0227": "a\u0307", + // ȧ = \.{a} + "\u01E1": "a\u0307\u0304", + // ǡ = \.\={a} + "\xE5": "a\u030A", + // å = \r{a} + "\u01FB": "a\u030A\u0301", + // ǻ = \r\'{a} + "\u1E03": "b\u0307", + // ḃ = \.{b} + "\u0107": "c\u0301", + // ć = \'{c} + "\u010D": "c\u030C", + // č = \v{c} + "\u0109": "c\u0302", + // ĉ = \^{c} + "\u010B": "c\u0307", + // ċ = \.{c} + "\u010F": "d\u030C", + // ď = \v{d} + "\u1E0B": "d\u0307", + // ḋ = \.{d} + "\xE9": "e\u0301", + // é = \'{e} + "\xE8": "e\u0300", + // è = \`{e} + "\xEB": "e\u0308", + // ë = \"{e} + "\u1EBD": "e\u0303", + // ẽ = \~{e} + "\u0113": "e\u0304", + // ē = \={e} + "\u1E17": "e\u0304\u0301", + // ḗ = \=\'{e} + "\u1E15": "e\u0304\u0300", + // ḕ = \=\`{e} + "\u0115": "e\u0306", + // ĕ = \u{e} + "\u011B": "e\u030C", + // ě = \v{e} + "\xEA": "e\u0302", + // ê = \^{e} + "\u1EBF": "e\u0302\u0301", + // ế = \^\'{e} + "\u1EC1": "e\u0302\u0300", + // ề = \^\`{e} + "\u1EC5": "e\u0302\u0303", + // ễ = \^\~{e} + "\u0117": "e\u0307", + // ė = \.{e} + "\u1E1F": "f\u0307", + // ḟ = \.{f} + "\u01F5": "g\u0301", + // ǵ = \'{g} + "\u1E21": "g\u0304", + // ḡ = \={g} + "\u011F": "g\u0306", + // ğ = \u{g} + "\u01E7": "g\u030C", + // ǧ = \v{g} + "\u011D": "g\u0302", + // ĝ = \^{g} + "\u0121": "g\u0307", + // ġ = \.{g} + "\u1E27": "h\u0308", + // ḧ = \"{h} + "\u021F": "h\u030C", + // ȟ = \v{h} + "\u0125": "h\u0302", + // ĥ = \^{h} + "\u1E23": "h\u0307", + // ḣ = \.{h} + "\xED": "i\u0301", + // í = \'{i} + "\xEC": "i\u0300", + // ì = \`{i} + "\xEF": "i\u0308", + // ï = \"{i} + "\u1E2F": "i\u0308\u0301", + // ḯ = \"\'{i} + "\u0129": "i\u0303", + // ĩ = \~{i} + "\u012B": "i\u0304", + // ī = \={i} + "\u012D": "i\u0306", + // ĭ = \u{i} + "\u01D0": "i\u030C", + // ǐ = \v{i} + "\xEE": "i\u0302", + // î = \^{i} + "\u01F0": "j\u030C", + // ǰ = \v{j} + "\u0135": "j\u0302", + // ĵ = \^{j} + "\u1E31": "k\u0301", + // ḱ = \'{k} + "\u01E9": "k\u030C", + // ǩ = \v{k} + "\u013A": "l\u0301", + // ĺ = \'{l} + "\u013E": "l\u030C", + // ľ = \v{l} + "\u1E3F": "m\u0301", + // ḿ = \'{m} + "\u1E41": "m\u0307", + // ṁ = \.{m} + "\u0144": "n\u0301", + // ń = \'{n} + "\u01F9": "n\u0300", + // ǹ = \`{n} + "\xF1": "n\u0303", + // ñ = \~{n} + "\u0148": "n\u030C", + // ň = \v{n} + "\u1E45": "n\u0307", + // ṅ = \.{n} + "\xF3": "o\u0301", + // ó = \'{o} + "\xF2": "o\u0300", + // ò = \`{o} + "\xF6": "o\u0308", + // ö = \"{o} + "\u022B": "o\u0308\u0304", + // ȫ = \"\={o} + "\xF5": "o\u0303", + // õ = \~{o} + "\u1E4D": "o\u0303\u0301", + // ṍ = \~\'{o} + "\u1E4F": "o\u0303\u0308", + // ṏ = \~\"{o} + "\u022D": "o\u0303\u0304", + // ȭ = \~\={o} + "\u014D": "o\u0304", + // ō = \={o} + "\u1E53": "o\u0304\u0301", + // ṓ = \=\'{o} + "\u1E51": "o\u0304\u0300", + // ṑ = \=\`{o} + "\u014F": "o\u0306", + // ŏ = \u{o} + "\u01D2": "o\u030C", + // ǒ = \v{o} + "\xF4": "o\u0302", + // ô = \^{o} + "\u1ED1": "o\u0302\u0301", + // ố = \^\'{o} + "\u1ED3": "o\u0302\u0300", + // ồ = \^\`{o} + "\u1ED7": "o\u0302\u0303", + // ỗ = \^\~{o} + "\u022F": "o\u0307", + // ȯ = \.{o} + "\u0231": "o\u0307\u0304", + // ȱ = \.\={o} + "\u0151": "o\u030B", + // ő = \H{o} + "\u1E55": "p\u0301", + // ṕ = \'{p} + "\u1E57": "p\u0307", + // ṗ = \.{p} + "\u0155": "r\u0301", + // ŕ = \'{r} + "\u0159": "r\u030C", + // ř = \v{r} + "\u1E59": "r\u0307", + // ṙ = \.{r} + "\u015B": "s\u0301", + // ś = \'{s} + "\u1E65": "s\u0301\u0307", + // ṥ = \'\.{s} + "\u0161": "s\u030C", + // š = \v{s} + "\u1E67": "s\u030C\u0307", + // ṧ = \v\.{s} + "\u015D": "s\u0302", + // ŝ = \^{s} + "\u1E61": "s\u0307", + // ṡ = \.{s} + "\u1E97": "t\u0308", + // ẗ = \"{t} + "\u0165": "t\u030C", + // ť = \v{t} + "\u1E6B": "t\u0307", + // ṫ = \.{t} + "\xFA": "u\u0301", + // ú = \'{u} + "\xF9": "u\u0300", + // ù = \`{u} + "\xFC": "u\u0308", + // ü = \"{u} + "\u01D8": "u\u0308\u0301", + // ǘ = \"\'{u} + "\u01DC": "u\u0308\u0300", + // ǜ = \"\`{u} + "\u01D6": "u\u0308\u0304", + // ǖ = \"\={u} + "\u01DA": "u\u0308\u030C", + // ǚ = \"\v{u} + "\u0169": "u\u0303", + // ũ = \~{u} + "\u1E79": "u\u0303\u0301", + // ṹ = \~\'{u} + "\u016B": "u\u0304", + // ū = \={u} + "\u1E7B": "u\u0304\u0308", + // ṻ = \=\"{u} + "\u016D": "u\u0306", + // ŭ = \u{u} + "\u01D4": "u\u030C", + // ǔ = \v{u} + "\xFB": "u\u0302", + // û = \^{u} + "\u016F": "u\u030A", + // ů = \r{u} + "\u0171": "u\u030B", + // ű = \H{u} + "\u1E7D": "v\u0303", + // ṽ = \~{v} + "\u1E83": "w\u0301", + // ẃ = \'{w} + "\u1E81": "w\u0300", + // ẁ = \`{w} + "\u1E85": "w\u0308", + // ẅ = \"{w} + "\u0175": "w\u0302", + // ŵ = \^{w} + "\u1E87": "w\u0307", + // ẇ = \.{w} + "\u1E98": "w\u030A", + // ẘ = \r{w} + "\u1E8D": "x\u0308", + // ẍ = \"{x} + "\u1E8B": "x\u0307", + // ẋ = \.{x} + "\xFD": "y\u0301", + // ý = \'{y} + "\u1EF3": "y\u0300", + // ỳ = \`{y} + "\xFF": "y\u0308", + // ÿ = \"{y} + "\u1EF9": "y\u0303", + // ỹ = \~{y} + "\u0233": "y\u0304", + // ȳ = \={y} + "\u0177": "y\u0302", + // ŷ = \^{y} + "\u1E8F": "y\u0307", + // ẏ = \.{y} + "\u1E99": "y\u030A", + // ẙ = \r{y} + "\u017A": "z\u0301", + // ź = \'{z} + "\u017E": "z\u030C", + // ž = \v{z} + "\u1E91": "z\u0302", + // ẑ = \^{z} + "\u017C": "z\u0307", + // ż = \.{z} + "\xC1": "A\u0301", + // Á = \'{A} + "\xC0": "A\u0300", + // À = \`{A} + "\xC4": "A\u0308", + // Ä = \"{A} + "\u01DE": "A\u0308\u0304", + // Ǟ = \"\={A} + "\xC3": "A\u0303", + // Ã = \~{A} + "\u0100": "A\u0304", + // Ā = \={A} + "\u0102": "A\u0306", + // Ă = \u{A} + "\u1EAE": "A\u0306\u0301", + // Ắ = \u\'{A} + "\u1EB0": "A\u0306\u0300", + // Ằ = \u\`{A} + "\u1EB4": "A\u0306\u0303", + // Ẵ = \u\~{A} + "\u01CD": "A\u030C", + // Ǎ = \v{A} + "\xC2": "A\u0302", + // Â = \^{A} + "\u1EA4": "A\u0302\u0301", + // Ấ = \^\'{A} + "\u1EA6": "A\u0302\u0300", + // Ầ = \^\`{A} + "\u1EAA": "A\u0302\u0303", + // Ẫ = \^\~{A} + "\u0226": "A\u0307", + // Ȧ = \.{A} + "\u01E0": "A\u0307\u0304", + // Ǡ = \.\={A} + "\xC5": "A\u030A", + // Å = \r{A} + "\u01FA": "A\u030A\u0301", + // Ǻ = \r\'{A} + "\u1E02": "B\u0307", + // Ḃ = \.{B} + "\u0106": "C\u0301", + // Ć = \'{C} + "\u010C": "C\u030C", + // Č = \v{C} + "\u0108": "C\u0302", + // Ĉ = \^{C} + "\u010A": "C\u0307", + // Ċ = \.{C} + "\u010E": "D\u030C", + // Ď = \v{D} + "\u1E0A": "D\u0307", + // Ḋ = \.{D} + "\xC9": "E\u0301", + // É = \'{E} + "\xC8": "E\u0300", + // È = \`{E} + "\xCB": "E\u0308", + // Ë = \"{E} + "\u1EBC": "E\u0303", + // Ẽ = \~{E} + "\u0112": "E\u0304", + // Ē = \={E} + "\u1E16": "E\u0304\u0301", + // Ḗ = \=\'{E} + "\u1E14": "E\u0304\u0300", + // Ḕ = \=\`{E} + "\u0114": "E\u0306", + // Ĕ = \u{E} + "\u011A": "E\u030C", + // Ě = \v{E} + "\xCA": "E\u0302", + // Ê = \^{E} + "\u1EBE": "E\u0302\u0301", + // Ế = \^\'{E} + "\u1EC0": "E\u0302\u0300", + // Ề = \^\`{E} + "\u1EC4": "E\u0302\u0303", + // Ễ = \^\~{E} + "\u0116": "E\u0307", + // Ė = \.{E} + "\u1E1E": "F\u0307", + // Ḟ = \.{F} + "\u01F4": "G\u0301", + // Ǵ = \'{G} + "\u1E20": "G\u0304", + // Ḡ = \={G} + "\u011E": "G\u0306", + // Ğ = \u{G} + "\u01E6": "G\u030C", + // Ǧ = \v{G} + "\u011C": "G\u0302", + // Ĝ = \^{G} + "\u0120": "G\u0307", + // Ġ = \.{G} + "\u1E26": "H\u0308", + // Ḧ = \"{H} + "\u021E": "H\u030C", + // Ȟ = \v{H} + "\u0124": "H\u0302", + // Ĥ = \^{H} + "\u1E22": "H\u0307", + // Ḣ = \.{H} + "\xCD": "I\u0301", + // Í = \'{I} + "\xCC": "I\u0300", + // Ì = \`{I} + "\xCF": "I\u0308", + // Ï = \"{I} + "\u1E2E": "I\u0308\u0301", + // Ḯ = \"\'{I} + "\u0128": "I\u0303", + // Ĩ = \~{I} + "\u012A": "I\u0304", + // Ī = \={I} + "\u012C": "I\u0306", + // Ĭ = \u{I} + "\u01CF": "I\u030C", + // Ǐ = \v{I} + "\xCE": "I\u0302", + // Î = \^{I} + "\u0130": "I\u0307", + // İ = \.{I} + "\u0134": "J\u0302", + // Ĵ = \^{J} + "\u1E30": "K\u0301", + // Ḱ = \'{K} + "\u01E8": "K\u030C", + // Ǩ = \v{K} + "\u0139": "L\u0301", + // Ĺ = \'{L} + "\u013D": "L\u030C", + // Ľ = \v{L} + "\u1E3E": "M\u0301", + // Ḿ = \'{M} + "\u1E40": "M\u0307", + // Ṁ = \.{M} + "\u0143": "N\u0301", + // Ń = \'{N} + "\u01F8": "N\u0300", + // Ǹ = \`{N} + "\xD1": "N\u0303", + // Ñ = \~{N} + "\u0147": "N\u030C", + // Ň = \v{N} + "\u1E44": "N\u0307", + // Ṅ = \.{N} + "\xD3": "O\u0301", + // Ó = \'{O} + "\xD2": "O\u0300", + // Ò = \`{O} + "\xD6": "O\u0308", + // Ö = \"{O} + "\u022A": "O\u0308\u0304", + // Ȫ = \"\={O} + "\xD5": "O\u0303", + // Õ = \~{O} + "\u1E4C": "O\u0303\u0301", + // Ṍ = \~\'{O} + "\u1E4E": "O\u0303\u0308", + // Ṏ = \~\"{O} + "\u022C": "O\u0303\u0304", + // Ȭ = \~\={O} + "\u014C": "O\u0304", + // Ō = \={O} + "\u1E52": "O\u0304\u0301", + // Ṓ = \=\'{O} + "\u1E50": "O\u0304\u0300", + // Ṑ = \=\`{O} + "\u014E": "O\u0306", + // Ŏ = \u{O} + "\u01D1": "O\u030C", + // Ǒ = \v{O} + "\xD4": "O\u0302", + // Ô = \^{O} + "\u1ED0": "O\u0302\u0301", + // Ố = \^\'{O} + "\u1ED2": "O\u0302\u0300", + // Ồ = \^\`{O} + "\u1ED6": "O\u0302\u0303", + // Ỗ = \^\~{O} + "\u022E": "O\u0307", + // Ȯ = \.{O} + "\u0230": "O\u0307\u0304", + // Ȱ = \.\={O} + "\u0150": "O\u030B", + // Ő = \H{O} + "\u1E54": "P\u0301", + // Ṕ = \'{P} + "\u1E56": "P\u0307", + // Ṗ = \.{P} + "\u0154": "R\u0301", + // Ŕ = \'{R} + "\u0158": "R\u030C", + // Ř = \v{R} + "\u1E58": "R\u0307", + // Ṙ = \.{R} + "\u015A": "S\u0301", + // Ś = \'{S} + "\u1E64": "S\u0301\u0307", + // Ṥ = \'\.{S} + "\u0160": "S\u030C", + // Š = \v{S} + "\u1E66": "S\u030C\u0307", + // Ṧ = \v\.{S} + "\u015C": "S\u0302", + // Ŝ = \^{S} + "\u1E60": "S\u0307", + // Ṡ = \.{S} + "\u0164": "T\u030C", + // Ť = \v{T} + "\u1E6A": "T\u0307", + // Ṫ = \.{T} + "\xDA": "U\u0301", + // Ú = \'{U} + "\xD9": "U\u0300", + // Ù = \`{U} + "\xDC": "U\u0308", + // Ü = \"{U} + "\u01D7": "U\u0308\u0301", + // Ǘ = \"\'{U} + "\u01DB": "U\u0308\u0300", + // Ǜ = \"\`{U} + "\u01D5": "U\u0308\u0304", + // Ǖ = \"\={U} + "\u01D9": "U\u0308\u030C", + // Ǚ = \"\v{U} + "\u0168": "U\u0303", + // Ũ = \~{U} + "\u1E78": "U\u0303\u0301", + // Ṹ = \~\'{U} + "\u016A": "U\u0304", + // Ū = \={U} + "\u1E7A": "U\u0304\u0308", + // Ṻ = \=\"{U} + "\u016C": "U\u0306", + // Ŭ = \u{U} + "\u01D3": "U\u030C", + // Ǔ = \v{U} + "\xDB": "U\u0302", + // Û = \^{U} + "\u016E": "U\u030A", + // Ů = \r{U} + "\u0170": "U\u030B", + // Ű = \H{U} + "\u1E7C": "V\u0303", + // Ṽ = \~{V} + "\u1E82": "W\u0301", + // Ẃ = \'{W} + "\u1E80": "W\u0300", + // Ẁ = \`{W} + "\u1E84": "W\u0308", + // Ẅ = \"{W} + "\u0174": "W\u0302", + // Ŵ = \^{W} + "\u1E86": "W\u0307", + // Ẇ = \.{W} + "\u1E8C": "X\u0308", + // Ẍ = \"{X} + "\u1E8A": "X\u0307", + // Ẋ = \.{X} + "\xDD": "Y\u0301", + // Ý = \'{Y} + "\u1EF2": "Y\u0300", + // Ỳ = \`{Y} + "\u0178": "Y\u0308", + // Ÿ = \"{Y} + "\u1EF8": "Y\u0303", + // Ỹ = \~{Y} + "\u0232": "Y\u0304", + // Ȳ = \={Y} + "\u0176": "Y\u0302", + // Ŷ = \^{Y} + "\u1E8E": "Y\u0307", + // Ẏ = \.{Y} + "\u0179": "Z\u0301", + // Ź = \'{Z} + "\u017D": "Z\u030C", + // Ž = \v{Z} + "\u1E90": "Z\u0302", + // Ẑ = \^{Z} + "\u017B": "Z\u0307", + // Ż = \.{Z} + "\u03AC": "\u03B1\u0301", + // ά = \'{α} + "\u1F70": "\u03B1\u0300", + // ὰ = \`{α} + "\u1FB1": "\u03B1\u0304", + // ᾱ = \={α} + "\u1FB0": "\u03B1\u0306", + // ᾰ = \u{α} + "\u03AD": "\u03B5\u0301", + // έ = \'{ε} + "\u1F72": "\u03B5\u0300", + // ὲ = \`{ε} + "\u03AE": "\u03B7\u0301", + // ή = \'{η} + "\u1F74": "\u03B7\u0300", + // ὴ = \`{η} + "\u03AF": "\u03B9\u0301", + // ί = \'{ι} + "\u1F76": "\u03B9\u0300", + // ὶ = \`{ι} + "\u03CA": "\u03B9\u0308", + // ϊ = \"{ι} + "\u0390": "\u03B9\u0308\u0301", + // ΐ = \"\'{ι} + "\u1FD2": "\u03B9\u0308\u0300", + // ῒ = \"\`{ι} + "\u1FD1": "\u03B9\u0304", + // ῑ = \={ι} + "\u1FD0": "\u03B9\u0306", + // ῐ = \u{ι} + "\u03CC": "\u03BF\u0301", + // ό = \'{ο} + "\u1F78": "\u03BF\u0300", + // ὸ = \`{ο} + "\u03CD": "\u03C5\u0301", + // ύ = \'{υ} + "\u1F7A": "\u03C5\u0300", + // ὺ = \`{υ} + "\u03CB": "\u03C5\u0308", + // ϋ = \"{υ} + "\u03B0": "\u03C5\u0308\u0301", + // ΰ = \"\'{υ} + "\u1FE2": "\u03C5\u0308\u0300", + // ῢ = \"\`{υ} + "\u1FE1": "\u03C5\u0304", + // ῡ = \={υ} + "\u1FE0": "\u03C5\u0306", + // ῠ = \u{υ} + "\u03CE": "\u03C9\u0301", + // ώ = \'{ω} + "\u1F7C": "\u03C9\u0300", + // ὼ = \`{ω} + "\u038E": "\u03A5\u0301", + // Ύ = \'{Υ} + "\u1FEA": "\u03A5\u0300", + // Ὺ = \`{Υ} + "\u03AB": "\u03A5\u0308", + // Ϋ = \"{Υ} + "\u1FE9": "\u03A5\u0304", + // Ῡ = \={Υ} + "\u1FE8": "\u03A5\u0306", + // Ῠ = \u{Υ} + "\u038F": "\u03A9\u0301", + // Ώ = \'{Ω} + "\u1FFA": "\u03A9\u0300" // Ὼ = \`{Ω} + +}); +// CONCATENATED MODULE: ./src/Parser.js +/* eslint no-constant-condition:0 */ + + + + + + + + + + + + + + +/** + * This file contains the parser used to parse out a TeX expression from the + * input. Since TeX isn't context-free, standard parsers don't work particularly + * well. + * + * The strategy of this parser is as such: + * + * The main functions (the `.parse...` ones) take a position in the current + * parse string to parse tokens from. The lexer (found in Lexer.js, stored at + * this.gullet.lexer) also supports pulling out tokens at arbitrary places. When + * individual tokens are needed at a position, the lexer is called to pull out a + * token, which is then used. + * + * The parser has a property called "mode" indicating the mode that + * the parser is currently in. Currently it has to be one of "math" or + * "text", which denotes whether the current environment is a math-y + * one or a text-y one (e.g. inside \text). Currently, this serves to + * limit the functions which can be used in text mode. + * + * The main functions then return an object which contains the useful data that + * was parsed at its given point, and a new position at the end of the parsed + * data. The main functions can call each other and continue the parsing by + * using the returned position as a new starting point. + * + * There are also extra `.handle...` functions, which pull out some reused + * functionality into self-contained functions. + * + * The functions return ParseNodes. + */ +var Parser_Parser = +/*#__PURE__*/ +function () { + function Parser(input, settings) { + this.mode = void 0; + this.gullet = void 0; + this.settings = void 0; + this.leftrightDepth = void 0; + this.nextToken = void 0; + // Start in math mode + this.mode = "math"; // Create a new macro expander (gullet) and (indirectly via that) also a + // new lexer (mouth) for this parser (stomach, in the language of TeX) + + this.gullet = new MacroExpander_MacroExpander(input, settings, this.mode); // Store the settings for use in parsing + + this.settings = settings; // Count leftright depth (for \middle errors) + + this.leftrightDepth = 0; + } + /** + * Checks a result to make sure it has the right type, and throws an + * appropriate error otherwise. + */ + + + var _proto = Parser.prototype; + + _proto.expect = function expect(text, consume) { + if (consume === void 0) { + consume = true; + } + + if (this.fetch().text !== text) { + throw new src_ParseError("Expected '" + text + "', got '" + this.fetch().text + "'", this.fetch()); + } + + if (consume) { + this.consume(); + } + } + /** + * Discards the current lookahead token, considering it consumed. + */ + ; + + _proto.consume = function consume() { + this.nextToken = null; + } + /** + * Return the current lookahead token, or if there isn't one (at the + * beginning, or if the previous lookahead token was consume()d), + * fetch the next token as the new lookahead token and return it. + */ + ; + + _proto.fetch = function fetch() { + if (this.nextToken == null) { + this.nextToken = this.gullet.expandNextToken(); + } + + return this.nextToken; + } + /** + * Switches between "text" and "math" modes. + */ + ; + + _proto.switchMode = function switchMode(newMode) { + this.mode = newMode; + this.gullet.switchMode(newMode); + } + /** + * Main parsing function, which parses an entire input. + */ + ; + + _proto.parse = function parse() { + // Create a group namespace for the math expression. + // (LaTeX creates a new group for every $...$, $$...$$, \[...\].) + this.gullet.beginGroup(); // Use old \color behavior (same as LaTeX's \textcolor) if requested. + // We do this within the group for the math expression, so it doesn't + // pollute settings.macros. + + if (this.settings.colorIsTextColor) { + this.gullet.macros.set("\\color", "\\textcolor"); + } // Try to parse the input + + + var parse = this.parseExpression(false); // If we succeeded, make sure there's an EOF at the end + + this.expect("EOF"); // End the group namespace for the expression + + this.gullet.endGroup(); + return parse; + }; + + _proto.parseExpression = function parseExpression(breakOnInfix, breakOnTokenText) { + var body = []; // Keep adding atoms to the body until we can't parse any more atoms (either + // we reached the end, a }, or a \right) + + while (true) { + // Ignore spaces in math mode + if (this.mode === "math") { + this.consumeSpaces(); + } + + var lex = this.fetch(); + + if (Parser.endOfExpression.indexOf(lex.text) !== -1) { + break; + } + + if (breakOnTokenText && lex.text === breakOnTokenText) { + break; + } + + if (breakOnInfix && src_functions[lex.text] && src_functions[lex.text].infix) { + break; + } + + var atom = this.parseAtom(breakOnTokenText); + + if (!atom) { + break; + } + + body.push(atom); + } + + if (this.mode === "text") { + this.formLigatures(body); + } + + return this.handleInfixNodes(body); + } + /** + * Rewrites infix operators such as \over with corresponding commands such + * as \frac. + * + * There can only be one infix operator per group. If there's more than one + * then the expression is ambiguous. This can be resolved by adding {}. + */ + ; + + _proto.handleInfixNodes = function handleInfixNodes(body) { + var overIndex = -1; + var funcName; + + for (var i = 0; i < body.length; i++) { + var node = checkNodeType(body[i], "infix"); + + if (node) { + if (overIndex !== -1) { + throw new src_ParseError("only one infix operator per group", node.token); + } + + overIndex = i; + funcName = node.replaceWith; + } + } + + if (overIndex !== -1 && funcName) { + var numerNode; + var denomNode; + var numerBody = body.slice(0, overIndex); + var denomBody = body.slice(overIndex + 1); + + if (numerBody.length === 1 && numerBody[0].type === "ordgroup") { + numerNode = numerBody[0]; + } else { + numerNode = { + type: "ordgroup", + mode: this.mode, + body: numerBody + }; + } + + if (denomBody.length === 1 && denomBody[0].type === "ordgroup") { + denomNode = denomBody[0]; + } else { + denomNode = { + type: "ordgroup", + mode: this.mode, + body: denomBody + }; + } + + var _node; + + if (funcName === "\\\\abovefrac") { + _node = this.callFunction(funcName, [numerNode, body[overIndex], denomNode], []); + } else { + _node = this.callFunction(funcName, [numerNode, denomNode], []); + } + + return [_node]; + } else { + return body; + } + } // The greediness of a superscript or subscript + ; + + /** + * Handle a subscript or superscript with nice errors. + */ + _proto.handleSupSubscript = function handleSupSubscript(name) { + var symbolToken = this.fetch(); + var symbol = symbolToken.text; + this.consume(); + var group = this.parseGroup(name, false, Parser.SUPSUB_GREEDINESS, undefined, undefined, true); // ignore spaces before sup/subscript argument + + if (!group) { + throw new src_ParseError("Expected group after '" + symbol + "'", symbolToken); + } + + return group; + } + /** + * Converts the textual input of an unsupported command into a text node + * contained within a color node whose color is determined by errorColor + */ + ; + + _proto.formatUnsupportedCmd = function formatUnsupportedCmd(text) { + var textordArray = []; + + for (var i = 0; i < text.length; i++) { + textordArray.push({ + type: "textord", + mode: "text", + text: text[i] + }); + } + + var textNode = { + type: "text", + mode: this.mode, + body: textordArray + }; + var colorNode = { + type: "color", + mode: this.mode, + color: this.settings.errorColor, + body: [textNode] + }; + return colorNode; + } + /** + * Parses a group with optional super/subscripts. + */ + ; + + _proto.parseAtom = function parseAtom(breakOnTokenText) { + // The body of an atom is an implicit group, so that things like + // \left(x\right)^2 work correctly. + var base = this.parseGroup("atom", false, null, breakOnTokenText); // In text mode, we don't have superscripts or subscripts + + if (this.mode === "text") { + return base; + } // Note that base may be empty (i.e. null) at this point. + + + var superscript; + var subscript; + + while (true) { + // Guaranteed in math mode, so eat any spaces first. + this.consumeSpaces(); // Lex the first token + + var lex = this.fetch(); + + if (lex.text === "\\limits" || lex.text === "\\nolimits") { + // We got a limit control + var opNode = checkNodeType(base, "op"); + + if (opNode) { + var limits = lex.text === "\\limits"; + opNode.limits = limits; + opNode.alwaysHandleSupSub = true; + } else { + opNode = checkNodeType(base, "operatorname"); + + if (opNode && opNode.alwaysHandleSupSub) { + var _limits = lex.text === "\\limits"; + + opNode.limits = _limits; + } else { + throw new src_ParseError("Limit controls must follow a math operator", lex); + } + } + + this.consume(); + } else if (lex.text === "^") { + // We got a superscript start + if (superscript) { + throw new src_ParseError("Double superscript", lex); + } + + superscript = this.handleSupSubscript("superscript"); + } else if (lex.text === "_") { + // We got a subscript start + if (subscript) { + throw new src_ParseError("Double subscript", lex); + } + + subscript = this.handleSupSubscript("subscript"); + } else if (lex.text === "'") { + // We got a prime + if (superscript) { + throw new src_ParseError("Double superscript", lex); + } + + var prime = { + type: "textord", + mode: this.mode, + text: "\\prime" + }; // Many primes can be grouped together, so we handle this here + + var primes = [prime]; + this.consume(); // Keep lexing tokens until we get something that's not a prime + + while (this.fetch().text === "'") { + // For each one, add another prime to the list + primes.push(prime); + this.consume(); + } // If there's a superscript following the primes, combine that + // superscript in with the primes. + + + if (this.fetch().text === "^") { + primes.push(this.handleSupSubscript("superscript")); + } // Put everything into an ordgroup as the superscript + + + superscript = { + type: "ordgroup", + mode: this.mode, + body: primes + }; + } else { + // If it wasn't ^, _, or ', stop parsing super/subscripts + break; + } + } // Base must be set if superscript or subscript are set per logic above, + // but need to check here for type check to pass. + + + if (superscript || subscript) { + // If we got either a superscript or subscript, create a supsub + return { + type: "supsub", + mode: this.mode, + base: base, + sup: superscript, + sub: subscript + }; + } else { + // Otherwise return the original body + return base; + } + } + /** + * Parses an entire function, including its base and all of its arguments. + */ + ; + + _proto.parseFunction = function parseFunction(breakOnTokenText, name, // For error reporting. + greediness) { + var token = this.fetch(); + var func = token.text; + var funcData = src_functions[func]; + + if (!funcData) { + return null; + } + + this.consume(); // consume command token + + if (greediness != null && funcData.greediness <= greediness) { + throw new src_ParseError("Got function '" + func + "' with no arguments" + (name ? " as " + name : ""), token); + } else if (this.mode === "text" && !funcData.allowedInText) { + throw new src_ParseError("Can't use function '" + func + "' in text mode", token); + } else if (this.mode === "math" && funcData.allowedInMath === false) { + throw new src_ParseError("Can't use function '" + func + "' in math mode", token); + } + + var _this$parseArguments = this.parseArguments(func, funcData), + args = _this$parseArguments.args, + optArgs = _this$parseArguments.optArgs; + + return this.callFunction(func, args, optArgs, token, breakOnTokenText); + } + /** + * Call a function handler with a suitable context and arguments. + */ + ; + + _proto.callFunction = function callFunction(name, args, optArgs, token, breakOnTokenText) { + var context = { + funcName: name, + parser: this, + token: token, + breakOnTokenText: breakOnTokenText + }; + var func = src_functions[name]; + + if (func && func.handler) { + return func.handler(context, args, optArgs); + } else { + throw new src_ParseError("No function handler for " + name); + } + } + /** + * Parses the arguments of a function or environment + */ + ; + + _proto.parseArguments = function parseArguments(func, // Should look like "\name" or "\begin{name}". + funcData) { + var totalArgs = funcData.numArgs + funcData.numOptionalArgs; + + if (totalArgs === 0) { + return { + args: [], + optArgs: [] + }; + } + + var baseGreediness = funcData.greediness; + var args = []; + var optArgs = []; + + for (var i = 0; i < totalArgs; i++) { + var argType = funcData.argTypes && funcData.argTypes[i]; + var isOptional = i < funcData.numOptionalArgs; // Ignore spaces between arguments. As the TeXbook says: + // "After you have said ‘\def\row#1#2{...}’, you are allowed to + // put spaces between the arguments (e.g., ‘\row x n’), because + // TeX doesn’t use single spaces as undelimited arguments." + + var consumeSpaces = i > 0 && !isOptional || // Also consume leading spaces in math mode, as parseSymbol + // won't know what to do with them. This can only happen with + // macros, e.g. \frac\foo\foo where \foo expands to a space symbol. + // In LaTeX, the \foo's get treated as (blank) arguments. + // In KaTeX, for now, both spaces will get consumed. + // TODO(edemaine) + i === 0 && !isOptional && this.mode === "math"; + var arg = this.parseGroupOfType("argument to '" + func + "'", argType, isOptional, baseGreediness, consumeSpaces); + + if (!arg) { + if (isOptional) { + optArgs.push(null); + continue; + } + + throw new src_ParseError("Expected group after '" + func + "'", this.fetch()); + } + + (isOptional ? optArgs : args).push(arg); + } + + return { + args: args, + optArgs: optArgs + }; + } + /** + * Parses a group when the mode is changing. + */ + ; + + _proto.parseGroupOfType = function parseGroupOfType(name, type, optional, greediness, consumeSpaces) { + switch (type) { + case "color": + if (consumeSpaces) { + this.consumeSpaces(); + } + + return this.parseColorGroup(optional); + + case "size": + if (consumeSpaces) { + this.consumeSpaces(); + } + + return this.parseSizeGroup(optional); + + case "url": + return this.parseUrlGroup(optional, consumeSpaces); + + case "math": + case "text": + return this.parseGroup(name, optional, greediness, undefined, type, consumeSpaces); + + case "hbox": + { + // hbox argument type wraps the argument in the equivalent of + // \hbox, which is like \text but switching to \textstyle size. + var group = this.parseGroup(name, optional, greediness, undefined, "text", consumeSpaces); + + if (!group) { + return group; + } + + var styledGroup = { + type: "styling", + mode: group.mode, + body: [group], + style: "text" // simulate \textstyle + + }; + return styledGroup; + } + + case "raw": + { + if (consumeSpaces) { + this.consumeSpaces(); + } + + if (optional && this.fetch().text === "{") { + return null; + } + + var token = this.parseStringGroup("raw", optional, true); + + if (token) { + return { + type: "raw", + mode: "text", + string: token.text + }; + } else { + throw new src_ParseError("Expected raw group", this.fetch()); + } + } + + case "original": + case null: + case undefined: + return this.parseGroup(name, optional, greediness, undefined, undefined, consumeSpaces); + + default: + throw new src_ParseError("Unknown group type as " + name, this.fetch()); + } + } + /** + * Discard any space tokens, fetching the next non-space token. + */ + ; + + _proto.consumeSpaces = function consumeSpaces() { + while (this.fetch().text === " ") { + this.consume(); + } + } + /** + * Parses a group, essentially returning the string formed by the + * brace-enclosed tokens plus some position information. + */ + ; + + _proto.parseStringGroup = function parseStringGroup(modeName, // Used to describe the mode in error messages. + optional, raw) { + var groupBegin = optional ? "[" : "{"; + var groupEnd = optional ? "]" : "}"; + var beginToken = this.fetch(); + + if (beginToken.text !== groupBegin) { + if (optional) { + return null; + } else if (raw && beginToken.text !== "EOF" && /[^{}[\]]/.test(beginToken.text)) { + this.consume(); + return beginToken; + } + } + + var outerMode = this.mode; + this.mode = "text"; + this.expect(groupBegin); + var str = ""; + var firstToken = this.fetch(); + var nested = 0; // allow nested braces in raw string group + + var lastToken = firstToken; + var nextToken; + + while ((nextToken = this.fetch()).text !== groupEnd || raw && nested > 0) { + switch (nextToken.text) { + case "EOF": + throw new src_ParseError("Unexpected end of input in " + modeName, firstToken.range(lastToken, str)); + + case groupBegin: + nested++; + break; + + case groupEnd: + nested--; + break; + } + + lastToken = nextToken; + str += lastToken.text; + this.consume(); + } + + this.expect(groupEnd); + this.mode = outerMode; + return firstToken.range(lastToken, str); + } + /** + * Parses a regex-delimited group: the largest sequence of tokens + * whose concatenated strings match `regex`. Returns the string + * formed by the tokens plus some position information. + */ + ; + + _proto.parseRegexGroup = function parseRegexGroup(regex, modeName) { + var outerMode = this.mode; + this.mode = "text"; + var firstToken = this.fetch(); + var lastToken = firstToken; + var str = ""; + var nextToken; + + while ((nextToken = this.fetch()).text !== "EOF" && regex.test(str + nextToken.text)) { + lastToken = nextToken; + str += lastToken.text; + this.consume(); + } + + if (str === "") { + throw new src_ParseError("Invalid " + modeName + ": '" + firstToken.text + "'", firstToken); + } + + this.mode = outerMode; + return firstToken.range(lastToken, str); + } + /** + * Parses a color description. + */ + ; + + _proto.parseColorGroup = function parseColorGroup(optional) { + var res = this.parseStringGroup("color", optional); + + if (!res) { + return null; + } + + var match = /^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i.exec(res.text); + + if (!match) { + throw new src_ParseError("Invalid color: '" + res.text + "'", res); + } + + var color = match[0]; + + if (/^[0-9a-f]{6}$/i.test(color)) { + // We allow a 6-digit HTML color spec without a leading "#". + // This follows the xcolor package's HTML color model. + // Predefined color names are all missed by this RegEx pattern. + color = "#" + color; + } + + return { + type: "color-token", + mode: this.mode, + color: color + }; + } + /** + * Parses a size specification, consisting of magnitude and unit. + */ + ; + + _proto.parseSizeGroup = function parseSizeGroup(optional) { + var res; + var isBlank = false; + + if (!optional && this.fetch().text !== "{") { + res = this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/, "size"); + } else { + res = this.parseStringGroup("size", optional); + } + + if (!res) { + return null; + } + + if (!optional && res.text.length === 0) { + // Because we've tested for what is !optional, this block won't + // affect \kern, \hspace, etc. It will capture the mandatory arguments + // to \genfrac and \above. + res.text = "0pt"; // Enable \above{} + + isBlank = true; // This is here specifically for \genfrac + } + + var match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(res.text); + + if (!match) { + throw new src_ParseError("Invalid size: '" + res.text + "'", res); + } + + var data = { + number: +(match[1] + match[2]), + // sign + magnitude, cast to number + unit: match[3] + }; + + if (!validUnit(data)) { + throw new src_ParseError("Invalid unit: '" + data.unit + "'", res); + } + + return { + type: "size", + mode: this.mode, + value: data, + isBlank: isBlank + }; + } + /** + * Parses an URL, checking escaped letters and allowed protocols, + * and setting the catcode of % as an active character (as in \hyperref). + */ + ; + + _proto.parseUrlGroup = function parseUrlGroup(optional, consumeSpaces) { + this.gullet.lexer.setCatcode("%", 13); // active character + + var res = this.parseStringGroup("url", optional, true); // get raw string + + this.gullet.lexer.setCatcode("%", 14); // comment character + + if (!res) { + return null; + } // hyperref package allows backslashes alone in href, but doesn't + // generate valid links in such cases; we interpret this as + // "undefined" behaviour, and keep them as-is. Some browser will + // replace backslashes with forward slashes. + + + var url = res.text.replace(/\\([#$%&~_^{}])/g, '$1'); + return { + type: "url", + mode: this.mode, + url: url + }; + } + /** + * If `optional` is false or absent, this parses an ordinary group, + * which is either a single nucleus (like "x") or an expression + * in braces (like "{x+y}") or an implicit group, a group that starts + * at the current position, and ends right before a higher explicit + * group ends, or at EOF. + * If `optional` is true, it parses either a bracket-delimited expression + * (like "[x+y]") or returns null to indicate the absence of a + * bracket-enclosed group. + * If `mode` is present, switches to that mode while parsing the group, + * and switches back after. + */ + ; + + _proto.parseGroup = function parseGroup(name, // For error reporting. + optional, greediness, breakOnTokenText, mode, consumeSpaces) { + // Switch to specified mode + var outerMode = this.mode; + + if (mode) { + this.switchMode(mode); + } // Consume spaces if requested, crucially *after* we switch modes, + // so that the next non-space token is parsed in the correct mode. + + + if (consumeSpaces) { + this.consumeSpaces(); + } // Get first token + + + var firstToken = this.fetch(); + var text = firstToken.text; + var result; // Try to parse an open brace or \begingroup + + if (optional ? text === "[" : text === "{" || text === "\\begingroup") { + this.consume(); + var groupEnd = Parser.endOfGroup[text]; // Start a new group namespace + + this.gullet.beginGroup(); // If we get a brace, parse an expression + + var expression = this.parseExpression(false, groupEnd); + var lastToken = this.fetch(); // Check that we got a matching closing brace + + this.expect(groupEnd); // End group namespace + + this.gullet.endGroup(); + result = { + type: "ordgroup", + mode: this.mode, + loc: SourceLocation.range(firstToken, lastToken), + body: expression, + // A group formed by \begingroup...\endgroup is a semi-simple group + // which doesn't affect spacing in math mode, i.e., is transparent. + // https://tex.stackexchange.com/questions/1930/when-should-one- + // use-begingroup-instead-of-bgroup + semisimple: text === "\\begingroup" || undefined + }; + } else if (optional) { + // Return nothing for an optional group + result = null; + } else { + // If there exists a function with this name, parse the function. + // Otherwise, just return a nucleus + result = this.parseFunction(breakOnTokenText, name, greediness) || this.parseSymbol(); + + if (result == null && text[0] === "\\" && !implicitCommands.hasOwnProperty(text)) { + if (this.settings.throwOnError) { + throw new src_ParseError("Undefined control sequence: " + text, firstToken); + } + + result = this.formatUnsupportedCmd(text); + this.consume(); + } + } // Switch mode back + + + if (mode) { + this.switchMode(outerMode); + } + + return result; + } + /** + * Form ligature-like combinations of characters for text mode. + * This includes inputs like "--", "---", "``" and "''". + * The result will simply replace multiple textord nodes with a single + * character in each value by a single textord node having multiple + * characters in its value. The representation is still ASCII source. + * The group will be modified in place. + */ + ; + + _proto.formLigatures = function formLigatures(group) { + var n = group.length - 1; + + for (var i = 0; i < n; ++i) { + var a = group[i]; // $FlowFixMe: Not every node type has a `text` property. + + var v = a.text; + + if (v === "-" && group[i + 1].text === "-") { + if (i + 1 < n && group[i + 2].text === "-") { + group.splice(i, 3, { + type: "textord", + mode: "text", + loc: SourceLocation.range(a, group[i + 2]), + text: "---" + }); + n -= 2; + } else { + group.splice(i, 2, { + type: "textord", + mode: "text", + loc: SourceLocation.range(a, group[i + 1]), + text: "--" + }); + n -= 1; + } + } + + if ((v === "'" || v === "`") && group[i + 1].text === v) { + group.splice(i, 2, { + type: "textord", + mode: "text", + loc: SourceLocation.range(a, group[i + 1]), + text: v + v + }); + n -= 1; + } + } + } + /** + * Parse a single symbol out of the string. Here, we handle single character + * symbols and special functions like \verb. + */ + ; + + _proto.parseSymbol = function parseSymbol() { + var nucleus = this.fetch(); + var text = nucleus.text; + + if (/^\\verb[^a-zA-Z]/.test(text)) { + this.consume(); + var arg = text.slice(5); + var star = arg.charAt(0) === "*"; + + if (star) { + arg = arg.slice(1); + } // Lexer's tokenRegex is constructed to always have matching + // first/last characters. + + + if (arg.length < 2 || arg.charAt(0) !== arg.slice(-1)) { + throw new src_ParseError("\\verb assertion failed --\n please report what input caused this bug"); + } + + arg = arg.slice(1, -1); // remove first and last char + + return { + type: "verb", + mode: "text", + body: arg, + star: star + }; + } // At this point, we should have a symbol, possibly with accents. + // First expand any accented base symbol according to unicodeSymbols. + + + if (unicodeSymbols.hasOwnProperty(text[0]) && !src_symbols[this.mode][text[0]]) { + // This behavior is not strict (XeTeX-compatible) in math mode. + if (this.settings.strict && this.mode === "math") { + this.settings.reportNonstrict("unicodeTextInMathMode", "Accented Unicode text character \"" + text[0] + "\" used in " + "math mode", nucleus); + } + + text = unicodeSymbols[text[0]] + text.substr(1); + } // Strip off any combining characters + + + var match = combiningDiacriticalMarksEndRegex.exec(text); + + if (match) { + text = text.substring(0, match.index); + + if (text === 'i') { + text = "\u0131"; // dotless i, in math and text mode + } else if (text === 'j') { + text = "\u0237"; // dotless j, in math and text mode + } + } // Recognize base symbol + + + var symbol; + + if (src_symbols[this.mode][text]) { + if (this.settings.strict && this.mode === 'math' && extraLatin.indexOf(text) >= 0) { + this.settings.reportNonstrict("unicodeTextInMathMode", "Latin-1/Unicode text character \"" + text[0] + "\" used in " + "math mode", nucleus); + } + + var group = src_symbols[this.mode][text].group; + var loc = SourceLocation.range(nucleus); + var s; + + if (ATOMS.hasOwnProperty(group)) { + // $FlowFixMe + var family = group; + s = { + type: "atom", + mode: this.mode, + family: family, + loc: loc, + text: text + }; + } else { + // $FlowFixMe + s = { + type: group, + mode: this.mode, + loc: loc, + text: text + }; + } + + symbol = s; + } else if (text.charCodeAt(0) >= 0x80) { + // no symbol for e.g. ^ + if (this.settings.strict) { + if (!supportedCodepoint(text.charCodeAt(0))) { + this.settings.reportNonstrict("unknownSymbol", "Unrecognized Unicode character \"" + text[0] + "\"" + (" (" + text.charCodeAt(0) + ")"), nucleus); + } else if (this.mode === "math") { + this.settings.reportNonstrict("unicodeTextInMathMode", "Unicode text character \"" + text[0] + "\" used in math mode", nucleus); + } + } // All nonmathematical Unicode characters are rendered as if they + // are in text mode (wrapped in \text) because that's what it + // takes to render them in LaTeX. Setting `mode: this.mode` is + // another natural choice (the user requested math mode), but + // this makes it more difficult for getCharacterMetrics() to + // distinguish Unicode characters without metrics and those for + // which we want to simulate the letter M. + + + symbol = { + type: "textord", + mode: "text", + loc: SourceLocation.range(nucleus), + text: text + }; + } else { + return null; // EOF, ^, _, {, }, etc. + } + + this.consume(); // Transform combining characters into accents + + if (match) { + for (var i = 0; i < match[0].length; i++) { + var accent = match[0][i]; + + if (!unicodeAccents[accent]) { + throw new src_ParseError("Unknown accent ' " + accent + "'", nucleus); + } + + var command = unicodeAccents[accent][this.mode]; + + if (!command) { + throw new src_ParseError("Accent " + accent + " unsupported in " + this.mode + " mode", nucleus); + } + + symbol = { + type: "accent", + mode: this.mode, + loc: SourceLocation.range(nucleus), + label: command, + isStretchy: false, + isShifty: true, + base: symbol + }; + } + } + + return symbol; + }; + + return Parser; +}(); + +Parser_Parser.endOfExpression = ["}", "\\endgroup", "\\end", "\\right", "&"]; +Parser_Parser.endOfGroup = { + "[": "]", + "{": "}", + "\\begingroup": "\\endgroup" + /** + * Parses an "expression", which is a list of atoms. + * + * `breakOnInfix`: Should the parsing stop when we hit infix nodes? This + * happens when functions have higher precendence han infix + * nodes in implicit parses. + * + * `breakOnTokenText`: The text of the token that the expression should end + * with, or `null` if something else should end the + * expression. + */ + +}; +Parser_Parser.SUPSUB_GREEDINESS = 1; + +// CONCATENATED MODULE: ./src/parseTree.js +/** + * Provides a single function for parsing an expression using a Parser + * TODO(emily): Remove this + */ + + + +/** + * Parses an expression using a Parser, then returns the parsed result. + */ +var parseTree_parseTree = function parseTree(toParse, settings) { + if (!(typeof toParse === 'string' || toParse instanceof String)) { + throw new TypeError('KaTeX can only parse string typed expression'); + } + + var parser = new Parser_Parser(toParse, settings); // Blank out any \df@tag to avoid spurious "Duplicate \tag" errors + + delete parser.gullet.macros.current["\\df@tag"]; + var tree = parser.parse(); // If the input used \tag, it will set the \df@tag macro to the tag. + // In this case, we separately parse the tag and wrap the tree. + + if (parser.gullet.macros.get("\\df@tag")) { + if (!settings.displayMode) { + throw new src_ParseError("\\tag works only in display equations"); + } + + parser.gullet.feed("\\df@tag"); + tree = [{ + type: "tag", + mode: "text", + body: tree, + tag: parser.parse() + }]; + } + + return tree; +}; + +/* harmony default export */ var src_parseTree = (parseTree_parseTree); +// CONCATENATED MODULE: ./katex.js +/* eslint no-console:0 */ + +/** + * This is the main entry point for KaTeX. Here, we expose functions for + * rendering expressions either to DOM nodes or to markup strings. + * + * We also expose the ParseError class to check if errors thrown from KaTeX are + * errors in the expression, or errors in javascript handling. + */ + + + + + + + + + + +/** + * Parse and build an expression, and place that expression in the DOM node + * given. + */ +var katex_render = function render(expression, baseNode, options) { + baseNode.textContent = ""; + var node = katex_renderToDomTree(expression, options).toNode(); + baseNode.appendChild(node); +}; // KaTeX's styles don't work properly in quirks mode. Print out an error, and +// disable rendering. + + +if (typeof document !== "undefined") { + if (document.compatMode !== "CSS1Compat") { + typeof console !== "undefined" && console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your " + "website has a suitable doctype."); + + katex_render = function render() { + throw new src_ParseError("KaTeX doesn't work in quirks mode."); + }; + } +} +/** + * Parse and build an expression, and return the markup for that. + */ + + +var renderToString = function renderToString(expression, options) { + var markup = katex_renderToDomTree(expression, options).toMarkup(); + return markup; +}; +/** + * Parse an expression and return the parse tree. + */ + + +var katex_generateParseTree = function generateParseTree(expression, options) { + var settings = new Settings_Settings(options); + return src_parseTree(expression, settings); +}; +/** + * If the given error is a KaTeX ParseError and options.throwOnError is false, + * renders the invalid LaTeX as a span with hover title giving the KaTeX + * error message. Otherwise, simply throws the error. + */ + + +var katex_renderError = function renderError(error, expression, options) { + if (options.throwOnError || !(error instanceof src_ParseError)) { + throw error; + } + + var node = buildCommon.makeSpan(["katex-error"], [new domTree_SymbolNode(expression)]); + node.setAttribute("title", error.toString()); + node.setAttribute("style", "color:" + options.errorColor); + return node; +}; +/** + * Generates and returns the katex build tree. This is used for advanced + * use cases (like rendering to custom output). + */ + + +var katex_renderToDomTree = function renderToDomTree(expression, options) { + var settings = new Settings_Settings(options); + + try { + var tree = src_parseTree(expression, settings); + return buildTree_buildTree(tree, expression, settings); + } catch (error) { + return katex_renderError(error, expression, settings); + } +}; +/** + * Generates and returns the katex build tree, with just HTML (no MathML). + * This is used for advanced use cases (like rendering to custom output). + */ + + +var katex_renderToHTMLTree = function renderToHTMLTree(expression, options) { + var settings = new Settings_Settings(options); + + try { + var tree = src_parseTree(expression, settings); + return buildTree_buildHTMLTree(tree, expression, settings); + } catch (error) { + return katex_renderError(error, expression, settings); + } +}; + +/* harmony default export */ var katex_0 = ({ + /** + * Current KaTeX version + */ + version: "0.11.1", + + /** + * Renders the given LaTeX into an HTML+MathML combination, and adds + * it as a child to the specified DOM node. + */ + render: katex_render, + + /** + * Renders the given LaTeX into an HTML+MathML combination string, + * for sending to the client. + */ + renderToString: renderToString, + + /** + * KaTeX error, usually during parsing. + */ + ParseError: src_ParseError, + + /** + * Parses the given LaTeX into KaTeX's internal parse tree structure, + * without rendering to HTML or MathML. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __parse: katex_generateParseTree, + + /** + * Renders the given LaTeX into an HTML+MathML internal DOM tree + * representation, without flattening that representation to a string. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __renderToDomTree: katex_renderToDomTree, + + /** + * Renders the given LaTeX into an HTML internal DOM tree representation, + * without MathML and without flattening that representation to a string. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __renderToHTMLTree: katex_renderToHTMLTree, + + /** + * extends internal font metrics object with a new object + * each key in the new object represents a font name + */ + __setFontMetrics: setFontMetrics, + + /** + * adds a new symbol to builtin symbols table + */ + __defineSymbol: defineSymbol, + + /** + * adds a new macro to builtin macro list + */ + __defineMacro: defineMacro, + + /** + * Expose the dom tree node types, which can be useful for type checking nodes. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __domTree: { + Span: domTree_Span, + Anchor: domTree_Anchor, + SymbolNode: domTree_SymbolNode, + SvgNode: SvgNode, + PathNode: domTree_PathNode, + LineNode: LineNode + } +}); +// CONCATENATED MODULE: ./katex.webpack.js +/** + * This is the webpack entry point for KaTeX. As ECMAScript, flow[1] and jest[2] + * doesn't support CSS modules natively, a separate entry point is used and + * it is not flowtyped. + * + * [1] https://gist.github.com/lambdahands/d19e0da96285b749f0ef + * [2] https://facebook.github.io/jest/docs/en/webpack.html + */ + + +/* harmony default export */ var katex_webpack = __webpack_exports__["default"] = (katex_0); + +/***/ }) +/******/ ])["default"]; +}); \ No newline at end of file diff --git a/adoc/katex/katex.min.css b/adoc/katex/katex.min.css new file mode 100644 index 00000000..c0cd1451 --- /dev/null +++ b/adoc/katex/katex.min.css @@ -0,0 +1 @@ +@font-face{font-family:KaTeX_AMS;src:url(fonts/KaTeX_AMS-Regular.woff2) format("woff2"),url(fonts/KaTeX_AMS-Regular.woff) format("woff"),url(fonts/KaTeX_AMS-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Caligraphic;src:url(fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Bold.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Bold.ttf) format("truetype");font-weight:700;font-style:normal}@font-face{font-family:KaTeX_Caligraphic;src:url(fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Regular.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Fraktur;src:url(fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Bold.woff) format("woff"),url(fonts/KaTeX_Fraktur-Bold.ttf) format("truetype");font-weight:700;font-style:normal}@font-face{font-family:KaTeX_Fraktur;src:url(fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Regular.woff) format("woff"),url(fonts/KaTeX_Fraktur-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Main;src:url(fonts/KaTeX_Main-Bold.woff2) format("woff2"),url(fonts/KaTeX_Main-Bold.woff) format("woff"),url(fonts/KaTeX_Main-Bold.ttf) format("truetype");font-weight:700;font-style:normal}@font-face{font-family:KaTeX_Main;src:url(fonts/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Main-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Main-BoldItalic.ttf) format("truetype");font-weight:700;font-style:italic}@font-face{font-family:KaTeX_Main;src:url(fonts/KaTeX_Main-Italic.woff2) format("woff2"),url(fonts/KaTeX_Main-Italic.woff) format("woff"),url(fonts/KaTeX_Main-Italic.ttf) format("truetype");font-weight:400;font-style:italic}@font-face{font-family:KaTeX_Main;src:url(fonts/KaTeX_Main-Regular.woff2) format("woff2"),url(fonts/KaTeX_Main-Regular.woff) format("woff"),url(fonts/KaTeX_Main-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Math;src:url(fonts/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Math-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Math-BoldItalic.ttf) format("truetype");font-weight:700;font-style:italic}@font-face{font-family:KaTeX_Math;src:url(fonts/KaTeX_Math-Italic.woff2) format("woff2"),url(fonts/KaTeX_Math-Italic.woff) format("woff"),url(fonts/KaTeX_Math-Italic.ttf) format("truetype");font-weight:400;font-style:italic}@font-face{font-family:"KaTeX_SansSerif";src:url(fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Bold.woff) format("woff"),url(fonts/KaTeX_SansSerif-Bold.ttf) format("truetype");font-weight:700;font-style:normal}@font-face{font-family:"KaTeX_SansSerif";src:url(fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Italic.woff) format("woff"),url(fonts/KaTeX_SansSerif-Italic.ttf) format("truetype");font-weight:400;font-style:italic}@font-face{font-family:"KaTeX_SansSerif";src:url(fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Regular.woff) format("woff"),url(fonts/KaTeX_SansSerif-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Script;src:url(fonts/KaTeX_Script-Regular.woff2) format("woff2"),url(fonts/KaTeX_Script-Regular.woff) format("woff"),url(fonts/KaTeX_Script-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size1;src:url(fonts/KaTeX_Size1-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size1-Regular.woff) format("woff"),url(fonts/KaTeX_Size1-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size2;src:url(fonts/KaTeX_Size2-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size2-Regular.woff) format("woff"),url(fonts/KaTeX_Size2-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size3;src:url(fonts/KaTeX_Size3-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size3-Regular.woff) format("woff"),url(fonts/KaTeX_Size3-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size4;src:url(fonts/KaTeX_Size4-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size4-Regular.woff) format("woff"),url(fonts/KaTeX_Size4-Regular.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Typewriter;src:url(fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(fonts/KaTeX_Typewriter-Regular.woff) format("woff"),url(fonts/KaTeX_Typewriter-Regular.ttf) format("truetype");font-weight:400;font-style:normal}.katex{font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important}.katex .katex-version:after{content:"0.11.1"}.katex .katex-mathml{position:absolute;clip:rect(1px,1px,1px,1px);padding:0;border:0;height:1px;width:1px;overflow:hidden}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathdefault{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-weight:700;font-style:italic}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;vertical-align:bottom;position:relative}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;vertical-align:bottom;font-size:1px;width:2px;min-width:2px}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{display:inline-block;width:100%;border-bottom-style:solid}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{width:0;position:relative}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{display:inline-block;border:0 solid;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{display:inline-block;width:100%;border-bottom-style:solid}.katex .hdashline{display:inline-block;width:100%;border-bottom-style:dashed}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.83333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.85714286em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857143em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96285714em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55428571em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.66666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.77777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.88888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.58333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.66666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.41666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.48611111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.55555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44027778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.28935185em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.34722222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.40509259em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.46296296em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.52083333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023148em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981481em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108004em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.28929605em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.33751205em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.38572806em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.43394407em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216008em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57859209em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69431051em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.83317261em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961427em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.20096463em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.24115756em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.28135048em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.32154341em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.36173633em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.40192926em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.48231511em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.57877814em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.69453376em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.83360129em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .op-limits>.vlist-t{text-align:center}.katex .accent>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{display:block;position:absolute;width:100%;height:inherit;fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1}.katex svg path{stroke:none}.katex img{border-style:none;min-width:0;min-height:0;max-width:none;max-height:none}.katex .stretchy{width:100%;display:block;position:relative;overflow:hidden}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{width:100%;position:relative;overflow:hidden}.katex .halfarrow-left{position:absolute;left:0;width:50.2%;overflow:hidden}.katex .halfarrow-right{position:absolute;right:0;width:50.2%;overflow:hidden}.katex .brace-left{position:absolute;left:0;width:25.1%;overflow:hidden}.katex .brace-center{position:absolute;left:25%;width:50%;overflow:hidden}.katex .brace-right{position:absolute;right:0;width:25.1%;overflow:hidden}.katex .x-arrow-pad{padding:0 .5em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{box-sizing:border-box;border:.04em solid}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{text-align:left} diff --git a/adoc/katex/katex.min.js b/adoc/katex/katex.min.js new file mode 100644 index 00000000..906ce128 --- /dev/null +++ b/adoc/katex/katex.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.katex=e():t.katex=e()}("undefined"!=typeof self?self:this,function(){return function(t){var e={};function r(a){if(e[a])return e[a].exports;var n=e[a]={i:a,l:!1,exports:{}};return t[a].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=t,r.c=e,r.d=function(t,e,a){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:a})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var a=Object.create(null);if(r.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)r.d(a,n,function(e){return t[e]}.bind(null,n));return a},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=1)}([function(t,e,r){},function(t,e,r){"use strict";r.r(e);r(0);var a=function(){function t(t,e,r){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=t,this.start=e,this.end=r}return t.range=function(e,r){return r?e&&e.loc&&r.loc&&e.loc.lexer===r.loc.lexer?new t(e.loc.lexer,e.loc.start,r.loc.end):null:e&&e.loc},t}(),n=function(){function t(t,e){this.text=void 0,this.loc=void 0,this.text=t,this.loc=e}return t.prototype.range=function(e,r){return new t(r,a.range(this,e))},t}(),i=function t(e,r){this.position=void 0;var a,n="KaTeX parse error: "+e,i=r&&r.loc;if(i&&i.start<=i.end){var o=i.lexer.input;a=i.start;var s=i.end;a===o.length?n+=" at end of input: ":n+=" at position "+(a+1)+": ";var h=o.slice(a,s).replace(/[^]/g,"$&\u0332");n+=(a>15?"\u2026"+o.slice(a-15,a):o.slice(0,a))+h+(s+15":">","<":"<",'"':""","'":"'"},l=/[&><"']/g;var m=function t(e){return"ordgroup"===e.type?1===e.body.length?t(e.body[0]):e:"color"===e.type?1===e.body.length?t(e.body[0]):e:"font"===e.type?t(e.body):e},c={contains:function(t,e){return-1!==t.indexOf(e)},deflt:function(t,e){return void 0===t?e:t},escape:function(t){return String(t).replace(l,function(t){return h[t]})},hyphenate:function(t){return t.replace(s,"-$1").toLowerCase()},getBaseElem:m,isCharacterBox:function(t){var e=m(t);return"mathord"===e.type||"textord"===e.type||"atom"===e.type},protocolFromUrl:function(t){var e=/^\s*([^\\\/#]*?)(?::|�*58|�*3a)/i.exec(t);return null!=e?e[1]:"_relative"}},u=function(){function t(t){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,t=t||{},this.displayMode=c.deflt(t.displayMode,!1),this.output=c.deflt(t.output,"htmlAndMathml"),this.leqno=c.deflt(t.leqno,!1),this.fleqn=c.deflt(t.fleqn,!1),this.throwOnError=c.deflt(t.throwOnError,!0),this.errorColor=c.deflt(t.errorColor,"#cc0000"),this.macros=t.macros||{},this.minRuleThickness=Math.max(0,c.deflt(t.minRuleThickness,0)),this.colorIsTextColor=c.deflt(t.colorIsTextColor,!1),this.strict=c.deflt(t.strict,"warn"),this.trust=c.deflt(t.trust,!1),this.maxSize=Math.max(0,c.deflt(t.maxSize,1/0)),this.maxExpand=Math.max(0,c.deflt(t.maxExpand,1e3))}var e=t.prototype;return e.reportNonstrict=function(t,e,r){var a=this.strict;if("function"==typeof a&&(a=a(t,e,r)),a&&"ignore"!==a){if(!0===a||"error"===a)throw new o("LaTeX-incompatible input and strict mode is set to 'error': "+e+" ["+t+"]",r);"warn"===a?"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+e+" ["+t+"]"):"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+a+"': "+e+" ["+t+"]")}},e.useStrictBehavior=function(t,e,r){var a=this.strict;if("function"==typeof a)try{a=a(t,e,r)}catch(t){a="error"}return!(!a||"ignore"===a)&&(!0===a||"error"===a||("warn"===a?("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+e+" ["+t+"]"),!1):("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+a+"': "+e+" ["+t+"]"),!1)))},e.isTrusted=function(t){t.url&&!t.protocol&&(t.protocol=c.protocolFromUrl(t.url));var e="function"==typeof this.trust?this.trust(t):this.trust;return Boolean(e)},t}(),p=function(){function t(t,e,r){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=t,this.size=e,this.cramped=r}var e=t.prototype;return e.sup=function(){return d[f[this.id]]},e.sub=function(){return d[g[this.id]]},e.fracNum=function(){return d[x[this.id]]},e.fracDen=function(){return d[v[this.id]]},e.cramp=function(){return d[b[this.id]]},e.text=function(){return d[y[this.id]]},e.isTight=function(){return this.size>=2},t}(),d=[new p(0,0,!1),new p(1,0,!0),new p(2,1,!1),new p(3,1,!0),new p(4,2,!1),new p(5,2,!0),new p(6,3,!1),new p(7,3,!0)],f=[4,5,4,5,6,7,6,7],g=[5,5,5,5,7,7,7,7],x=[2,3,4,5,6,7,6,7],v=[3,3,5,5,7,7,7,7],b=[1,1,3,3,5,5,7,7],y=[0,1,2,3,2,3,2,3],w={DISPLAY:d[0],TEXT:d[2],SCRIPT:d[4],SCRIPTSCRIPT:d[6]},k=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];var S=[];function M(t){for(var e=0;e=S[e]&&t<=S[e+1])return!0;return!1}k.forEach(function(t){return t.blocks.forEach(function(t){return S.push.apply(S,t)})});var z={doubleleftarrow:"M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z",doublerightarrow:"M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z",leftarrow:"M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z",leftbrace:"M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z",leftbraceunder:"M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z",leftgroup:"M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z",leftgroupunder:"M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z",leftharpoon:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z",leftharpoonplus:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z",leftharpoondown:"M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z",leftharpoondownplus:"M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z",lefthook:"M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z",leftlinesegment:"M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z",leftmapsto:"M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z",leftToFrom:"M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z",longequal:"M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z",midbrace:"M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z",midbraceunder:"M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z",oiintSize1:"M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z",oiintSize2:"M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z",oiiintSize1:"M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z",oiiintSize2:"M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z",rightarrow:"M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z",rightbrace:"M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z",rightbraceunder:"M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z",rightgroup:"M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z",rightgroupunder:"M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z",rightharpoon:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z",rightharpoonplus:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z",rightharpoondown:"M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z",rightharpoondownplus:"M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z",righthook:"M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z",rightlinesegment:"M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z",rightToFrom:"M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z",twoheadleftarrow:"M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z",twoheadrightarrow:"M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z",tilde1:"M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z",tilde2:"M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z",tilde3:"M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z",tilde4:"M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z",vec:"M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z",widehat1:"M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z",widehat2:"M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat3:"M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat4:"M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widecheck1:"M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z",widecheck2:"M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck3:"M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck4:"M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",baraboveleftarrow:"M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z",rightarrowabovebar:"M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z",baraboveshortleftharpoon:"M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z",rightharpoonaboveshortbar:"M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z",shortbaraboveleftharpoon:"M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z",shortrightharpoonabovebar:"M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z"},A=function(){function t(t){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=t,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}var e=t.prototype;return e.hasClass=function(t){return c.contains(this.classes,t)},e.toNode=function(){for(var t=document.createDocumentFragment(),e=0;e"},N=function(){function t(t,e,r,a){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,B.call(this,t,r,a),this.children=e||[]}var e=t.prototype;return e.setAttribute=function(t,e){this.attributes[t]=e},e.hasClass=function(t){return c.contains(this.classes,t)},e.toNode=function(){return C.call(this,"span")},e.toMarkup=function(){return q.call(this,"span")},t}(),I=function(){function t(t,e,r,a){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,B.call(this,e,a),this.children=r||[],this.setAttribute("href",t)}var e=t.prototype;return e.setAttribute=function(t,e){this.attributes[t]=e},e.hasClass=function(t){return c.contains(this.classes,t)},e.toNode=function(){return C.call(this,"a")},e.toMarkup=function(){return q.call(this,"a")},t}(),R=function(){function t(t,e,r){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=e,this.src=t,this.classes=["mord"],this.style=r}var e=t.prototype;return e.hasClass=function(t){return c.contains(this.classes,t)},e.toNode=function(){var t=document.createElement("img");for(var e in t.src=this.src,t.alt=this.alt,t.className="mord",this.style)this.style.hasOwnProperty(e)&&(t.style[e]=this.style[e]);return t},e.toMarkup=function(){var t=""+this.alt+"=n[0]&&t<=n[1])return r.name}return null}(this.text.charCodeAt(0));h&&this.classes.push(h+"_fallback"),/[\xee\xef\xed\xec]/.test(this.text)&&(this.text=O[this.text])}var e=t.prototype;return e.hasClass=function(t){return c.contains(this.classes,t)},e.toNode=function(){var t=document.createTextNode(this.text),e=null;for(var r in this.italic>0&&((e=document.createElement("span")).style.marginRight=this.italic+"em"),this.classes.length>0&&((e=e||document.createElement("span")).className=T(this.classes)),this.style)this.style.hasOwnProperty(r)&&((e=e||document.createElement("span")).style[r]=this.style[r]);return e?(e.appendChild(t),e):t},e.toMarkup=function(){var t=!1,e="0&&(r+="margin-right:"+this.italic+"em;"),this.style)this.style.hasOwnProperty(a)&&(r+=c.hyphenate(a)+":"+this.style[a]+";");r&&(t=!0,e+=' style="'+c.escape(r)+'"');var n=c.escape(this.text);return t?(e+=">",e+=n,e+=""):n},t}(),L=function(){function t(t,e){this.children=void 0,this.attributes=void 0,this.children=t||[],this.attributes=e||{}}var e=t.prototype;return e.toNode=function(){var t=document.createElementNS("http://www.w3.org/2000/svg","svg");for(var e in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,e)&&t.setAttribute(e,this.attributes[e]);for(var r=0;r":""},t}(),P=function(){function t(t){this.attributes=void 0,this.attributes=t||{}}var e=t.prototype;return e.toNode=function(){var t=document.createElementNS("http://www.w3.org/2000/svg","line");for(var e in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,e)&&t.setAttribute(e,this.attributes[e]);return t},e.toMarkup=function(){var t="",">"),$("math",Z,et,":",":"),$("math",Z,et,"\u2248","\\approx",!0),$("math",Z,et,"\u2245","\\cong",!0),$("math",Z,et,"\u2265","\\ge"),$("math",Z,et,"\u2265","\\geq",!0),$("math",Z,et,"\u2190","\\gets"),$("math",Z,et,">","\\gt"),$("math",Z,et,"\u2208","\\in",!0),$("math",Z,et,"\ue020","\\@not"),$("math",Z,et,"\u2282","\\subset",!0),$("math",Z,et,"\u2283","\\supset",!0),$("math",Z,et,"\u2286","\\subseteq",!0),$("math",Z,et,"\u2287","\\supseteq",!0),$("math",K,et,"\u2288","\\nsubseteq",!0),$("math",K,et,"\u2289","\\nsupseteq",!0),$("math",Z,et,"\u22a8","\\models"),$("math",Z,et,"\u2190","\\leftarrow",!0),$("math",Z,et,"\u2264","\\le"),$("math",Z,et,"\u2264","\\leq",!0),$("math",Z,et,"<","\\lt"),$("math",Z,et,"\u2192","\\rightarrow",!0),$("math",Z,et,"\u2192","\\to"),$("math",K,et,"\u2271","\\ngeq",!0),$("math",K,et,"\u2270","\\nleq",!0),$("math",Z,"spacing","\xa0","\\ "),$("math",Z,"spacing","\xa0","~"),$("math",Z,"spacing","\xa0","\\space"),$("math",Z,"spacing","\xa0","\\nobreakspace"),$("text",Z,"spacing","\xa0","\\ "),$("text",Z,"spacing","\xa0","~"),$("text",Z,"spacing","\xa0","\\space"),$("text",Z,"spacing","\xa0","\\nobreakspace"),$("math",Z,"spacing",null,"\\nobreak"),$("math",Z,"spacing",null,"\\allowbreak"),$("math",Z,"punct",",",","),$("math",Z,"punct",";",";"),$("math",K,J,"\u22bc","\\barwedge",!0),$("math",K,J,"\u22bb","\\veebar",!0),$("math",Z,J,"\u2299","\\odot",!0),$("math",Z,J,"\u2295","\\oplus",!0),$("math",Z,J,"\u2297","\\otimes",!0),$("math",Z,"textord","\u2202","\\partial",!0),$("math",Z,J,"\u2298","\\oslash",!0),$("math",K,J,"\u229a","\\circledcirc",!0),$("math",K,J,"\u22a1","\\boxdot",!0),$("math",Z,J,"\u25b3","\\bigtriangleup"),$("math",Z,J,"\u25bd","\\bigtriangledown"),$("math",Z,J,"\u2020","\\dagger"),$("math",Z,J,"\u22c4","\\diamond"),$("math",Z,J,"\u22c6","\\star"),$("math",Z,J,"\u25c3","\\triangleleft"),$("math",Z,J,"\u25b9","\\triangleright"),$("math",Z,"open","{","\\{"),$("text",Z,"textord","{","\\{"),$("text",Z,"textord","{","\\textbraceleft"),$("math",Z,"close","}","\\}"),$("text",Z,"textord","}","\\}"),$("text",Z,"textord","}","\\textbraceright"),$("math",Z,"open","{","\\lbrace"),$("math",Z,"close","}","\\rbrace"),$("math",Z,"open","[","\\lbrack"),$("text",Z,"textord","[","\\lbrack"),$("math",Z,"close","]","\\rbrack"),$("text",Z,"textord","]","\\rbrack"),$("math",Z,"open","(","\\lparen"),$("math",Z,"close",")","\\rparen"),$("text",Z,"textord","<","\\textless"),$("text",Z,"textord",">","\\textgreater"),$("math",Z,"open","\u230a","\\lfloor",!0),$("math",Z,"close","\u230b","\\rfloor",!0),$("math",Z,"open","\u2308","\\lceil",!0),$("math",Z,"close","\u2309","\\rceil",!0),$("math",Z,"textord","\\","\\backslash"),$("math",Z,"textord","\u2223","|"),$("math",Z,"textord","\u2223","\\vert"),$("text",Z,"textord","|","\\textbar"),$("math",Z,"textord","\u2225","\\|"),$("math",Z,"textord","\u2225","\\Vert"),$("text",Z,"textord","\u2225","\\textbardbl"),$("text",Z,"textord","~","\\textasciitilde"),$("text",Z,"textord","\\","\\textbackslash"),$("text",Z,"textord","^","\\textasciicircum"),$("math",Z,et,"\u2191","\\uparrow",!0),$("math",Z,et,"\u21d1","\\Uparrow",!0),$("math",Z,et,"\u2193","\\downarrow",!0),$("math",Z,et,"\u21d3","\\Downarrow",!0),$("math",Z,et,"\u2195","\\updownarrow",!0),$("math",Z,et,"\u21d5","\\Updownarrow",!0),$("math",Z,tt,"\u2210","\\coprod"),$("math",Z,tt,"\u22c1","\\bigvee"),$("math",Z,tt,"\u22c0","\\bigwedge"),$("math",Z,tt,"\u2a04","\\biguplus"),$("math",Z,tt,"\u22c2","\\bigcap"),$("math",Z,tt,"\u22c3","\\bigcup"),$("math",Z,tt,"\u222b","\\int"),$("math",Z,tt,"\u222b","\\intop"),$("math",Z,tt,"\u222c","\\iint"),$("math",Z,tt,"\u222d","\\iiint"),$("math",Z,tt,"\u220f","\\prod"),$("math",Z,tt,"\u2211","\\sum"),$("math",Z,tt,"\u2a02","\\bigotimes"),$("math",Z,tt,"\u2a01","\\bigoplus"),$("math",Z,tt,"\u2a00","\\bigodot"),$("math",Z,tt,"\u222e","\\oint"),$("math",Z,tt,"\u222f","\\oiint"),$("math",Z,tt,"\u2230","\\oiiint"),$("math",Z,tt,"\u2a06","\\bigsqcup"),$("math",Z,tt,"\u222b","\\smallint"),$("text",Z,"inner","\u2026","\\textellipsis"),$("math",Z,"inner","\u2026","\\mathellipsis"),$("text",Z,"inner","\u2026","\\ldots",!0),$("math",Z,"inner","\u2026","\\ldots",!0),$("math",Z,"inner","\u22ef","\\@cdots",!0),$("math",Z,"inner","\u22f1","\\ddots",!0),$("math",Z,"textord","\u22ee","\\varvdots"),$("math",Z,"accent-token","\u02ca","\\acute"),$("math",Z,"accent-token","\u02cb","\\grave"),$("math",Z,"accent-token","\xa8","\\ddot"),$("math",Z,"accent-token","~","\\tilde"),$("math",Z,"accent-token","\u02c9","\\bar"),$("math",Z,"accent-token","\u02d8","\\breve"),$("math",Z,"accent-token","\u02c7","\\check"),$("math",Z,"accent-token","^","\\hat"),$("math",Z,"accent-token","\u20d7","\\vec"),$("math",Z,"accent-token","\u02d9","\\dot"),$("math",Z,"accent-token","\u02da","\\mathring"),$("math",Z,Q,"\u0131","\\imath",!0),$("math",Z,Q,"\u0237","\\jmath",!0),$("text",Z,"textord","\u0131","\\i",!0),$("text",Z,"textord","\u0237","\\j",!0),$("text",Z,"textord","\xdf","\\ss",!0),$("text",Z,"textord","\xe6","\\ae",!0),$("text",Z,"textord","\xe6","\\ae",!0),$("text",Z,"textord","\u0153","\\oe",!0),$("text",Z,"textord","\xf8","\\o",!0),$("text",Z,"textord","\xc6","\\AE",!0),$("text",Z,"textord","\u0152","\\OE",!0),$("text",Z,"textord","\xd8","\\O",!0),$("text",Z,"accent-token","\u02ca","\\'"),$("text",Z,"accent-token","\u02cb","\\`"),$("text",Z,"accent-token","\u02c6","\\^"),$("text",Z,"accent-token","\u02dc","\\~"),$("text",Z,"accent-token","\u02c9","\\="),$("text",Z,"accent-token","\u02d8","\\u"),$("text",Z,"accent-token","\u02d9","\\."),$("text",Z,"accent-token","\u02da","\\r"),$("text",Z,"accent-token","\u02c7","\\v"),$("text",Z,"accent-token","\xa8",'\\"'),$("text",Z,"accent-token","\u02dd","\\H"),$("text",Z,"accent-token","\u25ef","\\textcircled");var rt={"--":!0,"---":!0,"``":!0,"''":!0};$("text",Z,"textord","\u2013","--"),$("text",Z,"textord","\u2013","\\textendash"),$("text",Z,"textord","\u2014","---"),$("text",Z,"textord","\u2014","\\textemdash"),$("text",Z,"textord","\u2018","`"),$("text",Z,"textord","\u2018","\\textquoteleft"),$("text",Z,"textord","\u2019","'"),$("text",Z,"textord","\u2019","\\textquoteright"),$("text",Z,"textord","\u201c","``"),$("text",Z,"textord","\u201c","\\textquotedblleft"),$("text",Z,"textord","\u201d","''"),$("text",Z,"textord","\u201d","\\textquotedblright"),$("math",Z,"textord","\xb0","\\degree",!0),$("text",Z,"textord","\xb0","\\degree"),$("text",Z,"textord","\xb0","\\textdegree",!0),$("math",Z,Q,"\xa3","\\pounds"),$("math",Z,Q,"\xa3","\\mathsterling",!0),$("text",Z,Q,"\xa3","\\pounds"),$("text",Z,Q,"\xa3","\\textsterling",!0),$("math",K,"textord","\u2720","\\maltese"),$("text",K,"textord","\u2720","\\maltese"),$("text",Z,"spacing","\xa0","\\ "),$("text",Z,"spacing","\xa0"," "),$("text",Z,"spacing","\xa0","~");for(var at=0;at<'0123456789/@."'.length;at++){var nt='0123456789/@."'.charAt(at);$("math",Z,"textord",nt,nt)}for(var it=0;it<'0123456789!@*()-=+[]<>|";:?/.,'.length;it++){var ot='0123456789!@*()-=+[]<>|";:?/.,'.charAt(it);$("text",Z,"textord",ot,ot)}for(var st="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",ht=0;ht=5?0:t>=3?1:2]){var r=Y[e]={cssEmPerMu:V.quad[e]/18};for(var a in V)V.hasOwnProperty(a)&&(r[a]=V[a][e])}return Y[e]}(this.size)),this._fontMetrics},e.getColor=function(){return this.phantom?"transparent":this.color},t}();kt.BASESIZE=6;var St=kt,Mt={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:1.00375,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:1.00375},zt={ex:!0,em:!0,mu:!0},At=function(t){return"string"!=typeof t&&(t=t.unit),t in Mt||t in zt||"ex"===t},Tt=function(t,e){var r;if(t.unit in Mt)r=Mt[t.unit]/e.fontMetrics().ptPerEm/e.sizeMultiplier;else if("mu"===t.unit)r=e.fontMetrics().cssEmPerMu;else{var a;if(a=e.style.isTight()?e.havingStyle(e.style.text()):e,"ex"===t.unit)r=a.fontMetrics().xHeight;else{if("em"!==t.unit)throw new o("Invalid unit: '"+t.unit+"'");r=a.fontMetrics().quad}a!==e&&(r*=a.sizeMultiplier/e.sizeMultiplier)}return Math.min(t.number*r,e.maxSize)},Bt=["\\imath","\u0131","\\jmath","\u0237","\\pounds","\\mathsterling","\\textsterling","\xa3"],Ct=function(t,e,r){return j[r][t]&&j[r][t].replace&&(t=j[r][t].replace),{value:t,metrics:G(t,e,r)}},qt=function(t,e,r,a,n){var i,o=Ct(t,e,r),s=o.metrics;if(t=o.value,s){var h=s.italic;("text"===r||a&&"mathit"===a.font)&&(h=0),i=new E(t,s.height,s.depth,h,s.skew,s.width,n)}else"undefined"!=typeof console&&console.warn("No character metrics for '"+t+"' in style '"+e+"' and mode '"+r+"'"),i=new E(t,0,0,0,0,0,n);if(a){i.maxFontSize=a.sizeMultiplier,a.style.isTight()&&i.classes.push("mtight");var l=a.getColor();l&&(i.style.color=l)}return i},Nt=function(t,e){if(T(t.classes)!==T(e.classes)||t.skew!==e.skew||t.maxFontSize!==e.maxFontSize)return!1;for(var r in t.style)if(t.style.hasOwnProperty(r)&&t.style[r]!==e.style[r])return!1;for(var a in e.style)if(e.style.hasOwnProperty(a)&&t.style[a]!==e.style[a])return!1;return!0},It=function(t){for(var e=0,r=0,a=0,n=0;ne&&(e=i.height),i.depth>r&&(r=i.depth),i.maxFontSize>a&&(a=i.maxFontSize)}t.height=e,t.depth=r,t.maxFontSize=a},Rt=function(t,e,r,a){var n=new N(t,e,r,a);return It(n),n},Ot=function(t,e,r,a){return new N(t,e,r,a)},Et=function(t){var e=new A(t);return It(e),e},Lt=function(t,e,r){var a="";switch(t){case"amsrm":a="AMS";break;case"textrm":a="Main";break;case"textsf":a="SansSerif";break;case"texttt":a="Typewriter";break;default:a=t}return a+"-"+("textbf"===e&&"textit"===r?"BoldItalic":"textbf"===e?"Bold":"textit"===e?"Italic":"Regular")},Ht={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},Pt={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},Dt={fontMap:Ht,makeSymbol:qt,mathsym:function(t,e,r,a){return void 0===a&&(a=[]),"boldsymbol"===r.font&&Ct(t,"Main-Bold",e).metrics?qt(t,"Main-Bold",e,r,a.concat(["mathbf"])):"\\"===t||"main"===j[e][t].font?qt(t,"Main-Regular",e,r,a):qt(t,"AMS-Regular",e,r,a.concat(["amsrm"]))},makeSpan:Rt,makeSvgSpan:Ot,makeLineSpan:function(t,e,r){var a=Rt([t],[],e);return a.height=Math.max(r||e.fontMetrics().defaultRuleThickness,e.minRuleThickness),a.style.borderBottomWidth=a.height+"em",a.maxFontSize=1,a},makeAnchor:function(t,e,r,a){var n=new I(t,e,r,a);return It(n),n},makeFragment:Et,wrapFragment:function(t,e){return t instanceof A?Rt([],[t],e):t},makeVList:function(t,e){for(var r=function(t){if("individualShift"===t.positionType){for(var e=t.children,r=[e[0]],a=-e[0].shift-e[0].elem.depth,n=a,i=1;i0&&(i.push(pe(o,e)),o=[]),i.push(n[s]));o.length>0&&i.push(pe(o,e)),r&&((a=pe(se(r,e,!0))).classes=["tag"],i.push(a));var l=re(["katex-html"],i);if(l.setAttribute("aria-hidden","true"),a){var m=a.children[0];m.style.height=l.height+l.depth+"em",m.style.verticalAlign=-l.depth+"em"}return l}function fe(t){return new A(t)}var ge=function(){function t(t,e){this.type=void 0,this.attributes=void 0,this.children=void 0,this.type=t,this.attributes={},this.children=e||[]}var e=t.prototype;return e.setAttribute=function(t,e){this.attributes[t]=e},e.getAttribute=function(t){return this.attributes[t]},e.toNode=function(){var t=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var e in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,e)&&t.setAttribute(e,this.attributes[e]);for(var r=0;r"},e.toText=function(){return this.children.map(function(t){return t.toText()}).join("")},t}(),xe=function(){function t(t){this.text=void 0,this.text=t}var e=t.prototype;return e.toNode=function(){return document.createTextNode(this.text)},e.toMarkup=function(){return c.escape(this.toText())},e.toText=function(){return this.text},t}(),ve={MathNode:ge,TextNode:xe,SpaceNode:function(){function t(t){this.width=void 0,this.character=void 0,this.width=t,this.character=t>=.05555&&t<=.05556?"\u200a":t>=.1666&&t<=.1667?"\u2009":t>=.2222&&t<=.2223?"\u2005":t>=.2777&&t<=.2778?"\u2005\u200a":t>=-.05556&&t<=-.05555?"\u200a\u2063":t>=-.1667&&t<=-.1666?"\u2009\u2063":t>=-.2223&&t<=-.2222?"\u205f\u2063":t>=-.2778&&t<=-.2777?"\u2005\u2063":null}var e=t.prototype;return e.toNode=function(){if(this.character)return document.createTextNode(this.character);var t=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return t.setAttribute("width",this.width+"em"),t},e.toMarkup=function(){return this.character?""+this.character+"":''},e.toText=function(){return this.character?this.character:" "},t}(),newDocumentFragment:fe},be=function(t,e,r){return!j[e][t]||!j[e][t].replace||55349===t.charCodeAt(0)||rt.hasOwnProperty(t)&&r&&(r.fontFamily&&"tt"===r.fontFamily.substr(4,2)||r.font&&"tt"===r.font.substr(4,2))||(t=j[e][t].replace),new ve.TextNode(t)},ye=function(t){return 1===t.length?t[0]:new ve.MathNode("mrow",t)},we=function(t,e){if("texttt"===e.fontFamily)return"monospace";if("textsf"===e.fontFamily)return"textit"===e.fontShape&&"textbf"===e.fontWeight?"sans-serif-bold-italic":"textit"===e.fontShape?"sans-serif-italic":"textbf"===e.fontWeight?"bold-sans-serif":"sans-serif";if("textit"===e.fontShape&&"textbf"===e.fontWeight)return"bold-italic";if("textit"===e.fontShape)return"italic";if("textbf"===e.fontWeight)return"bold";var r=e.font;if(!r||"mathnormal"===r)return null;var a=t.mode;if("mathit"===r)return"italic";if("boldsymbol"===r)return"bold-italic";if("mathbf"===r)return"bold";if("mathbb"===r)return"double-struck";if("mathfrak"===r)return"fraktur";if("mathscr"===r||"mathcal"===r)return"script";if("mathsf"===r)return"sans-serif";if("mathtt"===r)return"monospace";var n=t.text;return c.contains(["\\imath","\\jmath"],n)?null:(j[a][n]&&j[a][n].replace&&(n=j[a][n].replace),G(n,Dt.fontMap[r].fontName,a)?Dt.fontMap[r].variant:null)},ke=function(t,e,r){if(1===t.length){var a=Me(t[0],e);return r&&a instanceof ge&&"mo"===a.type&&(a.setAttribute("lspace","0em"),a.setAttribute("rspace","0em")),[a]}for(var n,i=[],o=0;o0&&(p.text=p.text.slice(0,1)+"\u0338"+p.text.slice(1),i.pop())}}}i.push(s),n=s}return i},Se=function(t,e,r){return ye(ke(t,e,r))},Me=function(t,e){if(!t)return new ve.MathNode("mrow");if(Jt[t.type])return Jt[t.type](t,e);throw new o("Got group of unknown type: '"+t.type+"'")};function ze(t,e,r,a){var n,i=ke(t,r);n=1===i.length&&i[0]instanceof ge&&c.contains(["mrow","mtable"],i[0].type)?i[0]:new ve.MathNode("mrow",i);var o=new ve.MathNode("annotation",[new ve.TextNode(e)]);o.setAttribute("encoding","application/x-tex");var s=new ve.MathNode("semantics",[n,o]),h=new ve.MathNode("math",[s]);h.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML");var l=a?"katex":"katex-mathml";return Dt.makeSpan([l],[h])}var Ae=function(t){return new St({style:t.displayMode?w.DISPLAY:w.TEXT,maxSize:t.maxSize,minRuleThickness:t.minRuleThickness})},Te=function(t,e){if(e.displayMode){var r=["katex-display"];e.leqno&&r.push("leqno"),e.fleqn&&r.push("fleqn"),t=Dt.makeSpan(r,[t])}return t},Be=function(t,e,r){var a,n=Ae(r);if("mathml"===r.output)return ze(t,e,n,!0);if("html"===r.output){var i=de(t,n);a=Dt.makeSpan(["katex"],[i])}else{var o=ze(t,e,n,!1),s=de(t,n);a=Dt.makeSpan(["katex"],[o,s])}return Te(a,r)},Ce={widehat:"^",widecheck:"\u02c7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23df",overbrace:"\u23de",overgroup:"\u23e0",undergroup:"\u23e1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21d2",xRightarrow:"\u21d2",overleftharpoon:"\u21bc",xleftharpoonup:"\u21bc",overrightharpoon:"\u21c0",xrightharpoonup:"\u21c0",xLeftarrow:"\u21d0",xLeftrightarrow:"\u21d4",xhookleftarrow:"\u21a9",xhookrightarrow:"\u21aa",xmapsto:"\u21a6",xrightharpoondown:"\u21c1",xleftharpoondown:"\u21bd",xrightleftharpoons:"\u21cc",xleftrightharpoons:"\u21cb",xtwoheadleftarrow:"\u219e",xtwoheadrightarrow:"\u21a0",xlongequal:"=",xtofrom:"\u21c4",xrightleftarrows:"\u21c4",xrightequilibrium:"\u21cc",xleftequilibrium:"\u21cb"},qe={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},Ne=function(t){return"ordgroup"===t.type?t.body.length:1},Ie=function(t,e,r,a){var n,i=t.height+t.depth+2*r;if(/fbox|color/.test(e)){if(n=Dt.makeSpan(["stretchy",e],[],a),"fbox"===e){var o=a.color&&a.getColor();o&&(n.style.borderColor=o)}}else{var s=[];/^[bx]cancel$/.test(e)&&s.push(new P({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(e)&&s.push(new P({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var h=new L(s,{width:"100%",height:i+"em"});n=Dt.makeSvgSpan([],[h],a)}return n.height=i,n.style.height=i+"em",n},Re=function(t){var e=new ve.MathNode("mo",[new ve.TextNode(Ce[t.substr(1)])]);return e.setAttribute("stretchy","true"),e},Oe=function(t,e){var r=function(){var r=4e5,a=t.label.substr(1);if(c.contains(["widehat","widecheck","widetilde","utilde"],a)){var n,i,o,s=Ne(t.base);if(s>5)"widehat"===a||"widecheck"===a?(n=420,r=2364,o=.42,i=a+"4"):(n=312,r=2340,o=.34,i="tilde4");else{var h=[1,1,2,2,3,3][s];"widehat"===a||"widecheck"===a?(r=[0,1062,2364,2364,2364][h],n=[0,239,300,360,420][h],o=[0,.24,.3,.3,.36,.42][h],i=a+h):(r=[0,600,1033,2339,2340][h],n=[0,260,286,306,312][h],o=[0,.26,.286,.3,.306,.34][h],i="tilde"+h)}var l=new H(i),m=new L([l],{width:"100%",height:o+"em",viewBox:"0 0 "+r+" "+n,preserveAspectRatio:"none"});return{span:Dt.makeSvgSpan([],[m],e),minWidth:0,height:o}}var u,p,d=[],f=qe[a],g=f[0],x=f[1],v=f[2],b=v/1e3,y=g.length;if(1===y)u=["hide-tail"],p=[f[3]];else if(2===y)u=["halfarrow-left","halfarrow-right"],p=["xMinYMin","xMaxYMin"];else{if(3!==y)throw new Error("Correct katexImagesData or update code here to support\n "+y+" children.");u=["brace-left","brace-center","brace-right"],p=["xMinYMin","xMidYMin","xMaxYMin"]}for(var w=0;w0&&(a.style.minWidth=n+"em"),a},Ee=function(t,e){var r,a,n,i=Vt(t,"supsub");i?(r=(a=Ft(i.base,"accent")).base,i.base=r,n=function(t){if(t instanceof N)return t;throw new Error("Expected span but got "+String(t)+".")}(ue(i,e)),i.base=a):r=(a=Ft(t,"accent")).base;var o=ue(r,e.havingCrampedStyle()),s=0;if(a.isShifty&&c.isCharacterBox(r)){var h=c.getBaseElem(r);s=D(ue(h,e.havingCrampedStyle())).skew}var l,m=Math.min(o.height,e.fontMetrics().xHeight);if(a.isStretchy)l=Oe(a,e),l=Dt.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:o},{type:"elem",elem:l,wrapperClasses:["svg-align"],wrapperStyle:s>0?{width:"calc(100% - "+2*s+"em)",marginLeft:2*s+"em"}:void 0}]},e);else{var u,p;"\\vec"===a.label?(u=Dt.staticSvg("vec",e),p=Dt.svgData.vec[1]):((u=D(u=Dt.makeOrd({mode:a.mode,text:a.label},e,"textord"))).italic=0,p=u.width),l=Dt.makeSpan(["accent-body"],[u]);var d="\\textcircled"===a.label;d&&(l.classes.push("accent-full"),m=o.height);var f=s;d||(f-=p/2),l.style.left=f+"em","\\textcircled"===a.label&&(l.style.top=".2em"),l=Dt.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:o},{type:"kern",size:-m},{type:"elem",elem:l}]},e)}var g=Dt.makeSpan(["mord","accent"],[l],e);return n?(n.children[0]=g,n.height=Math.max(g.height,n.height),n.classes[0]="mord",n):g},Le=function(t,e){var r=t.isStretchy?Re(t.label):new ve.MathNode("mo",[be(t.label,t.mode)]),a=new ve.MathNode("mover",[Me(t.base,e),r]);return a.setAttribute("accent","true"),a},He=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(function(t){return"\\"+t}).join("|"));Qt({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:function(t,e){var r=e[0],a=!He.test(t.funcName),n=!a||"\\widehat"===t.funcName||"\\widetilde"===t.funcName||"\\widecheck"===t.funcName;return{type:"accent",mode:t.parser.mode,label:t.funcName,isStretchy:a,isShifty:n,base:r}},htmlBuilder:Ee,mathmlBuilder:Le}),Qt({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!1},handler:function(t,e){var r=e[0];return{type:"accent",mode:t.parser.mode,label:t.funcName,isStretchy:!1,isShifty:!0,base:r}},htmlBuilder:Ee,mathmlBuilder:Le}),Qt({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:function(t,e){var r=t.parser,a=t.funcName,n=e[0];return{type:"accentUnder",mode:r.mode,label:a,base:n}},htmlBuilder:function(t,e){var r=ue(t.base,e),a=Oe(t,e),n="\\utilde"===t.label?.12:0,i=Dt.makeVList({positionType:"bottom",positionData:a.height+n,children:[{type:"elem",elem:a,wrapperClasses:["svg-align"]},{type:"kern",size:n},{type:"elem",elem:r}]},e);return Dt.makeSpan(["mord","accentunder"],[i],e)},mathmlBuilder:function(t,e){var r=Re(t.label),a=new ve.MathNode("munder",[Me(t.base,e),r]);return a.setAttribute("accentunder","true"),a}});var Pe=function(t){var e=new ve.MathNode("mpadded",t?[t]:[]);return e.setAttribute("width","+0.6em"),e.setAttribute("lspace","0.3em"),e};Qt({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium"],props:{numArgs:1,numOptionalArgs:1},handler:function(t,e,r){var a=t.parser,n=t.funcName;return{type:"xArrow",mode:a.mode,label:n,body:e[0],below:r[0]}},htmlBuilder:function(t,e){var r,a=e.style,n=e.havingStyle(a.sup()),i=Dt.wrapFragment(ue(t.body,n,e),e);i.classes.push("x-arrow-pad"),t.below&&(n=e.havingStyle(a.sub()),(r=Dt.wrapFragment(ue(t.below,n,e),e)).classes.push("x-arrow-pad"));var o,s=Oe(t,e),h=-e.fontMetrics().axisHeight+.5*s.height,l=-e.fontMetrics().axisHeight-.5*s.height-.111;if((i.depth>.25||"\\xleftequilibrium"===t.label)&&(l-=i.depth),r){var m=-e.fontMetrics().axisHeight+r.height+.5*s.height+.111;o=Dt.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:l},{type:"elem",elem:s,shift:h},{type:"elem",elem:r,shift:m}]},e)}else o=Dt.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:l},{type:"elem",elem:s,shift:h}]},e);return o.children[0].children[0].children[1].classes.push("svg-align"),Dt.makeSpan(["mrel","x-arrow"],[o],e)},mathmlBuilder:function(t,e){var r,a=Re(t.label);if(t.body){var n=Pe(Me(t.body,e));if(t.below){var i=Pe(Me(t.below,e));r=new ve.MathNode("munderover",[a,i,n])}else r=new ve.MathNode("mover",[a,n])}else if(t.below){var o=Pe(Me(t.below,e));r=new ve.MathNode("munder",[a,o])}else r=Pe(),r=new ve.MathNode("mover",[a,r]);return r}}),Qt({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler:function(t,e){for(var r=t.parser,a=Ft(e[0],"ordgroup").body,n="",i=0;i","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],Je=[0,1.2,1.8,2.4,3],Qe=[{type:"small",style:w.SCRIPTSCRIPT},{type:"small",style:w.SCRIPT},{type:"small",style:w.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],tr=[{type:"small",style:w.SCRIPTSCRIPT},{type:"small",style:w.SCRIPT},{type:"small",style:w.TEXT},{type:"stack"}],er=[{type:"small",style:w.SCRIPTSCRIPT},{type:"small",style:w.SCRIPT},{type:"small",style:w.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],rr=function(t){if("small"===t.type)return"Main-Regular";if("large"===t.type)return"Size"+t.size+"-Regular";if("stack"===t.type)return"Size4-Regular";throw new Error("Add support for delim type '"+t.type+"' here.")},ar=function(t,e,r,a){for(var n=Math.min(2,3-a.style.size);ne)return r[n]}return r[r.length-1]},nr=function(t,e,r,a,n,i){var o;"<"===t||"\\lt"===t||"\u27e8"===t?t="\\langle":">"!==t&&"\\gt"!==t&&"\u27e9"!==t||(t="\\rangle"),o=c.contains(Ke,t)?Qe:c.contains($e,t)?er:tr;var s=ar(t,e,o,a);return"small"===s.type?function(t,e,r,a,n,i){var o=Dt.makeSymbol(t,"Main-Regular",n,a),s=Ue(o,e,a,i);return r&&Ge(s,a,e),s}(t,s.style,r,a,n,i):"large"===s.type?Ye(t,s.size,r,a,n,i):_e(t,e,r,a,n,i)},ir=function(t,e){var r,a,n=e.havingBaseSizing(),i=ar("\\surd",t*n.sizeMultiplier,er,n),o=n.sizeMultiplier,s=Math.max(0,e.minRuleThickness-e.fontMetrics().sqrtRuleThickness),h=0,l=0,m=0;return"small"===i.type?(t<1?o=1:t<1.4&&(o=.7),l=(1+s)/o,(r=je("sqrtMain",h=(1+s+.08)/o,m=1e3+1e3*s+80,s,e)).style.minWidth="0.853em",a=.833/o):"large"===i.type?(m=1080*Je[i.size],l=(Je[i.size]+s)/o,h=(Je[i.size]+s+.08)/o,(r=je("sqrtSize"+i.size,h,m,s,e)).style.minWidth="1.02em",a=1/o):(h=t+s+.08,l=t+s,m=Math.floor(1e3*t+s)+80,(r=je("sqrtTall",h,m,s,e)).style.minWidth="0.742em",a=1.056),r.height=l,r.style.height=h+"em",{span:r,advanceWidth:a,ruleWidth:(e.fontMetrics().sqrtRuleThickness+s)*o}},or=function(t,e,r,a,n){if("<"===t||"\\lt"===t||"\u27e8"===t?t="\\langle":">"!==t&&"\\gt"!==t&&"\u27e9"!==t||(t="\\rangle"),c.contains($e,t)||c.contains(Ke,t))return Ye(t,e,!1,r,a,n);if(c.contains(Ze,t))return _e(t,Je[e],!1,r,a,n);throw new o("Illegal delimiter: '"+t+"'")},sr=nr,hr=function(t,e,r,a,n,i){var o=a.fontMetrics().axisHeight*a.sizeMultiplier,s=5/a.fontMetrics().ptPerEm,h=Math.max(e-o,r+o),l=Math.max(h/500*901,2*h-s);return nr(t,l,!0,a,n,i)},lr={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},mr=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27e8","\\rangle","\u27e9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];function cr(t,e){var r=Yt(t);if(r&&c.contains(mr,r.text))return r;throw new o("Invalid delimiter: '"+(r?r.text:JSON.stringify(t))+"' after '"+e.funcName+"'",t)}function ur(t){if(!t.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}Qt({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1},handler:function(t,e){var r=cr(e[0],t);return{type:"delimsizing",mode:t.parser.mode,size:lr[t.funcName].size,mclass:lr[t.funcName].mclass,delim:r.text}},htmlBuilder:function(t,e){return"."===t.delim?Dt.makeSpan([t.mclass]):or(t.delim,t.size,e,t.mode,[t.mclass])},mathmlBuilder:function(t){var e=[];"."!==t.delim&&e.push(be(t.delim,t.mode));var r=new ve.MathNode("mo",e);return"mopen"===t.mclass||"mclose"===t.mclass?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r}}),Qt({type:"leftright-right",names:["\\right"],props:{numArgs:1},handler:function(t,e){var r=t.parser.gullet.macros.get("\\current@color");if(r&&"string"!=typeof r)throw new o("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:t.parser.mode,delim:cr(e[0],t).text,color:r}}}),Qt({type:"leftright",names:["\\left"],props:{numArgs:1},handler:function(t,e){var r=cr(e[0],t),a=t.parser;++a.leftrightDepth;var n=a.parseExpression(!1);--a.leftrightDepth,a.expect("\\right",!1);var i=Ft(a.parseFunction(),"leftright-right");return{type:"leftright",mode:a.mode,body:n,left:r.text,right:i.delim,rightColor:i.color}},htmlBuilder:function(t,e){ur(t);for(var r,a,n=se(t.body,e,!0,["mopen","mclose"]),i=0,o=0,s=!1,h=0;h-1?"mpadded":"menclose",[Me(t.body,e)]);switch(t.label){case"\\cancel":a.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":a.setAttribute("notation","downdiagonalstrike");break;case"\\sout":a.setAttribute("notation","horizontalstrike");break;case"\\fbox":a.setAttribute("notation","box");break;case"\\fcolorbox":case"\\colorbox":if(r=e.fontMetrics().fboxsep*e.fontMetrics().ptPerEm,a.setAttribute("width","+"+2*r+"pt"),a.setAttribute("height","+"+2*r+"pt"),a.setAttribute("lspace",r+"pt"),a.setAttribute("voffset",r+"pt"),"\\fcolorbox"===t.label){var n=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness);a.setAttribute("style","border: "+n+"em solid "+String(t.borderColor))}break;case"\\xcancel":a.setAttribute("notation","updiagonalstrike downdiagonalstrike")}return t.backgroundColor&&a.setAttribute("mathbackground",t.backgroundColor),a};Qt({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,greediness:3,argTypes:["color","text"]},handler:function(t,e,r){var a=t.parser,n=t.funcName,i=Ft(e[0],"color-token").color,o=e[1];return{type:"enclose",mode:a.mode,label:n,backgroundColor:i,body:o}},htmlBuilder:pr,mathmlBuilder:dr}),Qt({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,greediness:3,argTypes:["color","color","text"]},handler:function(t,e,r){var a=t.parser,n=t.funcName,i=Ft(e[0],"color-token").color,o=Ft(e[1],"color-token").color,s=e[2];return{type:"enclose",mode:a.mode,label:n,backgroundColor:o,borderColor:i,body:s}},htmlBuilder:pr,mathmlBuilder:dr}),Qt({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler:function(t,e){return{type:"enclose",mode:t.parser.mode,label:"\\fbox",body:e[0]}}}),Qt({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout"],props:{numArgs:1},handler:function(t,e,r){var a=t.parser,n=t.funcName,i=e[0];return{type:"enclose",mode:a.mode,label:n,body:i}},htmlBuilder:pr,mathmlBuilder:dr});var fr={};function gr(t){for(var e=t.type,r=t.names,a=t.props,n=t.handler,i=t.htmlBuilder,o=t.mathmlBuilder,s={type:e,numArgs:a.numArgs||0,greediness:1,allowedInText:!1,numOptionalArgs:0,handler:n},h=0;h0&&(b+=.25),l.push({pos:b,isDashed:t[e]})}for(y(i[0]),r=0;r0&&(M<(B+=v)&&(M=B),B=0),t.addJot&&(M+=f),z.height=S,z.depth=M,b+=S,z.pos=b,b+=M+B,h[r]=z,y(i[r+1])}var C,q,N=b/2+e.fontMetrics().axisHeight,I=t.cols||[],R=[];for(a=0,q=0;a=s)){var P=void 0;(a>0||t.hskipBeforeAndAfter)&&0!==(P=c.deflt(O.pregap,p))&&((C=Dt.makeSpan(["arraycolsep"],[])).style.width=P+"em",R.push(C));var D=[];for(r=0;r0){for(var G=Dt.makeLineSpan("hline",e,m),Y=Dt.makeLineSpan("hdashline",e,m),W=[{type:"elem",elem:h,shift:0}];l.length>0;){var X=l.pop(),_=X.pos-N;X.isDashed?W.push({type:"elem",elem:Y,shift:_}):W.push({type:"elem",elem:G,shift:_})}h=Dt.makeVList({positionType:"individualShift",children:W},e)}return Dt.makeSpan(["mord"],[h],e)},wr={c:"center ",l:"left ",r:"right "},kr=function(t,e){var r=new ve.MathNode("mtable",t.body.map(function(t){return new ve.MathNode("mtr",t.map(function(t){return new ve.MathNode("mtd",[Me(t,e)])}))})),a=.5===t.arraystretch?.1:.16+t.arraystretch-1+(t.addJot?.09:0);r.setAttribute("rowspacing",a+"em");var n="",i="";if(t.cols){var o=t.cols,s="",h=!1,l=0,m=o.length;"separator"===o[0].type&&(n+="top ",l=1),"separator"===o[o.length-1].type&&(n+="bottom ",m-=1);for(var c=l;c0?"left ":"",n+=g[g.length-1].length>0?"right ":"";for(var x=1;x0&&c&&(d=1),a[u]={type:"align",align:p,pregap:d,postgap:0}}return n.colSeparationType=c?"align":"alignat",n};gr({type:"array",names:["array","darray"],props:{numArgs:1},handler:function(t,e){var r={cols:(Yt(e[0])?[e[0]]:Ft(e[0],"ordgroup").body).map(function(t){var e=Gt(t).text;if(-1!=="lcr".indexOf(e))return{type:"align",align:e};if("|"===e)return{type:"separator",separator:"|"};if(":"===e)return{type:"separator",separator:":"};throw new o("Unknown column alignment: "+e,t)}),hskipBeforeAndAfter:!0};return vr(t.parser,r,br(t.envName))},htmlBuilder:yr,mathmlBuilder:kr}),gr({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix"],props:{numArgs:0},handler:function(t){var e={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[t.envName],r=vr(t.parser,{hskipBeforeAndAfter:!1},br(t.envName));return e?{type:"leftright",mode:t.mode,body:[r],left:e[0],right:e[1],rightColor:void 0}:r},htmlBuilder:yr,mathmlBuilder:kr}),gr({type:"array",names:["smallmatrix"],props:{numArgs:0},handler:function(t){var e=vr(t.parser,{arraystretch:.5},"script");return e.colSeparationType="small",e},htmlBuilder:yr,mathmlBuilder:kr}),gr({type:"array",names:["subarray"],props:{numArgs:1},handler:function(t,e){var r=(Yt(e[0])?[e[0]]:Ft(e[0],"ordgroup").body).map(function(t){var e=Gt(t).text;if(-1!=="lc".indexOf(e))return{type:"align",align:e};throw new o("Unknown column alignment: "+e,t)});if(r.length>1)throw new o("{subarray} can contain only one column");var a={cols:r,hskipBeforeAndAfter:!1,arraystretch:.5};if((a=vr(t.parser,a,"script")).body[0].length>1)throw new o("{subarray} can contain only one column");return a},htmlBuilder:yr,mathmlBuilder:kr}),gr({type:"array",names:["cases","dcases"],props:{numArgs:0},handler:function(t){var e=vr(t.parser,{arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},br(t.envName));return{type:"leftright",mode:t.mode,body:[e],left:"\\{",right:".",rightColor:void 0}},htmlBuilder:yr,mathmlBuilder:kr}),gr({type:"array",names:["aligned"],props:{numArgs:0},handler:Sr,htmlBuilder:yr,mathmlBuilder:kr}),gr({type:"array",names:["gathered"],props:{numArgs:0},handler:function(t){return vr(t.parser,{cols:[{type:"align",align:"c"}],addJot:!0},"display")},htmlBuilder:yr,mathmlBuilder:kr}),gr({type:"array",names:["alignedat"],props:{numArgs:1},handler:Sr,htmlBuilder:yr,mathmlBuilder:kr}),Qt({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler:function(t,e){throw new o(t.funcName+" valid only within array environment")}});var Mr=fr;Qt({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler:function(t,e){var r=t.parser,a=t.funcName,n=e[0];if("ordgroup"!==n.type)throw new o("Invalid environment name",n);for(var i="",s=0;s=w.SCRIPT.id?r.text():w.DISPLAY:"text"===t&&r.size===w.DISPLAY.size?r=w.TEXT:"script"===t?r=w.SCRIPT:"scriptscript"===t&&(r=w.SCRIPTSCRIPT),r},Rr=function(t,e){var r,a=Ir(t.size,e.style),n=a.fracNum(),i=a.fracDen();r=e.havingStyle(n);var o=ue(t.numer,r,e);if(t.continued){var s=8.5/e.fontMetrics().ptPerEm,h=3.5/e.fontMetrics().ptPerEm;o.height=o.height0?3*c:7*c,d=e.fontMetrics().denom1):(m>0?(u=e.fontMetrics().num2,p=c):(u=e.fontMetrics().num3,p=3*c),d=e.fontMetrics().denom2),l){var y=e.fontMetrics().axisHeight;u-o.depth-(y+.5*m)0&&(e="."===(e=t)?null:e),e};Qt({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,greediness:6,argTypes:["math","math","size","text","math","math"]},handler:function(t,e){var r=t.parser,a=e[4],n=e[5],i=Vt(e[0],"atom");i&&(i=Ut(e[0],"open"));var o=i?Lr(i.text):null,s=Vt(e[1],"atom");s&&(s=Ut(e[1],"close"));var h,l=s?Lr(s.text):null,m=Ft(e[2],"size"),c=null;h=!!m.isBlank||(c=m.value).number>0;var u="auto",p=Vt(e[3],"ordgroup");if(p){if(p.body.length>0){var d=Ft(p.body[0],"textord");u=Er[Number(d.text)]}}else p=Ft(e[3],"textord"),u=Er[Number(p.text)];return{type:"genfrac",mode:r.mode,numer:a,denom:n,continued:!1,hasBarLine:h,barSize:c,leftDelim:o,rightDelim:l,size:u}},htmlBuilder:Rr,mathmlBuilder:Or}),Qt({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler:function(t,e){var r=t.parser,a=(t.funcName,t.token);return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:Ft(e[0],"size").value,token:a}}}),Qt({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:function(t,e){var r=t.parser,a=(t.funcName,e[0]),n=function(t){if(!t)throw new Error("Expected non-null, but got "+String(t));return t}(Ft(e[1],"infix").size),i=e[2],o=n.number>0;return{type:"genfrac",mode:r.mode,numer:a,denom:i,continued:!1,hasBarLine:o,barSize:n,leftDelim:null,rightDelim:null,size:"auto"}},htmlBuilder:Rr,mathmlBuilder:Or});var Hr=function(t,e){var r,a,n=e.style,i=Vt(t,"supsub");i?(r=i.sup?ue(i.sup,e.havingStyle(n.sup()),e):ue(i.sub,e.havingStyle(n.sub()),e),a=Ft(i.base,"horizBrace")):a=Ft(t,"horizBrace");var o,s=ue(a.base,e.havingBaseStyle(w.DISPLAY)),h=Oe(a,e);if(a.isOver?(o=Dt.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:h}]},e)).children[0].children[0].children[1].classes.push("svg-align"):(o=Dt.makeVList({positionType:"bottom",positionData:s.depth+.1+h.height,children:[{type:"elem",elem:h},{type:"kern",size:.1},{type:"elem",elem:s}]},e)).children[0].children[0].children[0].classes.push("svg-align"),r){var l=Dt.makeSpan(["mord",a.isOver?"mover":"munder"],[o],e);o=a.isOver?Dt.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:l},{type:"kern",size:.2},{type:"elem",elem:r}]},e):Dt.makeVList({positionType:"bottom",positionData:l.depth+.2+r.height+r.depth,children:[{type:"elem",elem:r},{type:"kern",size:.2},{type:"elem",elem:l}]},e)}return Dt.makeSpan(["mord",a.isOver?"mover":"munder"],[o],e)};Qt({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler:function(t,e){var r=t.parser,a=t.funcName;return{type:"horizBrace",mode:r.mode,label:a,isOver:/^\\over/.test(a),base:e[0]}},htmlBuilder:Hr,mathmlBuilder:function(t,e){var r=Re(t.label);return new ve.MathNode(t.isOver?"mover":"munder",[Me(t.base,e),r])}}),Qt({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:function(t,e){var r=t.parser,a=e[1],n=Ft(e[0],"url").url;return r.settings.isTrusted({command:"\\href",url:n})?{type:"href",mode:r.mode,href:n,body:ee(a)}:r.formatUnsupportedCmd("\\href")},htmlBuilder:function(t,e){var r=se(t.body,e,!1);return Dt.makeAnchor(t.href,[],r,e)},mathmlBuilder:function(t,e){var r=Se(t.body,e);return r instanceof ge||(r=new ge("mrow",[r])),r.setAttribute("href",t.href),r}}),Qt({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:function(t,e){var r=t.parser,a=Ft(e[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:a}))return r.formatUnsupportedCmd("\\url");for(var n=[],i=0;i0&&(a=Tt(t.totalheight,e)-r,a=Number(a.toFixed(2)));var n=0;t.width.number>0&&(n=Tt(t.width,e));var i={height:r+a+"em"};n>0&&(i.width=n+"em"),a>0&&(i.verticalAlign=-a+"em");var o=new R(t.src,t.alt,i);return o.height=r,o.depth=a,o},mathmlBuilder:function(t,e){var r=new ve.MathNode("mglyph",[]);r.setAttribute("alt",t.alt);var a=Tt(t.height,e),n=0;if(t.totalheight.number>0&&(n=(n=Tt(t.totalheight,e)-a).toFixed(2),r.setAttribute("valign","-"+n+"em")),r.setAttribute("height",a+n+"em"),t.width.number>0){var i=Tt(t.width,e);r.setAttribute("width",i+"em")}return r.setAttribute("src",t.src),r}}),Qt({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],allowedInText:!0},handler:function(t,e){var r=t.parser,a=t.funcName,n=Ft(e[0],"size");if(r.settings.strict){var i="m"===a[1],o="mu"===n.value.unit;i?(o||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" supports only mu units, not "+n.value.unit+" units"),"math"!==r.mode&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" works only in math mode")):o&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:n.value}},htmlBuilder:function(t,e){return Dt.makeGlue(t.dimension,e)},mathmlBuilder:function(t,e){var r=Tt(t.dimension,e);return new ve.SpaceNode(r)}}),Qt({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:function(t,e){var r=t.parser,a=t.funcName,n=e[0];return{type:"lap",mode:r.mode,alignment:a.slice(5),body:n}},htmlBuilder:function(t,e){var r;"clap"===t.alignment?(r=Dt.makeSpan([],[ue(t.body,e)]),r=Dt.makeSpan(["inner"],[r],e)):r=Dt.makeSpan(["inner"],[ue(t.body,e)]);var a=Dt.makeSpan(["fix"],[]),n=Dt.makeSpan([t.alignment],[r,a],e),i=Dt.makeSpan(["strut"]);return i.style.height=n.height+n.depth+"em",i.style.verticalAlign=-n.depth+"em",n.children.unshift(i),n=Dt.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:n}]},e),Dt.makeSpan(["mord"],[n],e)},mathmlBuilder:function(t,e){var r=new ve.MathNode("mpadded",[Me(t.body,e)]);if("rlap"!==t.alignment){var a="llap"===t.alignment?"-1":"-0.5";r.setAttribute("lspace",a+"width")}return r.setAttribute("width","0px"),r}}),Qt({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler:function(t,e){var r=t.funcName,a=t.parser,n=a.mode;a.switchMode("math");var i="\\("===r?"\\)":"$",o=a.parseExpression(!1,i);return a.expect(i),a.switchMode(n),{type:"styling",mode:a.mode,style:"text",body:o}}}),Qt({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler:function(t,e){throw new o("Mismatched "+t.funcName)}});var Dr=function(t,e){switch(e.style.size){case w.DISPLAY.size:return t.display;case w.TEXT.size:return t.text;case w.SCRIPT.size:return t.script;case w.SCRIPTSCRIPT.size:return t.scriptscript;default:return t.text}};Qt({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4},handler:function(t,e){return{type:"mathchoice",mode:t.parser.mode,display:ee(e[0]),text:ee(e[1]),script:ee(e[2]),scriptscript:ee(e[3])}},htmlBuilder:function(t,e){var r=Dr(t,e),a=se(r,e,!1);return Dt.makeFragment(a)},mathmlBuilder:function(t,e){var r=Dr(t,e);return Se(r,e)}});var Fr=function(t,e,r,a,n,i,o){var s,h,l;if(t=Dt.makeSpan([],[t]),e){var m=ue(e,a.havingStyle(n.sup()),a);h={elem:m,kern:Math.max(a.fontMetrics().bigOpSpacing1,a.fontMetrics().bigOpSpacing3-m.depth)}}if(r){var c=ue(r,a.havingStyle(n.sub()),a);s={elem:c,kern:Math.max(a.fontMetrics().bigOpSpacing2,a.fontMetrics().bigOpSpacing4-c.height)}}if(h&&s){var u=a.fontMetrics().bigOpSpacing5+s.elem.height+s.elem.depth+s.kern+t.depth+o;l=Dt.makeVList({positionType:"bottom",positionData:u,children:[{type:"kern",size:a.fontMetrics().bigOpSpacing5},{type:"elem",elem:s.elem,marginLeft:-i+"em"},{type:"kern",size:s.kern},{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:i+"em"},{type:"kern",size:a.fontMetrics().bigOpSpacing5}]},a)}else if(s){var p=t.height-o;l=Dt.makeVList({positionType:"top",positionData:p,children:[{type:"kern",size:a.fontMetrics().bigOpSpacing5},{type:"elem",elem:s.elem,marginLeft:-i+"em"},{type:"kern",size:s.kern},{type:"elem",elem:t}]},a)}else{if(!h)return t;var d=t.depth+o;l=Dt.makeVList({positionType:"bottom",positionData:d,children:[{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:i+"em"},{type:"kern",size:a.fontMetrics().bigOpSpacing5}]},a)}return Dt.makeSpan(["mop","op-limits"],[l],a)},Vr=["\\smallint"],Ur=function(t,e){var r,a,n,i=!1,o=Vt(t,"supsub");o?(r=o.sup,a=o.sub,n=Ft(o.base,"op"),i=!0):n=Ft(t,"op");var s,h=e.style,l=!1;if(h.size===w.DISPLAY.size&&n.symbol&&!c.contains(Vr,n.name)&&(l=!0),n.symbol){var m=l?"Size2-Regular":"Size1-Regular",u="";if("\\oiint"!==n.name&&"\\oiiint"!==n.name||(u=n.name.substr(1),n.name="oiint"===u?"\\iint":"\\iiint"),s=Dt.makeSymbol(n.name,m,"math",e,["mop","op-symbol",l?"large-op":"small-op"]),u.length>0){var p=s.italic,d=Dt.staticSvg(u+"Size"+(l?"2":"1"),e);s=Dt.makeVList({positionType:"individualShift",children:[{type:"elem",elem:s,shift:0},{type:"elem",elem:d,shift:l?.08:0}]},e),n.name="\\"+u,s.classes.unshift("mop"),s.italic=p}}else if(n.body){var f=se(n.body,e,!0);1===f.length&&f[0]instanceof E?(s=f[0]).classes[0]="mop":s=Dt.makeSpan(["mop"],Dt.tryCombineChars(f),e)}else{for(var g=[],x=1;x0){for(var h=n.body.map(function(t){var e=t.text;return"string"==typeof e?{type:"textord",mode:t.mode,text:e}:t}),l=se(h,e.withFont("mathrm"),!0),m=0;m=0?s.setAttribute("height","+"+n+"em"):(s.setAttribute("height",n+"em"),s.setAttribute("depth","+"+-n+"em")),s.setAttribute("voffset",n+"em"),s}});var jr=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"];Qt({type:"sizing",names:jr,props:{numArgs:0,allowedInText:!0},handler:function(t,e){var r=t.breakOnTokenText,a=t.funcName,n=t.parser,i=n.parseExpression(!1,r);return{type:"sizing",mode:n.mode,size:jr.indexOf(a)+1,body:i}},htmlBuilder:function(t,e){var r=e.havingSize(t.size);return _r(t.body,r,e)},mathmlBuilder:function(t,e){var r=e.havingSize(t.size),a=ke(t.body,r),n=new ve.MathNode("mstyle",a);return n.setAttribute("mathsize",r.sizeMultiplier+"em"),n}}),Qt({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:function(t,e,r){var a=t.parser,n=!1,i=!1,o=r[0]&&Ft(r[0],"ordgroup");if(o)for(var s="",h=0;hr.height+r.depth+i&&(i=(i+c-r.height-r.depth)/2);var u=h.height-r.height-i-l;r.style.paddingLeft=m+"em";var p=Dt.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+u)},{type:"elem",elem:h},{type:"kern",size:l}]},e);if(t.index){var d=e.havingStyle(w.SCRIPTSCRIPT),f=ue(t.index,d,e),g=.6*(p.height-p.depth),x=Dt.makeVList({positionType:"shift",positionData:-g,children:[{type:"elem",elem:f}]},e),v=Dt.makeSpan(["root"],[x]);return Dt.makeSpan(["mord","sqrt"],[v,p],e)}return Dt.makeSpan(["mord","sqrt"],[p],e)},mathmlBuilder:function(t,e){var r=t.body,a=t.index;return a?new ve.MathNode("mroot",[Me(r,e),Me(a,e)]):new ve.MathNode("msqrt",[Me(r,e)])}});var $r={display:w.DISPLAY,text:w.TEXT,script:w.SCRIPT,scriptscript:w.SCRIPTSCRIPT};Qt({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0},handler:function(t,e){var r=t.breakOnTokenText,a=t.funcName,n=t.parser,i=n.parseExpression(!0,r),o=a.slice(1,a.length-5);return{type:"styling",mode:n.mode,style:o,body:i}},htmlBuilder:function(t,e){var r=$r[t.style],a=e.havingStyle(r).withFont("");return _r(t.body,a,e)},mathmlBuilder:function(t,e){var r=$r[t.style],a=e.havingStyle(r),n=ke(t.body,a),i=new ve.MathNode("mstyle",n),o={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]}[t.style];return i.setAttribute("scriptlevel",o[0]),i.setAttribute("displaystyle",o[1]),i}});te({type:"supsub",htmlBuilder:function(t,e){var r=function(t,e){var r=t.base;return r?"op"===r.type?r.limits&&(e.style.size===w.DISPLAY.size||r.alwaysHandleSupSub)?Ur:null:"operatorname"===r.type?r.alwaysHandleSupSub&&(e.style.size===w.DISPLAY.size||r.limits)?Xr:null:"accent"===r.type?c.isCharacterBox(r.base)?Ee:null:"horizBrace"===r.type&&!t.sub===r.isOver?Hr:null:null}(t,e);if(r)return r(t,e);var a,n,i,o=t.base,s=t.sup,h=t.sub,l=ue(o,e),m=e.fontMetrics(),u=0,p=0,d=o&&c.isCharacterBox(o);if(s){var f=e.havingStyle(e.style.sup());a=ue(s,f,e),d||(u=l.height-f.fontMetrics().supDrop*f.sizeMultiplier/e.sizeMultiplier)}if(h){var g=e.havingStyle(e.style.sub());n=ue(h,g,e),d||(p=l.depth+g.fontMetrics().subDrop*g.sizeMultiplier/e.sizeMultiplier)}i=e.style===w.DISPLAY?m.sup1:e.style.cramped?m.sup3:m.sup2;var x,v=e.sizeMultiplier,b=.5/m.ptPerEm/v+"em",y=null;if(n){var k=t.base&&"op"===t.base.type&&t.base.name&&("\\oiint"===t.base.name||"\\oiiint"===t.base.name);(l instanceof E||k)&&(y=-l.italic+"em")}if(a&&n){u=Math.max(u,i,a.depth+.25*m.xHeight),p=Math.max(p,m.sub2);var S=4*m.defaultRuleThickness;if(u-a.depth-(n.height-p)0&&(u+=M,p-=M)}var z=[{type:"elem",elem:n,shift:p,marginRight:b,marginLeft:y},{type:"elem",elem:a,shift:-u,marginRight:b}];x=Dt.makeVList({positionType:"individualShift",children:z},e)}else if(n){p=Math.max(p,m.sub1,n.height-.8*m.xHeight);var A=[{type:"elem",elem:n,marginLeft:y,marginRight:b}];x=Dt.makeVList({positionType:"shift",positionData:p,children:A},e)}else{if(!a)throw new Error("supsub must have either sup or sub.");u=Math.max(u,i,a.depth+.25*m.xHeight),x=Dt.makeVList({positionType:"shift",positionData:-u,children:[{type:"elem",elem:a,marginRight:b}]},e)}var T=me(l,"right")||"mord";return Dt.makeSpan([T],[l,Dt.makeSpan(["msupsub"],[x])],e)},mathmlBuilder:function(t,e){var r,a=!1,n=Vt(t.base,"horizBrace");n&&!!t.sup===n.isOver&&(a=!0,r=n.isOver),!t.base||"op"!==t.base.type&&"operatorname"!==t.base.type||(t.base.parentIsSupSub=!0);var i,o=[Me(t.base,e)];if(t.sub&&o.push(Me(t.sub,e)),t.sup&&o.push(Me(t.sup,e)),a)i=r?"mover":"munder";else if(t.sub)if(t.sup){var s=t.base;i=s&&"op"===s.type&&s.limits&&e.style===w.DISPLAY?"munderover":s&&"operatorname"===s.type&&s.alwaysHandleSupSub&&(e.style===w.DISPLAY||s.limits)?"munderover":"msubsup"}else{var h=t.base;i=h&&"op"===h.type&&h.limits&&(e.style===w.DISPLAY||h.alwaysHandleSupSub)?"munder":h&&"operatorname"===h.type&&h.alwaysHandleSupSub&&(h.limits||e.style===w.DISPLAY)?"munder":"msub"}else{var l=t.base;i=l&&"op"===l.type&&l.limits&&(e.style===w.DISPLAY||l.alwaysHandleSupSub)?"mover":l&&"operatorname"===l.type&&l.alwaysHandleSupSub&&(l.limits||e.style===w.DISPLAY)?"mover":"msup"}return new ve.MathNode(i,o)}}),te({type:"atom",htmlBuilder:function(t,e){return Dt.mathsym(t.text,t.mode,e,["m"+t.family])},mathmlBuilder:function(t,e){var r=new ve.MathNode("mo",[be(t.text,t.mode)]);if("bin"===t.family){var a=we(t,e);"bold-italic"===a&&r.setAttribute("mathvariant",a)}else"punct"===t.family?r.setAttribute("separator","true"):"open"!==t.family&&"close"!==t.family||r.setAttribute("stretchy","false");return r}});var Zr={mi:"italic",mn:"normal",mtext:"normal"};te({type:"mathord",htmlBuilder:function(t,e){return Dt.makeOrd(t,e,"mathord")},mathmlBuilder:function(t,e){var r=new ve.MathNode("mi",[be(t.text,t.mode,e)]),a=we(t,e)||"italic";return a!==Zr[r.type]&&r.setAttribute("mathvariant",a),r}}),te({type:"textord",htmlBuilder:function(t,e){return Dt.makeOrd(t,e,"textord")},mathmlBuilder:function(t,e){var r,a=be(t.text,t.mode,e),n=we(t,e)||"normal";return r="text"===t.mode?new ve.MathNode("mtext",[a]):/[0-9]/.test(t.text)?new ve.MathNode("mn",[a]):"\\prime"===t.text?new ve.MathNode("mo",[a]):new ve.MathNode("mi",[a]),n!==Zr[r.type]&&r.setAttribute("mathvariant",n),r}});var Kr={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},Jr={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};te({type:"spacing",htmlBuilder:function(t,e){if(Jr.hasOwnProperty(t.text)){var r=Jr[t.text].className||"";if("text"===t.mode){var a=Dt.makeOrd(t,e,"textord");return a.classes.push(r),a}return Dt.makeSpan(["mspace",r],[Dt.mathsym(t.text,t.mode,e)],e)}if(Kr.hasOwnProperty(t.text))return Dt.makeSpan(["mspace",Kr[t.text]],[],e);throw new o('Unknown type of space "'+t.text+'"')},mathmlBuilder:function(t,e){if(!Jr.hasOwnProperty(t.text)){if(Kr.hasOwnProperty(t.text))return new ve.MathNode("mspace");throw new o('Unknown type of space "'+t.text+'"')}return new ve.MathNode("mtext",[new ve.TextNode("\xa0")])}});var Qr=function(){var t=new ve.MathNode("mtd",[]);return t.setAttribute("width","50%"),t};te({type:"tag",mathmlBuilder:function(t,e){var r=new ve.MathNode("mtable",[new ve.MathNode("mtr",[Qr(),new ve.MathNode("mtd",[Se(t.body,e)]),Qr(),new ve.MathNode("mtd",[Se(t.tag,e)])])]);return r.setAttribute("width","100%"),r}});var ta={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},ea={"\\textbf":"textbf","\\textmd":"textmd"},ra={"\\textit":"textit","\\textup":"textup"},aa=function(t,e){var r=t.font;return r?ta[r]?e.withTextFontFamily(ta[r]):ea[r]?e.withTextFontWeight(ea[r]):e.withTextFontShape(ra[r]):e};Qt({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup"],props:{numArgs:1,argTypes:["text"],greediness:2,allowedInText:!0},handler:function(t,e){var r=t.parser,a=t.funcName,n=e[0];return{type:"text",mode:r.mode,body:ee(n),font:a}},htmlBuilder:function(t,e){var r=aa(t,e),a=se(t.body,r,!0);return Dt.makeSpan(["mord","text"],Dt.tryCombineChars(a),r)},mathmlBuilder:function(t,e){var r=aa(t,e);return Se(t.body,r)}}),Qt({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler:function(t,e){return{type:"underline",mode:t.parser.mode,body:e[0]}},htmlBuilder:function(t,e){var r=ue(t.body,e),a=Dt.makeLineSpan("underline-line",e),n=e.fontMetrics().defaultRuleThickness,i=Dt.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:n},{type:"elem",elem:a},{type:"kern",size:3*n},{type:"elem",elem:r}]},e);return Dt.makeSpan(["mord","underline"],[i],e)},mathmlBuilder:function(t,e){var r=new ve.MathNode("mo",[new ve.TextNode("\u203e")]);r.setAttribute("stretchy","true");var a=new ve.MathNode("munder",[Me(t.body,e),r]);return a.setAttribute("accentunder","true"),a}}),Qt({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler:function(t,e,r){throw new o("\\verb ended by end of line instead of matching delimiter")},htmlBuilder:function(t,e){for(var r=na(t),a=[],n=e.havingStyle(e.style.text()),i=0;i0&&(this.undefStack[this.undefStack.length-1][t]=e)}else{var n=this.undefStack[this.undefStack.length-1];n&&!n.hasOwnProperty(t)&&(n[t]=this.current[t])}this.current[t]=e},t}(),ca={},ua=ca;function pa(t,e){ca[t]=e}pa("\\@firstoftwo",function(t){return{tokens:t.consumeArgs(2)[0],numArgs:0}}),pa("\\@secondoftwo",function(t){return{tokens:t.consumeArgs(2)[1],numArgs:0}}),pa("\\@ifnextchar",function(t){var e=t.consumeArgs(3),r=t.future();return 1===e[0].length&&e[0][0].text===r.text?{tokens:e[1],numArgs:0}:{tokens:e[2],numArgs:0}}),pa("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}"),pa("\\TextOrMath",function(t){var e=t.consumeArgs(2);return"text"===t.mode?{tokens:e[0],numArgs:0}:{tokens:e[1],numArgs:0}});var da={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};pa("\\char",function(t){var e,r=t.popToken(),a="";if("'"===r.text)e=8,r=t.popToken();else if('"'===r.text)e=16,r=t.popToken();else if("`"===r.text)if("\\"===(r=t.popToken()).text[0])a=r.text.charCodeAt(1);else{if("EOF"===r.text)throw new o("\\char` missing argument");a=r.text.charCodeAt(0)}else e=10;if(e){if(null==(a=da[r.text])||a>=e)throw new o("Invalid base-"+e+" digit "+r.text);for(var n;null!=(n=da[t.future().text])&&n":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};pa("\\dots",function(t){var e="\\dotso",r=t.expandAfterFuture().text;return r in xa?e=xa[r]:"\\not"===r.substr(0,4)?e="\\dotsb":r in j.math&&c.contains(["bin","rel"],j.math[r].group)&&(e="\\dotsb"),e});var va={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};pa("\\dotso",function(t){return t.future().text in va?"\\ldots\\,":"\\ldots"}),pa("\\dotsc",function(t){var e=t.future().text;return e in va&&","!==e?"\\ldots\\,":"\\ldots"}),pa("\\cdots",function(t){return t.future().text in va?"\\@cdots\\,":"\\@cdots"}),pa("\\dotsb","\\cdots"),pa("\\dotsm","\\cdots"),pa("\\dotsi","\\!\\cdots"),pa("\\dotsx","\\ldots\\,"),pa("\\DOTSI","\\relax"),pa("\\DOTSB","\\relax"),pa("\\DOTSX","\\relax"),pa("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"),pa("\\,","\\tmspace+{3mu}{.1667em}"),pa("\\thinspace","\\,"),pa("\\>","\\mskip{4mu}"),pa("\\:","\\tmspace+{4mu}{.2222em}"),pa("\\medspace","\\:"),pa("\\;","\\tmspace+{5mu}{.2777em}"),pa("\\thickspace","\\;"),pa("\\!","\\tmspace-{3mu}{.1667em}"),pa("\\negthinspace","\\!"),pa("\\negmedspace","\\tmspace-{4mu}{.2222em}"),pa("\\negthickspace","\\tmspace-{5mu}{.277em}"),pa("\\enspace","\\kern.5em "),pa("\\enskip","\\hskip.5em\\relax"),pa("\\quad","\\hskip1em\\relax"),pa("\\qquad","\\hskip2em\\relax"),pa("\\tag","\\@ifstar\\tag@literal\\tag@paren"),pa("\\tag@paren","\\tag@literal{({#1})}"),pa("\\tag@literal",function(t){if(t.macros.get("\\df@tag"))throw new o("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"}),pa("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"),pa("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"),pa("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}"),pa("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1"),pa("\\pmb","\\html@mathml{\\@binrel{#1}{\\mathrlap{#1}\\kern0.5px#1}}{\\mathbf{#1}}"),pa("\\\\","\\newline"),pa("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var ba=F["Main-Regular"]["T".charCodeAt(0)][1]-.7*F["Main-Regular"]["A".charCodeAt(0)][1]+"em";pa("\\LaTeX","\\textrm{\\html@mathml{L\\kern-.36em\\raisebox{"+ba+"}{\\scriptstyle A}\\kern-.15em\\TeX}{LaTeX}}"),pa("\\KaTeX","\\textrm{\\html@mathml{K\\kern-.17em\\raisebox{"+ba+"}{\\scriptstyle A}\\kern-.15em\\TeX}{KaTeX}}"),pa("\\hspace","\\@ifstar\\@hspacer\\@hspace"),pa("\\@hspace","\\hskip #1\\relax"),pa("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax"),pa("\\ordinarycolon",":"),pa("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}"),pa("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}'),pa("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}'),pa("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}'),pa("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}'),pa("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}'),pa("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}'),pa("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}'),pa("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}'),pa("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}'),pa("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}'),pa("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}'),pa("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}'),pa("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}'),pa("\u2237","\\dblcolon"),pa("\u2239","\\eqcolon"),pa("\u2254","\\coloneqq"),pa("\u2255","\\eqqcolon"),pa("\u2a74","\\Coloneqq"),pa("\\ratio","\\vcentcolon"),pa("\\coloncolon","\\dblcolon"),pa("\\colonequals","\\coloneqq"),pa("\\coloncolonequals","\\Coloneqq"),pa("\\equalscolon","\\eqqcolon"),pa("\\equalscoloncolon","\\Eqqcolon"),pa("\\colonminus","\\coloneq"),pa("\\coloncolonminus","\\Coloneq"),pa("\\minuscolon","\\eqcolon"),pa("\\minuscoloncolon","\\Eqcolon"),pa("\\coloncolonapprox","\\Colonapprox"),pa("\\coloncolonsim","\\Colonsim"),pa("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),pa("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"),pa("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),pa("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"),pa("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220c}}"),pa("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}"),pa("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}"),pa("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}"),pa("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}"),pa("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}"),pa("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}"),pa("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}"),pa("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}"),pa("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}"),pa("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}"),pa("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}"),pa("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}"),pa("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228a}"),pa("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2acb}"),pa("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228b}"),pa("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2acc}"),pa("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27e6}}"),pa("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27e7}}"),pa("\u27e6","\\llbracket"),pa("\u27e7","\\rrbracket"),pa("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}"),pa("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}"),pa("\u2983","\\lBrace"),pa("\u2984","\\rBrace"),pa("\\darr","\\downarrow"),pa("\\dArr","\\Downarrow"),pa("\\Darr","\\Downarrow"),pa("\\lang","\\langle"),pa("\\rang","\\rangle"),pa("\\uarr","\\uparrow"),pa("\\uArr","\\Uparrow"),pa("\\Uarr","\\Uparrow"),pa("\\N","\\mathbb{N}"),pa("\\R","\\mathbb{R}"),pa("\\Z","\\mathbb{Z}"),pa("\\alef","\\aleph"),pa("\\alefsym","\\aleph"),pa("\\Alpha","\\mathrm{A}"),pa("\\Beta","\\mathrm{B}"),pa("\\bull","\\bullet"),pa("\\Chi","\\mathrm{X}"),pa("\\clubs","\\clubsuit"),pa("\\cnums","\\mathbb{C}"),pa("\\Complex","\\mathbb{C}"),pa("\\Dagger","\\ddagger"),pa("\\diamonds","\\diamondsuit"),pa("\\empty","\\emptyset"),pa("\\Epsilon","\\mathrm{E}"),pa("\\Eta","\\mathrm{H}"),pa("\\exist","\\exists"),pa("\\harr","\\leftrightarrow"),pa("\\hArr","\\Leftrightarrow"),pa("\\Harr","\\Leftrightarrow"),pa("\\hearts","\\heartsuit"),pa("\\image","\\Im"),pa("\\infin","\\infty"),pa("\\Iota","\\mathrm{I}"),pa("\\isin","\\in"),pa("\\Kappa","\\mathrm{K}"),pa("\\larr","\\leftarrow"),pa("\\lArr","\\Leftarrow"),pa("\\Larr","\\Leftarrow"),pa("\\lrarr","\\leftrightarrow"),pa("\\lrArr","\\Leftrightarrow"),pa("\\Lrarr","\\Leftrightarrow"),pa("\\Mu","\\mathrm{M}"),pa("\\natnums","\\mathbb{N}"),pa("\\Nu","\\mathrm{N}"),pa("\\Omicron","\\mathrm{O}"),pa("\\plusmn","\\pm"),pa("\\rarr","\\rightarrow"),pa("\\rArr","\\Rightarrow"),pa("\\Rarr","\\Rightarrow"),pa("\\real","\\Re"),pa("\\reals","\\mathbb{R}"),pa("\\Reals","\\mathbb{R}"),pa("\\Rho","\\mathrm{P}"),pa("\\sdot","\\cdot"),pa("\\sect","\\S"),pa("\\spades","\\spadesuit"),pa("\\sub","\\subset"),pa("\\sube","\\subseteq"),pa("\\supe","\\supseteq"),pa("\\Tau","\\mathrm{T}"),pa("\\thetasym","\\vartheta"),pa("\\weierp","\\wp"),pa("\\Zeta","\\mathrm{Z}"),pa("\\argmin","\\DOTSB\\operatorname*{arg\\,min}"),pa("\\argmax","\\DOTSB\\operatorname*{arg\\,max}"),pa("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits"),pa("\\blue","\\textcolor{##6495ed}{#1}"),pa("\\orange","\\textcolor{##ffa500}{#1}"),pa("\\pink","\\textcolor{##ff00af}{#1}"),pa("\\red","\\textcolor{##df0030}{#1}"),pa("\\green","\\textcolor{##28ae7b}{#1}"),pa("\\gray","\\textcolor{gray}{#1}"),pa("\\purple","\\textcolor{##9d38bd}{#1}"),pa("\\blueA","\\textcolor{##ccfaff}{#1}"),pa("\\blueB","\\textcolor{##80f6ff}{#1}"),pa("\\blueC","\\textcolor{##63d9ea}{#1}"),pa("\\blueD","\\textcolor{##11accd}{#1}"),pa("\\blueE","\\textcolor{##0c7f99}{#1}"),pa("\\tealA","\\textcolor{##94fff5}{#1}"),pa("\\tealB","\\textcolor{##26edd5}{#1}"),pa("\\tealC","\\textcolor{##01d1c1}{#1}"),pa("\\tealD","\\textcolor{##01a995}{#1}"),pa("\\tealE","\\textcolor{##208170}{#1}"),pa("\\greenA","\\textcolor{##b6ffb0}{#1}"),pa("\\greenB","\\textcolor{##8af281}{#1}"),pa("\\greenC","\\textcolor{##74cf70}{#1}"),pa("\\greenD","\\textcolor{##1fab54}{#1}"),pa("\\greenE","\\textcolor{##0d923f}{#1}"),pa("\\goldA","\\textcolor{##ffd0a9}{#1}"),pa("\\goldB","\\textcolor{##ffbb71}{#1}"),pa("\\goldC","\\textcolor{##ff9c39}{#1}"),pa("\\goldD","\\textcolor{##e07d10}{#1}"),pa("\\goldE","\\textcolor{##a75a05}{#1}"),pa("\\redA","\\textcolor{##fca9a9}{#1}"),pa("\\redB","\\textcolor{##ff8482}{#1}"),pa("\\redC","\\textcolor{##f9685d}{#1}"),pa("\\redD","\\textcolor{##e84d39}{#1}"),pa("\\redE","\\textcolor{##bc2612}{#1}"),pa("\\maroonA","\\textcolor{##ffbde0}{#1}"),pa("\\maroonB","\\textcolor{##ff92c6}{#1}"),pa("\\maroonC","\\textcolor{##ed5fa6}{#1}"),pa("\\maroonD","\\textcolor{##ca337c}{#1}"),pa("\\maroonE","\\textcolor{##9e034e}{#1}"),pa("\\purpleA","\\textcolor{##ddd7ff}{#1}"),pa("\\purpleB","\\textcolor{##c6b9fc}{#1}"),pa("\\purpleC","\\textcolor{##aa87ff}{#1}"),pa("\\purpleD","\\textcolor{##7854ab}{#1}"),pa("\\purpleE","\\textcolor{##543b78}{#1}"),pa("\\mintA","\\textcolor{##f5f9e8}{#1}"),pa("\\mintB","\\textcolor{##edf2df}{#1}"),pa("\\mintC","\\textcolor{##e0e5cc}{#1}"),pa("\\grayA","\\textcolor{##f6f7f7}{#1}"),pa("\\grayB","\\textcolor{##f0f1f2}{#1}"),pa("\\grayC","\\textcolor{##e3e5e6}{#1}"),pa("\\grayD","\\textcolor{##d6d8da}{#1}"),pa("\\grayE","\\textcolor{##babec2}{#1}"),pa("\\grayF","\\textcolor{##888d93}{#1}"),pa("\\grayG","\\textcolor{##626569}{#1}"),pa("\\grayH","\\textcolor{##3b3e40}{#1}"),pa("\\grayI","\\textcolor{##21242c}{#1}"),pa("\\kaBlue","\\textcolor{##314453}{#1}"),pa("\\kaGreen","\\textcolor{##71B307}{#1}");var ya={"\\relax":!0,"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0},wa=function(){function t(t,e,r){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=e,this.expansionCount=0,this.feed(t),this.macros=new ma(ua,e.macros),this.mode=r,this.stack=[]}var e=t.prototype;return e.feed=function(t){this.lexer=new la(t,this.settings)},e.switchMode=function(t){this.mode=t},e.beginGroup=function(){this.macros.beginGroup()},e.endGroup=function(){this.macros.endGroup()},e.future=function(){return 0===this.stack.length&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]},e.popToken=function(){return this.future(),this.stack.pop()},e.pushToken=function(t){this.stack.push(t)},e.pushTokens=function(t){var e;(e=this.stack).push.apply(e,t)},e.consumeSpaces=function(){for(;;){if(" "!==this.future().text)break;this.stack.pop()}},e.consumeArgs=function(t){for(var e=[],r=0;rthis.settings.maxExpand)throw new o("Too many expansions: infinite loop or need to increase maxExpand setting");var a=r.tokens;if(r.numArgs)for(var n=this.consumeArgs(r.numArgs),i=(a=a.slice()).length-1;i>=0;--i){var s=a[i];if("#"===s.text){if(0===i)throw new o("Incomplete placeholder at end of macro body",s);if("#"===(s=a[--i]).text)a.splice(i+1,1);else{if(!/^[1-9]$/.test(s.text))throw new o("Not a valid argument number",s);var h;(h=a).splice.apply(h,[i,2].concat(n[+s.text-1]))}}}return this.pushTokens(a),a},e.expandAfterFuture=function(){return this.expandOnce(),this.future()},e.expandNextToken=function(){for(;;){var t=this.expandOnce();if(t instanceof n){if("\\relax"!==t.text)return this.stack.pop();this.stack.pop()}}throw new Error},e.expandMacro=function(t){if(this.macros.get(t)){var e=[],r=this.stack.length;for(this.pushToken(new n(t));this.stack.length>r;){this.expandOnce()instanceof n&&e.push(this.stack.pop())}return e}},e.expandMacroAsText=function(t){var e=this.expandMacro(t);return e?e.map(function(t){return t.text}).join(""):e},e._getExpansion=function(t){var e=this.macros.get(t);if(null==e)return e;var r="function"==typeof e?e(this):e;if("string"==typeof r){var a=0;if(-1!==r.indexOf("#"))for(var n=r.replace(/##/g,"");-1!==n.indexOf("#"+(a+1));)++a;for(var i=new la(r,this.settings),o=[],s=i.lex();"EOF"!==s.text;)o.push(s),s=i.lex();return o.reverse(),{tokens:o,numArgs:a}}return r},e.isDefined=function(t){return this.macros.has(t)||ia.hasOwnProperty(t)||j.math.hasOwnProperty(t)||j.text.hasOwnProperty(t)||ya.hasOwnProperty(t)},t}(),ka={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030c":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030a":{text:"\\r",math:"\\mathring"},"\u030b":{text:"\\H"}},Sa={"\xe1":"a\u0301","\xe0":"a\u0300","\xe4":"a\u0308","\u01df":"a\u0308\u0304","\xe3":"a\u0303","\u0101":"a\u0304","\u0103":"a\u0306","\u1eaf":"a\u0306\u0301","\u1eb1":"a\u0306\u0300","\u1eb5":"a\u0306\u0303","\u01ce":"a\u030c","\xe2":"a\u0302","\u1ea5":"a\u0302\u0301","\u1ea7":"a\u0302\u0300","\u1eab":"a\u0302\u0303","\u0227":"a\u0307","\u01e1":"a\u0307\u0304","\xe5":"a\u030a","\u01fb":"a\u030a\u0301","\u1e03":"b\u0307","\u0107":"c\u0301","\u010d":"c\u030c","\u0109":"c\u0302","\u010b":"c\u0307","\u010f":"d\u030c","\u1e0b":"d\u0307","\xe9":"e\u0301","\xe8":"e\u0300","\xeb":"e\u0308","\u1ebd":"e\u0303","\u0113":"e\u0304","\u1e17":"e\u0304\u0301","\u1e15":"e\u0304\u0300","\u0115":"e\u0306","\u011b":"e\u030c","\xea":"e\u0302","\u1ebf":"e\u0302\u0301","\u1ec1":"e\u0302\u0300","\u1ec5":"e\u0302\u0303","\u0117":"e\u0307","\u1e1f":"f\u0307","\u01f5":"g\u0301","\u1e21":"g\u0304","\u011f":"g\u0306","\u01e7":"g\u030c","\u011d":"g\u0302","\u0121":"g\u0307","\u1e27":"h\u0308","\u021f":"h\u030c","\u0125":"h\u0302","\u1e23":"h\u0307","\xed":"i\u0301","\xec":"i\u0300","\xef":"i\u0308","\u1e2f":"i\u0308\u0301","\u0129":"i\u0303","\u012b":"i\u0304","\u012d":"i\u0306","\u01d0":"i\u030c","\xee":"i\u0302","\u01f0":"j\u030c","\u0135":"j\u0302","\u1e31":"k\u0301","\u01e9":"k\u030c","\u013a":"l\u0301","\u013e":"l\u030c","\u1e3f":"m\u0301","\u1e41":"m\u0307","\u0144":"n\u0301","\u01f9":"n\u0300","\xf1":"n\u0303","\u0148":"n\u030c","\u1e45":"n\u0307","\xf3":"o\u0301","\xf2":"o\u0300","\xf6":"o\u0308","\u022b":"o\u0308\u0304","\xf5":"o\u0303","\u1e4d":"o\u0303\u0301","\u1e4f":"o\u0303\u0308","\u022d":"o\u0303\u0304","\u014d":"o\u0304","\u1e53":"o\u0304\u0301","\u1e51":"o\u0304\u0300","\u014f":"o\u0306","\u01d2":"o\u030c","\xf4":"o\u0302","\u1ed1":"o\u0302\u0301","\u1ed3":"o\u0302\u0300","\u1ed7":"o\u0302\u0303","\u022f":"o\u0307","\u0231":"o\u0307\u0304","\u0151":"o\u030b","\u1e55":"p\u0301","\u1e57":"p\u0307","\u0155":"r\u0301","\u0159":"r\u030c","\u1e59":"r\u0307","\u015b":"s\u0301","\u1e65":"s\u0301\u0307","\u0161":"s\u030c","\u1e67":"s\u030c\u0307","\u015d":"s\u0302","\u1e61":"s\u0307","\u1e97":"t\u0308","\u0165":"t\u030c","\u1e6b":"t\u0307","\xfa":"u\u0301","\xf9":"u\u0300","\xfc":"u\u0308","\u01d8":"u\u0308\u0301","\u01dc":"u\u0308\u0300","\u01d6":"u\u0308\u0304","\u01da":"u\u0308\u030c","\u0169":"u\u0303","\u1e79":"u\u0303\u0301","\u016b":"u\u0304","\u1e7b":"u\u0304\u0308","\u016d":"u\u0306","\u01d4":"u\u030c","\xfb":"u\u0302","\u016f":"u\u030a","\u0171":"u\u030b","\u1e7d":"v\u0303","\u1e83":"w\u0301","\u1e81":"w\u0300","\u1e85":"w\u0308","\u0175":"w\u0302","\u1e87":"w\u0307","\u1e98":"w\u030a","\u1e8d":"x\u0308","\u1e8b":"x\u0307","\xfd":"y\u0301","\u1ef3":"y\u0300","\xff":"y\u0308","\u1ef9":"y\u0303","\u0233":"y\u0304","\u0177":"y\u0302","\u1e8f":"y\u0307","\u1e99":"y\u030a","\u017a":"z\u0301","\u017e":"z\u030c","\u1e91":"z\u0302","\u017c":"z\u0307","\xc1":"A\u0301","\xc0":"A\u0300","\xc4":"A\u0308","\u01de":"A\u0308\u0304","\xc3":"A\u0303","\u0100":"A\u0304","\u0102":"A\u0306","\u1eae":"A\u0306\u0301","\u1eb0":"A\u0306\u0300","\u1eb4":"A\u0306\u0303","\u01cd":"A\u030c","\xc2":"A\u0302","\u1ea4":"A\u0302\u0301","\u1ea6":"A\u0302\u0300","\u1eaa":"A\u0302\u0303","\u0226":"A\u0307","\u01e0":"A\u0307\u0304","\xc5":"A\u030a","\u01fa":"A\u030a\u0301","\u1e02":"B\u0307","\u0106":"C\u0301","\u010c":"C\u030c","\u0108":"C\u0302","\u010a":"C\u0307","\u010e":"D\u030c","\u1e0a":"D\u0307","\xc9":"E\u0301","\xc8":"E\u0300","\xcb":"E\u0308","\u1ebc":"E\u0303","\u0112":"E\u0304","\u1e16":"E\u0304\u0301","\u1e14":"E\u0304\u0300","\u0114":"E\u0306","\u011a":"E\u030c","\xca":"E\u0302","\u1ebe":"E\u0302\u0301","\u1ec0":"E\u0302\u0300","\u1ec4":"E\u0302\u0303","\u0116":"E\u0307","\u1e1e":"F\u0307","\u01f4":"G\u0301","\u1e20":"G\u0304","\u011e":"G\u0306","\u01e6":"G\u030c","\u011c":"G\u0302","\u0120":"G\u0307","\u1e26":"H\u0308","\u021e":"H\u030c","\u0124":"H\u0302","\u1e22":"H\u0307","\xcd":"I\u0301","\xcc":"I\u0300","\xcf":"I\u0308","\u1e2e":"I\u0308\u0301","\u0128":"I\u0303","\u012a":"I\u0304","\u012c":"I\u0306","\u01cf":"I\u030c","\xce":"I\u0302","\u0130":"I\u0307","\u0134":"J\u0302","\u1e30":"K\u0301","\u01e8":"K\u030c","\u0139":"L\u0301","\u013d":"L\u030c","\u1e3e":"M\u0301","\u1e40":"M\u0307","\u0143":"N\u0301","\u01f8":"N\u0300","\xd1":"N\u0303","\u0147":"N\u030c","\u1e44":"N\u0307","\xd3":"O\u0301","\xd2":"O\u0300","\xd6":"O\u0308","\u022a":"O\u0308\u0304","\xd5":"O\u0303","\u1e4c":"O\u0303\u0301","\u1e4e":"O\u0303\u0308","\u022c":"O\u0303\u0304","\u014c":"O\u0304","\u1e52":"O\u0304\u0301","\u1e50":"O\u0304\u0300","\u014e":"O\u0306","\u01d1":"O\u030c","\xd4":"O\u0302","\u1ed0":"O\u0302\u0301","\u1ed2":"O\u0302\u0300","\u1ed6":"O\u0302\u0303","\u022e":"O\u0307","\u0230":"O\u0307\u0304","\u0150":"O\u030b","\u1e54":"P\u0301","\u1e56":"P\u0307","\u0154":"R\u0301","\u0158":"R\u030c","\u1e58":"R\u0307","\u015a":"S\u0301","\u1e64":"S\u0301\u0307","\u0160":"S\u030c","\u1e66":"S\u030c\u0307","\u015c":"S\u0302","\u1e60":"S\u0307","\u0164":"T\u030c","\u1e6a":"T\u0307","\xda":"U\u0301","\xd9":"U\u0300","\xdc":"U\u0308","\u01d7":"U\u0308\u0301","\u01db":"U\u0308\u0300","\u01d5":"U\u0308\u0304","\u01d9":"U\u0308\u030c","\u0168":"U\u0303","\u1e78":"U\u0303\u0301","\u016a":"U\u0304","\u1e7a":"U\u0304\u0308","\u016c":"U\u0306","\u01d3":"U\u030c","\xdb":"U\u0302","\u016e":"U\u030a","\u0170":"U\u030b","\u1e7c":"V\u0303","\u1e82":"W\u0301","\u1e80":"W\u0300","\u1e84":"W\u0308","\u0174":"W\u0302","\u1e86":"W\u0307","\u1e8c":"X\u0308","\u1e8a":"X\u0307","\xdd":"Y\u0301","\u1ef2":"Y\u0300","\u0178":"Y\u0308","\u1ef8":"Y\u0303","\u0232":"Y\u0304","\u0176":"Y\u0302","\u1e8e":"Y\u0307","\u0179":"Z\u0301","\u017d":"Z\u030c","\u1e90":"Z\u0302","\u017b":"Z\u0307","\u03ac":"\u03b1\u0301","\u1f70":"\u03b1\u0300","\u1fb1":"\u03b1\u0304","\u1fb0":"\u03b1\u0306","\u03ad":"\u03b5\u0301","\u1f72":"\u03b5\u0300","\u03ae":"\u03b7\u0301","\u1f74":"\u03b7\u0300","\u03af":"\u03b9\u0301","\u1f76":"\u03b9\u0300","\u03ca":"\u03b9\u0308","\u0390":"\u03b9\u0308\u0301","\u1fd2":"\u03b9\u0308\u0300","\u1fd1":"\u03b9\u0304","\u1fd0":"\u03b9\u0306","\u03cc":"\u03bf\u0301","\u1f78":"\u03bf\u0300","\u03cd":"\u03c5\u0301","\u1f7a":"\u03c5\u0300","\u03cb":"\u03c5\u0308","\u03b0":"\u03c5\u0308\u0301","\u1fe2":"\u03c5\u0308\u0300","\u1fe1":"\u03c5\u0304","\u1fe0":"\u03c5\u0306","\u03ce":"\u03c9\u0301","\u1f7c":"\u03c9\u0300","\u038e":"\u03a5\u0301","\u1fea":"\u03a5\u0300","\u03ab":"\u03a5\u0308","\u1fe9":"\u03a5\u0304","\u1fe8":"\u03a5\u0306","\u038f":"\u03a9\u0301","\u1ffa":"\u03a9\u0300"},Ma=function(){function t(t,e){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new wa(t,e,this.mode),this.settings=e,this.leftrightDepth=0}var e=t.prototype;return e.expect=function(t,e){if(void 0===e&&(e=!0),this.fetch().text!==t)throw new o("Expected '"+t+"', got '"+this.fetch().text+"'",this.fetch());e&&this.consume()},e.consume=function(){this.nextToken=null},e.fetch=function(){return null==this.nextToken&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken},e.switchMode=function(t){this.mode=t,this.gullet.switchMode(t)},e.parse=function(){this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");var t=this.parseExpression(!1);return this.expect("EOF"),this.gullet.endGroup(),t},e.parseExpression=function(e,r){for(var a=[];;){"math"===this.mode&&this.consumeSpaces();var n=this.fetch();if(-1!==t.endOfExpression.indexOf(n.text))break;if(r&&n.text===r)break;if(e&&ia[n.text]&&ia[n.text].infix)break;var i=this.parseAtom(r);if(!i)break;a.push(i)}return"text"===this.mode&&this.formLigatures(a),this.handleInfixNodes(a)},e.handleInfixNodes=function(t){for(var e,r=-1,a=0;a0&&!l||0===s&&!l&&"math"===this.mode,c=this.parseGroupOfType("argument to '"+t+"'",h,l,a,m);if(!c){if(l){i.push(null);continue}throw new o("Expected group after '"+t+"'",this.fetch())}(l?i:n).push(c)}return{args:n,optArgs:i}},e.parseGroupOfType=function(t,e,r,a,n){switch(e){case"color":return n&&this.consumeSpaces(),this.parseColorGroup(r);case"size":return n&&this.consumeSpaces(),this.parseSizeGroup(r);case"url":return this.parseUrlGroup(r,n);case"math":case"text":return this.parseGroup(t,r,a,void 0,e,n);case"hbox":var i=this.parseGroup(t,r,a,void 0,"text",n);return i?{type:"styling",mode:i.mode,body:[i],style:"text"}:i;case"raw":if(n&&this.consumeSpaces(),r&&"{"===this.fetch().text)return null;var s=this.parseStringGroup("raw",r,!0);if(s)return{type:"raw",mode:"text",string:s.text};throw new o("Expected raw group",this.fetch());case"original":case null:case void 0:return this.parseGroup(t,r,a,void 0,void 0,n);default:throw new o("Unknown group type as "+t,this.fetch())}},e.consumeSpaces=function(){for(;" "===this.fetch().text;)this.consume()},e.parseStringGroup=function(t,e,r){var a=e?"[":"{",n=e?"]":"}",i=this.fetch();if(i.text!==a){if(e)return null;if(r&&"EOF"!==i.text&&/[^{}[\]]/.test(i.text))return this.consume(),i}var s=this.mode;this.mode="text",this.expect(a);for(var h,l="",m=this.fetch(),c=0,u=m;(h=this.fetch()).text!==n||r&&c>0;){switch(h.text){case"EOF":throw new o("Unexpected end of input in "+t,m.range(u,l));case a:c++;break;case n:c--}l+=(u=h).text,this.consume()}return this.expect(n),this.mode=s,m.range(u,l)},e.parseRegexGroup=function(t,e){var r=this.mode;this.mode="text";for(var a,n=this.fetch(),i=n,s="";"EOF"!==(a=this.fetch()).text&&t.test(s+a.text);)s+=(i=a).text,this.consume();if(""===s)throw new o("Invalid "+e+": '"+n.text+"'",n);return this.mode=r,n.range(i,s)},e.parseColorGroup=function(t){var e=this.parseStringGroup("color",t);if(!e)return null;var r=/^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i.exec(e.text);if(!r)throw new o("Invalid color: '"+e.text+"'",e);var a=r[0];return/^[0-9a-f]{6}$/i.test(a)&&(a="#"+a),{type:"color-token",mode:this.mode,color:a}},e.parseSizeGroup=function(t){var e,r=!1;if(!(e=t||"{"===this.fetch().text?this.parseStringGroup("size",t):this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/,"size")))return null;t||0!==e.text.length||(e.text="0pt",r=!0);var a=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(e.text);if(!a)throw new o("Invalid size: '"+e.text+"'",e);var n={number:+(a[1]+a[2]),unit:a[3]};if(!At(n))throw new o("Invalid unit: '"+n.unit+"'",e);return{type:"size",mode:this.mode,value:n,isBlank:r}},e.parseUrlGroup=function(t,e){this.gullet.lexer.setCatcode("%",13);var r=this.parseStringGroup("url",t,!0);if(this.gullet.lexer.setCatcode("%",14),!r)return null;var a=r.text.replace(/\\([#$%&~_^{}])/g,"$1");return{type:"url",mode:this.mode,url:a}},e.parseGroup=function(e,r,n,i,s,h){var l=this.mode;s&&this.switchMode(s),h&&this.consumeSpaces();var m,c=this.fetch(),u=c.text;if(r?"["===u:"{"===u||"\\begingroup"===u){this.consume();var p=t.endOfGroup[u];this.gullet.beginGroup();var d=this.parseExpression(!1,p),f=this.fetch();this.expect(p),this.gullet.endGroup(),m={type:"ordgroup",mode:this.mode,loc:a.range(c,f),body:d,semisimple:"\\begingroup"===u||void 0}}else if(r)m=null;else if(null==(m=this.parseFunction(i,e,n)||this.parseSymbol())&&"\\"===u[0]&&!ya.hasOwnProperty(u)){if(this.settings.throwOnError)throw new o("Undefined control sequence: "+u,c);m=this.formatUnsupportedCmd(u),this.consume()}return s&&this.switchMode(l),m},e.formLigatures=function(t){for(var e=t.length-1,r=0;r=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+e[0]+'" used in math mode',t);var h,l=j[this.mode][e].group,m=a.range(t);if(W.hasOwnProperty(l)){var c=l;h={type:"atom",mode:this.mode,family:c,loc:m,text:e}}else h={type:l,mode:this.mode,loc:m,text:e};i=h}else{if(!(e.charCodeAt(0)>=128))return null;this.settings.strict&&(M(e.charCodeAt(0))?"math"===this.mode&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+e[0]+'" used in math mode',t):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+e[0]+'" ('+e.charCodeAt(0)+")",t)),i={type:"textord",mode:"text",loc:a.range(t),text:e}}if(this.consume(),s)for(var u=0;u 15) { + left = "…" + input.slice(start - 15, start); + } else { + left = input.slice(0, start); + } + + let right; + + if (end + 15 < input.length) { + right = input.slice(end, end + 15) + "…"; + } else { + right = input.slice(end); + } + + error += left + underlined + right; + } // Some hackery to make ParseError a prototype of Error + // See http://stackoverflow.com/a/8460753 + + + const self = new Error(error); + self.name = "ParseError"; // $FlowFixMe + + self.__proto__ = ParseError.prototype; // $FlowFixMe + + self.position = start; + return self; + } + +} // $FlowFixMe More hackery + + +ParseError.prototype.__proto__ = Error.prototype; + +/** + * This file contains a list of utility functions which are useful in other + * files. + */ + +/** + * Return whether an element is contained in a list + */ +const contains = function contains(list, elem) { + return list.indexOf(elem) !== -1; +}; +/** + * Provide a default value if a setting is undefined + * NOTE: Couldn't use `T` as the output type due to facebook/flow#5022. + */ + + +const deflt = function deflt(setting, defaultIfUndefined) { + return setting === undefined ? defaultIfUndefined : setting; +}; // hyphenate and escape adapted from Facebook's React under Apache 2 license + + +const uppercase = /([A-Z])/g; + +const hyphenate = function hyphenate(str) { + return str.replace(uppercase, "-$1").toLowerCase(); +}; + +const ESCAPE_LOOKUP = { + "&": "&", + ">": ">", + "<": "<", + "\"": """, + "'": "'" +}; +const ESCAPE_REGEX = /[&><"']/g; +/** + * Escapes text to prevent scripting attacks. + */ + +function escape(text) { + return String(text).replace(ESCAPE_REGEX, match => ESCAPE_LOOKUP[match]); +} +/** + * Sometimes we want to pull out the innermost element of a group. In most + * cases, this will just be the group itself, but when ordgroups and colors have + * a single element, we want to pull that out. + */ + + +const getBaseElem = function getBaseElem(group) { + if (group.type === "ordgroup") { + if (group.body.length === 1) { + return getBaseElem(group.body[0]); + } else { + return group; + } + } else if (group.type === "color") { + if (group.body.length === 1) { + return getBaseElem(group.body[0]); + } else { + return group; + } + } else if (group.type === "font") { + return getBaseElem(group.body); + } else { + return group; + } +}; +/** + * TeXbook algorithms often reference "character boxes", which are simply groups + * with a single character in them. To decide if something is a character box, + * we find its innermost group, and see if it is a single character. + */ + + +const isCharacterBox = function isCharacterBox(group) { + const baseElem = getBaseElem(group); // These are all they types of groups which hold single characters + + return baseElem.type === "mathord" || baseElem.type === "textord" || baseElem.type === "atom"; +}; + +const assert = function assert(value) { + if (!value) { + throw new Error('Expected non-null, but got ' + String(value)); + } + + return value; +}; +/** + * Return the protocol of a URL, or "_relative" if the URL does not specify a + * protocol (and thus is relative). + */ + +const protocolFromUrl = function protocolFromUrl(url) { + const protocol = /^\s*([^\\/#]*?)(?::|�*58|�*3a)/i.exec(url); + return protocol != null ? protocol[1] : "_relative"; +}; +var utils = { + contains, + deflt, + escape, + hyphenate, + getBaseElem, + isCharacterBox, + protocolFromUrl +}; + +/* eslint no-console:0 */ + +/** + * The main Settings object + * + * The current options stored are: + * - displayMode: Whether the expression should be typeset as inline math + * (false, the default), meaning that the math starts in + * \textstyle and is placed in an inline-block); or as display + * math (true), meaning that the math starts in \displaystyle + * and is placed in a block with vertical margin. + */ +class Settings { + constructor(options) { + this.displayMode = void 0; + this.output = void 0; + this.leqno = void 0; + this.fleqn = void 0; + this.throwOnError = void 0; + this.errorColor = void 0; + this.macros = void 0; + this.minRuleThickness = void 0; + this.colorIsTextColor = void 0; + this.strict = void 0; + this.trust = void 0; + this.maxSize = void 0; + this.maxExpand = void 0; + // allow null options + options = options || {}; + this.displayMode = utils.deflt(options.displayMode, false); + this.output = utils.deflt(options.output, "htmlAndMathml"); + this.leqno = utils.deflt(options.leqno, false); + this.fleqn = utils.deflt(options.fleqn, false); + this.throwOnError = utils.deflt(options.throwOnError, true); + this.errorColor = utils.deflt(options.errorColor, "#cc0000"); + this.macros = options.macros || {}; + this.minRuleThickness = Math.max(0, utils.deflt(options.minRuleThickness, 0)); + this.colorIsTextColor = utils.deflt(options.colorIsTextColor, false); + this.strict = utils.deflt(options.strict, "warn"); + this.trust = utils.deflt(options.trust, false); + this.maxSize = Math.max(0, utils.deflt(options.maxSize, Infinity)); + this.maxExpand = Math.max(0, utils.deflt(options.maxExpand, 1000)); + } + /** + * Report nonstrict (non-LaTeX-compatible) input. + * Can safely not be called if `this.strict` is false in JavaScript. + */ + + + reportNonstrict(errorCode, errorMsg, token) { + let strict = this.strict; + + if (typeof strict === "function") { + // Allow return value of strict function to be boolean or string + // (or null/undefined, meaning no further processing). + strict = strict(errorCode, errorMsg, token); + } + + if (!strict || strict === "ignore") { + return; + } else if (strict === true || strict === "error") { + throw new ParseError("LaTeX-incompatible input and strict mode is set to 'error': " + `${errorMsg} [${errorCode}]`, token); + } else if (strict === "warn") { + typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + `${errorMsg} [${errorCode}]`); + } else { + // won't happen in type-safe code + typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + `unrecognized '${strict}': ${errorMsg} [${errorCode}]`); + } + } + /** + * Check whether to apply strict (LaTeX-adhering) behavior for unusual + * input (like `\\`). Unlike `nonstrict`, will not throw an error; + * instead, "error" translates to a return value of `true`, while "ignore" + * translates to a return value of `false`. May still print a warning: + * "warn" prints a warning and returns `false`. + * This is for the second category of `errorCode`s listed in the README. + */ + + + useStrictBehavior(errorCode, errorMsg, token) { + let strict = this.strict; + + if (typeof strict === "function") { + // Allow return value of strict function to be boolean or string + // (or null/undefined, meaning no further processing). + // But catch any exceptions thrown by function, treating them + // like "error". + try { + strict = strict(errorCode, errorMsg, token); + } catch (error) { + strict = "error"; + } + } + + if (!strict || strict === "ignore") { + return false; + } else if (strict === true || strict === "error") { + return true; + } else if (strict === "warn") { + typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + `${errorMsg} [${errorCode}]`); + return false; + } else { + // won't happen in type-safe code + typeof console !== "undefined" && console.warn("LaTeX-incompatible input and strict mode is set to " + `unrecognized '${strict}': ${errorMsg} [${errorCode}]`); + return false; + } + } + /** + * Check whether to test potentially dangerous input, and return + * `true` (trusted) or `false` (untrusted). The sole argument `context` + * should be an object with `command` field specifying the relevant LaTeX + * command (as a string starting with `\`), and any other arguments, etc. + * If `context` has a `url` field, a `protocol` field will automatically + * get added by this function (changing the specified object). + */ + + + isTrusted(context) { + if (context.url && !context.protocol) { + context.protocol = utils.protocolFromUrl(context.url); + } + + const trust = typeof this.trust === "function" ? this.trust(context) : this.trust; + return Boolean(trust); + } + +} + +/** + * This file contains information and classes for the various kinds of styles + * used in TeX. It provides a generic `Style` class, which holds information + * about a specific style. It then provides instances of all the different kinds + * of styles possible, and provides functions to move between them and get + * information about them. + */ + +/** + * The main style class. Contains a unique id for the style, a size (which is + * the same for cramped and uncramped version of a style), and a cramped flag. + */ +class Style { + constructor(id, size, cramped) { + this.id = void 0; + this.size = void 0; + this.cramped = void 0; + this.id = id; + this.size = size; + this.cramped = cramped; + } + /** + * Get the style of a superscript given a base in the current style. + */ + + + sup() { + return styles[sup[this.id]]; + } + /** + * Get the style of a subscript given a base in the current style. + */ + + + sub() { + return styles[sub[this.id]]; + } + /** + * Get the style of a fraction numerator given the fraction in the current + * style. + */ + + + fracNum() { + return styles[fracNum[this.id]]; + } + /** + * Get the style of a fraction denominator given the fraction in the current + * style. + */ + + + fracDen() { + return styles[fracDen[this.id]]; + } + /** + * Get the cramped version of a style (in particular, cramping a cramped style + * doesn't change the style). + */ + + + cramp() { + return styles[cramp[this.id]]; + } + /** + * Get a text or display version of this style. + */ + + + text() { + return styles[text[this.id]]; + } + /** + * Return true if this style is tightly spaced (scriptstyle/scriptscriptstyle) + */ + + + isTight() { + return this.size >= 2; + } + +} // Export an interface for type checking, but don't expose the implementation. +// This way, no more styles can be generated. + + +// IDs of the different styles +const D = 0; +const Dc = 1; +const T = 2; +const Tc = 3; +const S = 4; +const Sc = 5; +const SS = 6; +const SSc = 7; // Instances of the different styles + +const styles = [new Style(D, 0, false), new Style(Dc, 0, true), new Style(T, 1, false), new Style(Tc, 1, true), new Style(S, 2, false), new Style(Sc, 2, true), new Style(SS, 3, false), new Style(SSc, 3, true)]; // Lookup tables for switching from one style to another + +const sup = [S, Sc, S, Sc, SS, SSc, SS, SSc]; +const sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc]; +const fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc]; +const fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc]; +const cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc]; +const text = [D, Dc, T, Tc, T, Tc, T, Tc]; // We only export some of the styles. + +var Style$1 = { + DISPLAY: styles[D], + TEXT: styles[T], + SCRIPT: styles[S], + SCRIPTSCRIPT: styles[SS] +}; + +/* + * This file defines the Unicode scripts and script families that we + * support. To add new scripts or families, just add a new entry to the + * scriptData array below. Adding scripts to the scriptData array allows + * characters from that script to appear in \text{} environments. + */ + +/** + * Each script or script family has a name and an array of blocks. + * Each block is an array of two numbers which specify the start and + * end points (inclusive) of a block of Unicode codepoints. + */ + +/** + * Unicode block data for the families of scripts we support in \text{}. + * Scripts only need to appear here if they do not have font metrics. + */ +const scriptData = [{ + // Latin characters beyond the Latin-1 characters we have metrics for. + // Needed for Czech, Hungarian and Turkish text, for example. + name: 'latin', + blocks: [[0x0100, 0x024f], // Latin Extended-A and Latin Extended-B + [0x0300, 0x036f]] +}, { + // The Cyrillic script used by Russian and related languages. + // A Cyrillic subset used to be supported as explicitly defined + // symbols in symbols.js + name: 'cyrillic', + blocks: [[0x0400, 0x04ff]] +}, { + // The Brahmic scripts of South and Southeast Asia + // Devanagari (0900–097F) + // Bengali (0980–09FF) + // Gurmukhi (0A00–0A7F) + // Gujarati (0A80–0AFF) + // Oriya (0B00–0B7F) + // Tamil (0B80–0BFF) + // Telugu (0C00–0C7F) + // Kannada (0C80–0CFF) + // Malayalam (0D00–0D7F) + // Sinhala (0D80–0DFF) + // Thai (0E00–0E7F) + // Lao (0E80–0EFF) + // Tibetan (0F00–0FFF) + // Myanmar (1000–109F) + name: 'brahmic', + blocks: [[0x0900, 0x109F]] +}, { + name: 'georgian', + blocks: [[0x10A0, 0x10ff]] +}, { + // Chinese and Japanese. + // The "k" in cjk is for Korean, but we've separated Korean out + name: "cjk", + blocks: [[0x3000, 0x30FF], // CJK symbols and punctuation, Hiragana, Katakana + [0x4E00, 0x9FAF], // CJK ideograms + [0xFF00, 0xFF60]] +}, { + // Korean + name: 'hangul', + blocks: [[0xAC00, 0xD7AF]] +}]; +/** + * Given a codepoint, return the name of the script or script family + * it is from, or null if it is not part of a known block + */ + +function scriptFromCodepoint(codepoint) { + for (let i = 0; i < scriptData.length; i++) { + const script = scriptData[i]; + + for (let i = 0; i < script.blocks.length; i++) { + const block = script.blocks[i]; + + if (codepoint >= block[0] && codepoint <= block[1]) { + return script.name; + } + } + } + + return null; +} +/** + * A flattened version of all the supported blocks in a single array. + * This is an optimization to make supportedCodepoint() fast. + */ + +const allBlocks = []; +scriptData.forEach(s => s.blocks.forEach(b => allBlocks.push(...b))); +/** + * Given a codepoint, return true if it falls within one of the + * scripts or script families defined above and false otherwise. + * + * Micro benchmarks shows that this is faster than + * /[\u3000-\u30FF\u4E00-\u9FAF\uFF00-\uFF60\uAC00-\uD7AF\u0900-\u109F]/.test() + * in Firefox, Chrome and Node. + */ + +function supportedCodepoint(codepoint) { + for (let i = 0; i < allBlocks.length; i += 2) { + if (codepoint >= allBlocks[i] && codepoint <= allBlocks[i + 1]) { + return true; + } + } + + return false; +} + +/** + * This file provides support to domTree.js and delimiter.js. + * It's a storehouse of path geometry for SVG images. + */ +// In all paths below, the viewBox-to-em scale is 1000:1. +const hLinePad = 80; // padding above a sqrt viniculum. Prevents image cropping. +// The viniculum of a \sqrt can be made thicker by a KaTeX rendering option. +// Think of variable extraViniculum as two detours in the SVG path. +// The detour begins at the lower left of the area labeled extraViniculum below. +// The detour proceeds one extraViniculum distance up and slightly to the right, +// displacing the radiused corner between surd and viniculum. The radius is +// traversed as usual, then the detour resumes. It goes right, to the end of +// the very long viniculumn, then down one extraViniculum distance, +// after which it resumes regular path geometry for the radical. + +/* viniculum + / + /▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒←extraViniculum + / █████████████████████←0.04em (40 unit) std viniculum thickness + / / + / / + / /\ + / / surd +*/ + +const sqrtMain = function sqrtMain(extraViniculum, hLinePad) { + // sqrtMain path geometry is from glyph U221A in the font KaTeX Main + return `M95,${622 + extraViniculum + hLinePad} +c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14 +c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54 +c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10 +s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429 +c69,-144,104.5,-217.7,106.5,-221 +l${extraViniculum / 2.075} -${extraViniculum} +c5.3,-9.3,12,-14,20,-14 +H400000v${40 + extraViniculum}H845.2724 +s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7 +c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z +M${834 + extraViniculum} ${hLinePad}h400000v${40 + extraViniculum}h-400000z`; +}; + +const sqrtSize1 = function sqrtSize1(extraViniculum, hLinePad) { + // size1 is from glyph U221A in the font KaTeX_Size1-Regular + return `M263,${601 + extraViniculum + hLinePad}c0.7,0,18,39.7,52,119 +c34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120 +c340,-704.7,510.7,-1060.3,512,-1067 +l${extraViniculum / 2.084} -${extraViniculum} +c4.7,-7.3,11,-11,19,-11 +H40000v${40 + extraViniculum}H1012.3 +s-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232 +c-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1 +s-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26 +c-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z +M${1001 + extraViniculum} ${hLinePad}h400000v${40 + extraViniculum}h-400000z`; +}; + +const sqrtSize2 = function sqrtSize2(extraViniculum, hLinePad) { + // size2 is from glyph U221A in the font KaTeX_Size2-Regular + return `M983 ${10 + extraViniculum + hLinePad} +l${extraViniculum / 3.13} -${extraViniculum} +c4,-6.7,10,-10,18,-10 H400000v${40 + extraViniculum} +H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7 +s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744 +c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30 +c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722 +c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5 +c53.7,-170.3,84.5,-266.8,92.5,-289.5z +M${1001 + extraViniculum} ${hLinePad}h400000v${40 + extraViniculum}h-400000z`; +}; + +const sqrtSize3 = function sqrtSize3(extraViniculum, hLinePad) { + // size3 is from glyph U221A in the font KaTeX_Size3-Regular + return `M424,${2398 + extraViniculum + hLinePad} +c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514 +c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20 +s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121 +s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081 +l${extraViniculum / 4.223} -${extraViniculum}c4,-6.7,10,-10,18,-10 H400000 +v${40 + extraViniculum}H1014.6 +s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185 +c-2,6,-10,9,-24,9 +c-8,0,-12,-0.7,-12,-2z M${1001 + extraViniculum} ${hLinePad} +h400000v${40 + extraViniculum}h-400000z`; +}; + +const sqrtSize4 = function sqrtSize4(extraViniculum, hLinePad) { + // size4 is from glyph U221A in the font KaTeX_Size4-Regular + return `M473,${2713 + extraViniculum + hLinePad} +c339.3,-1799.3,509.3,-2700,510,-2702 l${extraViniculum / 5.298} -${extraViniculum} +c3.3,-7.3,9.3,-11,18,-11 H400000v${40 + extraViniculum}H1017.7 +s-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9 +c-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200 +c0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26 +s76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104, +606zM${1001 + extraViniculum} ${hLinePad}h400000v${40 + extraViniculum}H1017.7z`; +}; + +const sqrtTall = function sqrtTall(extraViniculum, hLinePad, viewBoxHeight) { + // sqrtTall is from glyph U23B7 in the font KaTeX_Size4-Regular + // One path edge has a variable length. It runs vertically from the viniculumn + // to a point near (14 units) the bottom of the surd. The viniculum + // is normally 40 units thick. So the length of the line in question is: + const vertSegment = viewBoxHeight - 54 - hLinePad - extraViniculum; + return `M702 ${extraViniculum + hLinePad}H400000${40 + extraViniculum} +H742v${vertSegment}l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1 +h-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170 +c-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667 +219 661 l218 661zM702 ${hLinePad}H400000v${40 + extraViniculum}H742z`; +}; + +const sqrtPath = function sqrtPath(size, extraViniculum, viewBoxHeight) { + extraViniculum = 1000 * extraViniculum; // Convert from document ems to viewBox. + + let path = ""; + + switch (size) { + case "sqrtMain": + path = sqrtMain(extraViniculum, hLinePad); + break; + + case "sqrtSize1": + path = sqrtSize1(extraViniculum, hLinePad); + break; + + case "sqrtSize2": + path = sqrtSize2(extraViniculum, hLinePad); + break; + + case "sqrtSize3": + path = sqrtSize3(extraViniculum, hLinePad); + break; + + case "sqrtSize4": + path = sqrtSize4(extraViniculum, hLinePad); + break; + + case "sqrtTall": + path = sqrtTall(extraViniculum, hLinePad, viewBoxHeight); + } + + return path; +}; +const path = { + // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main + doubleleftarrow: `M262 157 +l10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3 + 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28 + 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5 +c2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5 + 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87 +-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7 +-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z +m8 0v40h399730v-40zm0 194v40h399730v-40z`, + // doublerightarrow is from glyph U+21D2 in font KaTeX Main + doublerightarrow: `M399738 392l +-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5 + 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88 +-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68 +-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18 +-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782 +c-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3 +-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z`, + // leftarrow is from glyph U+2190 in font KaTeX Main + leftarrow: `M400000 241H110l3-3c68.7-52.7 113.7-120 + 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8 +-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247 +c-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208 + 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3 + 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202 + l-3-3h399890zM100 241v40h399900v-40z`, + // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular + leftbrace: `M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117 +-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7 + 5-6 9-10 13-.7 1-7.3 1-20 1H6z`, + leftbraceunder: `M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13 + 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688 + 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7 +-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z`, + // overgroup is from the MnSymbol package (public domain) + leftgroup: `M400000 80 +H435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0 + 435 0h399565z`, + leftgroupunder: `M400000 262 +H435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219 + 435 219h399565z`, + // Harpoons are from glyph U+21BD in font KaTeX Main + leftharpoon: `M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3 +-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5 +-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7 +-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z`, + leftharpoonplus: `M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5 + 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3 +-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7 +-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z +m0 0v40h400000v-40z`, + leftharpoondown: `M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333 + 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5 + 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667 +-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z`, + leftharpoondownplus: `M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12 + 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7 +-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0 +v40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z`, + // hook is from glyph U+21A9 in font KaTeX Main + lefthook: `M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5 +-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3 +-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21 + 71.5 23h399859zM103 281v-40h399897v40z`, + leftlinesegment: `M40 281 V428 H0 V94 H40 V241 H400000 v40z +M40 281 V428 H0 V94 H40 V241 H400000 v40z`, + leftmapsto: `M40 281 V448H0V74H40V241H400000v40z +M40 281 V448H0V74H40V241H400000v40z`, + // tofrom is from glyph U+21C4 in font KaTeX AMS Regular + leftToFrom: `M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23 +-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8 +c28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3 + 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z`, + longequal: `M0 50 h400000 v40H0z m0 194h40000v40H0z +M0 50 h400000 v40H0z m0 194h40000v40H0z`, + midbrace: `M200428 334 +c-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14 +-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7 + 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11 + 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z`, + midbraceunder: `M199572 214 +c100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14 + 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3 + 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0 +-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z`, + oiintSize1: `M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6 +-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z +m368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8 +60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z`, + oiintSize2: `M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8 +-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z +m502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2 +c0 110 84 276 504 276s502.4-166 502.4-276z`, + oiiintSize1: `M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6 +-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z +m525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0 +85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z`, + oiiintSize2: `M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8 +-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z +m770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1 +c0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z`, + rightarrow: `M0 241v40h399891c-47.3 35.3-84 78-110 128 +-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 + 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 + 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85 +-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 + 151.7 139 205zm0 0v40h399900v-40z`, + rightbrace: `M400000 542l +-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5 +s-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1 +c124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z`, + rightbraceunder: `M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3 + 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237 +-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z`, + rightgroup: `M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0 + 3-1 3-3v-38c-76-158-257-219-435-219H0z`, + rightgroupunder: `M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18 + 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z`, + rightharpoon: `M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3 +-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2 +-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 + 69.2 92 94.5zm0 0v40h399900v-40z`, + rightharpoonplus: `M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11 +-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7 + 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z +m0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z`, + rightharpoondown: `M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8 + 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5 +-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95 +-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z`, + rightharpoondownplus: `M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8 + 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 + 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3 +-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z +m0-194v40h400000v-40zm0 0v40h400000v-40z`, + righthook: `M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3 + 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0 +-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21 + 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z`, + rightlinesegment: `M399960 241 V94 h40 V428 h-40 V281 H0 v-40z +M399960 241 V94 h40 V428 h-40 V281 H0 v-40z`, + rightToFrom: `M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23 + 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32 +-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142 +-167z M100 147v40h399900v-40zM0 341v40h399900v-40z`, + // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular + twoheadleftarrow: `M0 167c68 40 + 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69 +-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3 +-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19 +-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101 + 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z`, + twoheadrightarrow: `M400000 167 +c-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3 + 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42 + 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333 +-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70 + 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z`, + // tilde1 is a modified version of a glyph from the MnSymbol package + tilde1: `M200 55.538c-77 0-168 73.953-177 73.953-3 0-7 +-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0 + 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0 + 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128 +-68.267.847-113-73.952-191-73.952z`, + // ditto tilde2, tilde3, & tilde4 + tilde2: `M344 55.266c-142 0-300.638 81.316-311.5 86.418 +-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9 + 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114 +c1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751 + 181.476 676 181.476c-149 0-189-126.21-332-126.21z`, + tilde3: `M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457 +-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0 + 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697 + 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696 + -338 0-409-156.573-744-156.573z`, + tilde4: `M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345 +-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409 + 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9 + 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409 + -175.236-744-175.236z`, + // vec is from glyph U+20D7 in font KaTeX Main + vec: `M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5 +3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11 +10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63 +-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1 +-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59 +H213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359 +c-16-25.333-24-45-24-59z`, + // widehat1 is a modified version of a glyph from the MnSymbol package + widehat1: `M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22 +c-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z`, + // ditto widehat2, widehat3, & widehat4 + widehat2: `M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`, + widehat3: `M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`, + widehat4: `M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`, + // widecheck paths are all inverted versions of widehat + widecheck1: `M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1, +-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z`, + widecheck2: `M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`, + widecheck3: `M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`, + widecheck4: `M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`, + // The next ten paths support reaction arrows from the mhchem package. + // Arrows for \ce{<-->} are offset from xAxis by 0.22ex, per mhchem in LaTeX + // baraboveleftarrow is mostly from from glyph U+2190 in font KaTeX Main + baraboveleftarrow: `M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202 +c4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5 +c-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130 +s-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47 +121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6 +s2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11 +c0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z +M100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z`, + // rightarrowabovebar is mostly from glyph U+2192, KaTeX Main + rightarrowabovebar: `M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32 +-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 +13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39 +-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5 +-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 +151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z`, + // The short left harpoon has 0.5em (i.e. 500 units) kern on the left end. + // Ref from mhchem.sty: \rlap{\raisebox{-.22ex}{$\kern0.5em + baraboveshortleftharpoon: `M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17 +c2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21 +c-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40 +c-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z +M0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z`, + rightharpoonaboveshortbar: `M0,241 l0,40c399126,0,399993,0,399993,0 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z +M0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z`, + shortbaraboveleftharpoon: `M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9, +1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7, +-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z +M93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z`, + shortrightharpoonabovebar: `M53,241l0,40c398570,0,399437,0,399437,0 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z +M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z` +}; + +/** + * This node represents a document fragment, which contains elements, but when + * placed into the DOM doesn't have any representation itself. It only contains + * children and doesn't have any DOM node properties. + */ +class DocumentFragment { + // HtmlDomNode + // Never used; needed for satisfying interface. + constructor(children) { + this.children = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.maxFontSize = void 0; + this.style = void 0; + this.children = children; + this.classes = []; + this.height = 0; + this.depth = 0; + this.maxFontSize = 0; + this.style = {}; + } + + hasClass(className) { + return utils.contains(this.classes, className); + } + /** Convert the fragment into a node. */ + + + toNode() { + const frag = document.createDocumentFragment(); + + for (let i = 0; i < this.children.length; i++) { + frag.appendChild(this.children[i].toNode()); + } + + return frag; + } + /** Convert the fragment into HTML markup. */ + + + toMarkup() { + let markup = ""; // Simply concatenate the markup for the children together. + + for (let i = 0; i < this.children.length; i++) { + markup += this.children[i].toMarkup(); + } + + return markup; + } + /** + * Converts the math node into a string, similar to innerText. Applies to + * MathDomNode's only. + */ + + + toText() { + // To avoid this, we would subclass documentFragment separately for + // MathML, but polyfills for subclassing is expensive per PR 1469. + // $FlowFixMe: Only works for ChildType = MathDomNode. + const toText = child => child.toText(); + + return this.children.map(toText).join(""); + } + +} + +/** + * These objects store the data about the DOM nodes we create, as well as some + * extra data. They can then be transformed into real DOM nodes with the + * `toNode` function or HTML markup using `toMarkup`. They are useful for both + * storing extra properties on the nodes, as well as providing a way to easily + * work with the DOM. + * + * Similar functions for working with MathML nodes exist in mathMLTree.js. + * + * TODO: refactor `span` and `anchor` into common superclass when + * target environments support class inheritance + */ + +/** + * Create an HTML className based on a list of classes. In addition to joining + * with spaces, we also remove empty classes. + */ +const createClass = function createClass(classes) { + return classes.filter(cls => cls).join(" "); +}; + +const initNode = function initNode(classes, options, style) { + this.classes = classes || []; + this.attributes = {}; + this.height = 0; + this.depth = 0; + this.maxFontSize = 0; + this.style = style || {}; + + if (options) { + if (options.style.isTight()) { + this.classes.push("mtight"); + } + + const color = options.getColor(); + + if (color) { + this.style.color = color; + } + } +}; +/** + * Convert into an HTML node + */ + + +const toNode = function toNode(tagName) { + const node = document.createElement(tagName); // Apply the class + + node.className = createClass(this.classes); // Apply inline styles + + for (const style in this.style) { + if (this.style.hasOwnProperty(style)) { + // $FlowFixMe Flow doesn't seem to understand span.style's type. + node.style[style] = this.style[style]; + } + } // Apply attributes + + + for (const attr in this.attributes) { + if (this.attributes.hasOwnProperty(attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } // Append the children, also as HTML nodes + + + for (let i = 0; i < this.children.length; i++) { + node.appendChild(this.children[i].toNode()); + } + + return node; +}; +/** + * Convert into an HTML markup string + */ + + +const toMarkup = function toMarkup(tagName) { + let markup = `<${tagName}`; // Add the class + + if (this.classes.length) { + markup += ` class="${utils.escape(createClass(this.classes))}"`; + } + + let styles = ""; // Add the styles, after hyphenation + + for (const style in this.style) { + if (this.style.hasOwnProperty(style)) { + styles += `${utils.hyphenate(style)}:${this.style[style]};`; + } + } + + if (styles) { + markup += ` style="${utils.escape(styles)}"`; + } // Add the attributes + + + for (const attr in this.attributes) { + if (this.attributes.hasOwnProperty(attr)) { + markup += ` ${attr}="${utils.escape(this.attributes[attr])}"`; + } + } + + markup += ">"; // Add the markup of the children, also as markup + + for (let i = 0; i < this.children.length; i++) { + markup += this.children[i].toMarkup(); + } + + markup += ``; + return markup; +}; // Making the type below exact with all optional fields doesn't work due to +// - https://github.com/facebook/flow/issues/4582 +// - https://github.com/facebook/flow/issues/5688 +// However, since *all* fields are optional, $Shape<> works as suggested in 5688 +// above. +// This type does not include all CSS properties. Additional properties should +// be added as needed. + + +/** + * This node represents a span node, with a className, a list of children, and + * an inline style. It also contains information about its height, depth, and + * maxFontSize. + * + * Represents two types with different uses: SvgSpan to wrap an SVG and DomSpan + * otherwise. This typesafety is important when HTML builders access a span's + * children. + */ +class Span { + constructor(classes, children, options, style) { + this.children = void 0; + this.attributes = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.width = void 0; + this.maxFontSize = void 0; + this.style = void 0; + initNode.call(this, classes, options, style); + this.children = children || []; + } + /** + * Sets an arbitrary attribute on the span. Warning: use this wisely. Not + * all browsers support attributes the same, and having too many custom + * attributes is probably bad. + */ + + + setAttribute(attribute, value) { + this.attributes[attribute] = value; + } + + hasClass(className) { + return utils.contains(this.classes, className); + } + + toNode() { + return toNode.call(this, "span"); + } + + toMarkup() { + return toMarkup.call(this, "span"); + } + +} +/** + * This node represents an anchor () element with a hyperlink. See `span` + * for further details. + */ + +class Anchor { + constructor(href, classes, children, options) { + this.children = void 0; + this.attributes = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.maxFontSize = void 0; + this.style = void 0; + initNode.call(this, classes, options); + this.children = children || []; + this.setAttribute('href', href); + } + + setAttribute(attribute, value) { + this.attributes[attribute] = value; + } + + hasClass(className) { + return utils.contains(this.classes, className); + } + + toNode() { + return toNode.call(this, "a"); + } + + toMarkup() { + return toMarkup.call(this, "a"); + } + +} +/** + * This node represents an image embed () element. + */ + +class Img { + constructor(src, alt, style) { + this.src = void 0; + this.alt = void 0; + this.classes = void 0; + this.height = void 0; + this.depth = void 0; + this.maxFontSize = void 0; + this.style = void 0; + this.alt = alt; + this.src = src; + this.classes = ["mord"]; + this.style = style; + } + + hasClass(className) { + return utils.contains(this.classes, className); + } + + toNode() { + const node = document.createElement("img"); + node.src = this.src; + node.alt = this.alt; + node.className = "mord"; // Apply inline styles + + for (const style in this.style) { + if (this.style.hasOwnProperty(style)) { + // $FlowFixMe + node.style[style] = this.style[style]; + } + } + + return node; + } + + toMarkup() { + let markup = `${this.alt} 0) { + span = document.createElement("span"); + span.style.marginRight = this.italic + "em"; + } + + if (this.classes.length > 0) { + span = span || document.createElement("span"); + span.className = createClass(this.classes); + } + + for (const style in this.style) { + if (this.style.hasOwnProperty(style)) { + span = span || document.createElement("span"); // $FlowFixMe Flow doesn't seem to understand span.style's type. + + span.style[style] = this.style[style]; + } + } + + if (span) { + span.appendChild(node); + return span; + } else { + return node; + } + } + /** + * Creates markup for a symbol node. + */ + + + toMarkup() { + // TODO(alpert): More duplication than I'd like from + // span.prototype.toMarkup and symbolNode.prototype.toNode... + let needsSpan = false; + let markup = " 0) { + styles += "margin-right:" + this.italic + "em;"; + } + + for (const style in this.style) { + if (this.style.hasOwnProperty(style)) { + styles += utils.hyphenate(style) + ":" + this.style[style] + ";"; + } + } + + if (styles) { + needsSpan = true; + markup += " style=\"" + utils.escape(styles) + "\""; + } + + const escaped = utils.escape(this.text); + + if (needsSpan) { + markup += ">"; + markup += escaped; + markup += ""; + return markup; + } else { + return escaped; + } + } + +} +/** + * SVG nodes are used to render stretchy wide elements. + */ + +class SvgNode { + constructor(children, attributes) { + this.children = void 0; + this.attributes = void 0; + this.children = children || []; + this.attributes = attributes || {}; + } + + toNode() { + const svgNS = "http://www.w3.org/2000/svg"; + const node = document.createElementNS(svgNS, "svg"); // Apply attributes + + for (const attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } + + for (let i = 0; i < this.children.length; i++) { + node.appendChild(this.children[i].toNode()); + } + + return node; + } + + toMarkup() { + let markup = "`; + } else { + return ``; + } + } + +} +class LineNode { + constructor(attributes) { + this.attributes = void 0; + this.attributes = attributes || {}; + } + + toNode() { + const svgNS = "http://www.w3.org/2000/svg"; + const node = document.createElementNS(svgNS, "line"); // Apply attributes + + for (const attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } + + return node; + } + + toMarkup() { + let markup = " but got ${String(group)}.`); + } +} + +// This file is GENERATED by buildMetrics.sh. DO NOT MODIFY. +var metricMap = { + "AMS-Regular": { + "65": [0, 0.68889, 0, 0, 0.72222], + "66": [0, 0.68889, 0, 0, 0.66667], + "67": [0, 0.68889, 0, 0, 0.72222], + "68": [0, 0.68889, 0, 0, 0.72222], + "69": [0, 0.68889, 0, 0, 0.66667], + "70": [0, 0.68889, 0, 0, 0.61111], + "71": [0, 0.68889, 0, 0, 0.77778], + "72": [0, 0.68889, 0, 0, 0.77778], + "73": [0, 0.68889, 0, 0, 0.38889], + "74": [0.16667, 0.68889, 0, 0, 0.5], + "75": [0, 0.68889, 0, 0, 0.77778], + "76": [0, 0.68889, 0, 0, 0.66667], + "77": [0, 0.68889, 0, 0, 0.94445], + "78": [0, 0.68889, 0, 0, 0.72222], + "79": [0.16667, 0.68889, 0, 0, 0.77778], + "80": [0, 0.68889, 0, 0, 0.61111], + "81": [0.16667, 0.68889, 0, 0, 0.77778], + "82": [0, 0.68889, 0, 0, 0.72222], + "83": [0, 0.68889, 0, 0, 0.55556], + "84": [0, 0.68889, 0, 0, 0.66667], + "85": [0, 0.68889, 0, 0, 0.72222], + "86": [0, 0.68889, 0, 0, 0.72222], + "87": [0, 0.68889, 0, 0, 1.0], + "88": [0, 0.68889, 0, 0, 0.72222], + "89": [0, 0.68889, 0, 0, 0.72222], + "90": [0, 0.68889, 0, 0, 0.66667], + "107": [0, 0.68889, 0, 0, 0.55556], + "165": [0, 0.675, 0.025, 0, 0.75], + "174": [0.15559, 0.69224, 0, 0, 0.94666], + "240": [0, 0.68889, 0, 0, 0.55556], + "295": [0, 0.68889, 0, 0, 0.54028], + "710": [0, 0.825, 0, 0, 2.33334], + "732": [0, 0.9, 0, 0, 2.33334], + "770": [0, 0.825, 0, 0, 2.33334], + "771": [0, 0.9, 0, 0, 2.33334], + "989": [0.08167, 0.58167, 0, 0, 0.77778], + "1008": [0, 0.43056, 0.04028, 0, 0.66667], + "8245": [0, 0.54986, 0, 0, 0.275], + "8463": [0, 0.68889, 0, 0, 0.54028], + "8487": [0, 0.68889, 0, 0, 0.72222], + "8498": [0, 0.68889, 0, 0, 0.55556], + "8502": [0, 0.68889, 0, 0, 0.66667], + "8503": [0, 0.68889, 0, 0, 0.44445], + "8504": [0, 0.68889, 0, 0, 0.66667], + "8513": [0, 0.68889, 0, 0, 0.63889], + "8592": [-0.03598, 0.46402, 0, 0, 0.5], + "8594": [-0.03598, 0.46402, 0, 0, 0.5], + "8602": [-0.13313, 0.36687, 0, 0, 1.0], + "8603": [-0.13313, 0.36687, 0, 0, 1.0], + "8606": [0.01354, 0.52239, 0, 0, 1.0], + "8608": [0.01354, 0.52239, 0, 0, 1.0], + "8610": [0.01354, 0.52239, 0, 0, 1.11111], + "8611": [0.01354, 0.52239, 0, 0, 1.11111], + "8619": [0, 0.54986, 0, 0, 1.0], + "8620": [0, 0.54986, 0, 0, 1.0], + "8621": [-0.13313, 0.37788, 0, 0, 1.38889], + "8622": [-0.13313, 0.36687, 0, 0, 1.0], + "8624": [0, 0.69224, 0, 0, 0.5], + "8625": [0, 0.69224, 0, 0, 0.5], + "8630": [0, 0.43056, 0, 0, 1.0], + "8631": [0, 0.43056, 0, 0, 1.0], + "8634": [0.08198, 0.58198, 0, 0, 0.77778], + "8635": [0.08198, 0.58198, 0, 0, 0.77778], + "8638": [0.19444, 0.69224, 0, 0, 0.41667], + "8639": [0.19444, 0.69224, 0, 0, 0.41667], + "8642": [0.19444, 0.69224, 0, 0, 0.41667], + "8643": [0.19444, 0.69224, 0, 0, 0.41667], + "8644": [0.1808, 0.675, 0, 0, 1.0], + "8646": [0.1808, 0.675, 0, 0, 1.0], + "8647": [0.1808, 0.675, 0, 0, 1.0], + "8648": [0.19444, 0.69224, 0, 0, 0.83334], + "8649": [0.1808, 0.675, 0, 0, 1.0], + "8650": [0.19444, 0.69224, 0, 0, 0.83334], + "8651": [0.01354, 0.52239, 0, 0, 1.0], + "8652": [0.01354, 0.52239, 0, 0, 1.0], + "8653": [-0.13313, 0.36687, 0, 0, 1.0], + "8654": [-0.13313, 0.36687, 0, 0, 1.0], + "8655": [-0.13313, 0.36687, 0, 0, 1.0], + "8666": [0.13667, 0.63667, 0, 0, 1.0], + "8667": [0.13667, 0.63667, 0, 0, 1.0], + "8669": [-0.13313, 0.37788, 0, 0, 1.0], + "8672": [-0.064, 0.437, 0, 0, 1.334], + "8674": [-0.064, 0.437, 0, 0, 1.334], + "8705": [0, 0.825, 0, 0, 0.5], + "8708": [0, 0.68889, 0, 0, 0.55556], + "8709": [0.08167, 0.58167, 0, 0, 0.77778], + "8717": [0, 0.43056, 0, 0, 0.42917], + "8722": [-0.03598, 0.46402, 0, 0, 0.5], + "8724": [0.08198, 0.69224, 0, 0, 0.77778], + "8726": [0.08167, 0.58167, 0, 0, 0.77778], + "8733": [0, 0.69224, 0, 0, 0.77778], + "8736": [0, 0.69224, 0, 0, 0.72222], + "8737": [0, 0.69224, 0, 0, 0.72222], + "8738": [0.03517, 0.52239, 0, 0, 0.72222], + "8739": [0.08167, 0.58167, 0, 0, 0.22222], + "8740": [0.25142, 0.74111, 0, 0, 0.27778], + "8741": [0.08167, 0.58167, 0, 0, 0.38889], + "8742": [0.25142, 0.74111, 0, 0, 0.5], + "8756": [0, 0.69224, 0, 0, 0.66667], + "8757": [0, 0.69224, 0, 0, 0.66667], + "8764": [-0.13313, 0.36687, 0, 0, 0.77778], + "8765": [-0.13313, 0.37788, 0, 0, 0.77778], + "8769": [-0.13313, 0.36687, 0, 0, 0.77778], + "8770": [-0.03625, 0.46375, 0, 0, 0.77778], + "8774": [0.30274, 0.79383, 0, 0, 0.77778], + "8776": [-0.01688, 0.48312, 0, 0, 0.77778], + "8778": [0.08167, 0.58167, 0, 0, 0.77778], + "8782": [0.06062, 0.54986, 0, 0, 0.77778], + "8783": [0.06062, 0.54986, 0, 0, 0.77778], + "8785": [0.08198, 0.58198, 0, 0, 0.77778], + "8786": [0.08198, 0.58198, 0, 0, 0.77778], + "8787": [0.08198, 0.58198, 0, 0, 0.77778], + "8790": [0, 0.69224, 0, 0, 0.77778], + "8791": [0.22958, 0.72958, 0, 0, 0.77778], + "8796": [0.08198, 0.91667, 0, 0, 0.77778], + "8806": [0.25583, 0.75583, 0, 0, 0.77778], + "8807": [0.25583, 0.75583, 0, 0, 0.77778], + "8808": [0.25142, 0.75726, 0, 0, 0.77778], + "8809": [0.25142, 0.75726, 0, 0, 0.77778], + "8812": [0.25583, 0.75583, 0, 0, 0.5], + "8814": [0.20576, 0.70576, 0, 0, 0.77778], + "8815": [0.20576, 0.70576, 0, 0, 0.77778], + "8816": [0.30274, 0.79383, 0, 0, 0.77778], + "8817": [0.30274, 0.79383, 0, 0, 0.77778], + "8818": [0.22958, 0.72958, 0, 0, 0.77778], + "8819": [0.22958, 0.72958, 0, 0, 0.77778], + "8822": [0.1808, 0.675, 0, 0, 0.77778], + "8823": [0.1808, 0.675, 0, 0, 0.77778], + "8828": [0.13667, 0.63667, 0, 0, 0.77778], + "8829": [0.13667, 0.63667, 0, 0, 0.77778], + "8830": [0.22958, 0.72958, 0, 0, 0.77778], + "8831": [0.22958, 0.72958, 0, 0, 0.77778], + "8832": [0.20576, 0.70576, 0, 0, 0.77778], + "8833": [0.20576, 0.70576, 0, 0, 0.77778], + "8840": [0.30274, 0.79383, 0, 0, 0.77778], + "8841": [0.30274, 0.79383, 0, 0, 0.77778], + "8842": [0.13597, 0.63597, 0, 0, 0.77778], + "8843": [0.13597, 0.63597, 0, 0, 0.77778], + "8847": [0.03517, 0.54986, 0, 0, 0.77778], + "8848": [0.03517, 0.54986, 0, 0, 0.77778], + "8858": [0.08198, 0.58198, 0, 0, 0.77778], + "8859": [0.08198, 0.58198, 0, 0, 0.77778], + "8861": [0.08198, 0.58198, 0, 0, 0.77778], + "8862": [0, 0.675, 0, 0, 0.77778], + "8863": [0, 0.675, 0, 0, 0.77778], + "8864": [0, 0.675, 0, 0, 0.77778], + "8865": [0, 0.675, 0, 0, 0.77778], + "8872": [0, 0.69224, 0, 0, 0.61111], + "8873": [0, 0.69224, 0, 0, 0.72222], + "8874": [0, 0.69224, 0, 0, 0.88889], + "8876": [0, 0.68889, 0, 0, 0.61111], + "8877": [0, 0.68889, 0, 0, 0.61111], + "8878": [0, 0.68889, 0, 0, 0.72222], + "8879": [0, 0.68889, 0, 0, 0.72222], + "8882": [0.03517, 0.54986, 0, 0, 0.77778], + "8883": [0.03517, 0.54986, 0, 0, 0.77778], + "8884": [0.13667, 0.63667, 0, 0, 0.77778], + "8885": [0.13667, 0.63667, 0, 0, 0.77778], + "8888": [0, 0.54986, 0, 0, 1.11111], + "8890": [0.19444, 0.43056, 0, 0, 0.55556], + "8891": [0.19444, 0.69224, 0, 0, 0.61111], + "8892": [0.19444, 0.69224, 0, 0, 0.61111], + "8901": [0, 0.54986, 0, 0, 0.27778], + "8903": [0.08167, 0.58167, 0, 0, 0.77778], + "8905": [0.08167, 0.58167, 0, 0, 0.77778], + "8906": [0.08167, 0.58167, 0, 0, 0.77778], + "8907": [0, 0.69224, 0, 0, 0.77778], + "8908": [0, 0.69224, 0, 0, 0.77778], + "8909": [-0.03598, 0.46402, 0, 0, 0.77778], + "8910": [0, 0.54986, 0, 0, 0.76042], + "8911": [0, 0.54986, 0, 0, 0.76042], + "8912": [0.03517, 0.54986, 0, 0, 0.77778], + "8913": [0.03517, 0.54986, 0, 0, 0.77778], + "8914": [0, 0.54986, 0, 0, 0.66667], + "8915": [0, 0.54986, 0, 0, 0.66667], + "8916": [0, 0.69224, 0, 0, 0.66667], + "8918": [0.0391, 0.5391, 0, 0, 0.77778], + "8919": [0.0391, 0.5391, 0, 0, 0.77778], + "8920": [0.03517, 0.54986, 0, 0, 1.33334], + "8921": [0.03517, 0.54986, 0, 0, 1.33334], + "8922": [0.38569, 0.88569, 0, 0, 0.77778], + "8923": [0.38569, 0.88569, 0, 0, 0.77778], + "8926": [0.13667, 0.63667, 0, 0, 0.77778], + "8927": [0.13667, 0.63667, 0, 0, 0.77778], + "8928": [0.30274, 0.79383, 0, 0, 0.77778], + "8929": [0.30274, 0.79383, 0, 0, 0.77778], + "8934": [0.23222, 0.74111, 0, 0, 0.77778], + "8935": [0.23222, 0.74111, 0, 0, 0.77778], + "8936": [0.23222, 0.74111, 0, 0, 0.77778], + "8937": [0.23222, 0.74111, 0, 0, 0.77778], + "8938": [0.20576, 0.70576, 0, 0, 0.77778], + "8939": [0.20576, 0.70576, 0, 0, 0.77778], + "8940": [0.30274, 0.79383, 0, 0, 0.77778], + "8941": [0.30274, 0.79383, 0, 0, 0.77778], + "8994": [0.19444, 0.69224, 0, 0, 0.77778], + "8995": [0.19444, 0.69224, 0, 0, 0.77778], + "9416": [0.15559, 0.69224, 0, 0, 0.90222], + "9484": [0, 0.69224, 0, 0, 0.5], + "9488": [0, 0.69224, 0, 0, 0.5], + "9492": [0, 0.37788, 0, 0, 0.5], + "9496": [0, 0.37788, 0, 0, 0.5], + "9585": [0.19444, 0.68889, 0, 0, 0.88889], + "9586": [0.19444, 0.74111, 0, 0, 0.88889], + "9632": [0, 0.675, 0, 0, 0.77778], + "9633": [0, 0.675, 0, 0, 0.77778], + "9650": [0, 0.54986, 0, 0, 0.72222], + "9651": [0, 0.54986, 0, 0, 0.72222], + "9654": [0.03517, 0.54986, 0, 0, 0.77778], + "9660": [0, 0.54986, 0, 0, 0.72222], + "9661": [0, 0.54986, 0, 0, 0.72222], + "9664": [0.03517, 0.54986, 0, 0, 0.77778], + "9674": [0.11111, 0.69224, 0, 0, 0.66667], + "9733": [0.19444, 0.69224, 0, 0, 0.94445], + "10003": [0, 0.69224, 0, 0, 0.83334], + "10016": [0, 0.69224, 0, 0, 0.83334], + "10731": [0.11111, 0.69224, 0, 0, 0.66667], + "10846": [0.19444, 0.75583, 0, 0, 0.61111], + "10877": [0.13667, 0.63667, 0, 0, 0.77778], + "10878": [0.13667, 0.63667, 0, 0, 0.77778], + "10885": [0.25583, 0.75583, 0, 0, 0.77778], + "10886": [0.25583, 0.75583, 0, 0, 0.77778], + "10887": [0.13597, 0.63597, 0, 0, 0.77778], + "10888": [0.13597, 0.63597, 0, 0, 0.77778], + "10889": [0.26167, 0.75726, 0, 0, 0.77778], + "10890": [0.26167, 0.75726, 0, 0, 0.77778], + "10891": [0.48256, 0.98256, 0, 0, 0.77778], + "10892": [0.48256, 0.98256, 0, 0, 0.77778], + "10901": [0.13667, 0.63667, 0, 0, 0.77778], + "10902": [0.13667, 0.63667, 0, 0, 0.77778], + "10933": [0.25142, 0.75726, 0, 0, 0.77778], + "10934": [0.25142, 0.75726, 0, 0, 0.77778], + "10935": [0.26167, 0.75726, 0, 0, 0.77778], + "10936": [0.26167, 0.75726, 0, 0, 0.77778], + "10937": [0.26167, 0.75726, 0, 0, 0.77778], + "10938": [0.26167, 0.75726, 0, 0, 0.77778], + "10949": [0.25583, 0.75583, 0, 0, 0.77778], + "10950": [0.25583, 0.75583, 0, 0, 0.77778], + "10955": [0.28481, 0.79383, 0, 0, 0.77778], + "10956": [0.28481, 0.79383, 0, 0, 0.77778], + "57350": [0.08167, 0.58167, 0, 0, 0.22222], + "57351": [0.08167, 0.58167, 0, 0, 0.38889], + "57352": [0.08167, 0.58167, 0, 0, 0.77778], + "57353": [0, 0.43056, 0.04028, 0, 0.66667], + "57356": [0.25142, 0.75726, 0, 0, 0.77778], + "57357": [0.25142, 0.75726, 0, 0, 0.77778], + "57358": [0.41951, 0.91951, 0, 0, 0.77778], + "57359": [0.30274, 0.79383, 0, 0, 0.77778], + "57360": [0.30274, 0.79383, 0, 0, 0.77778], + "57361": [0.41951, 0.91951, 0, 0, 0.77778], + "57366": [0.25142, 0.75726, 0, 0, 0.77778], + "57367": [0.25142, 0.75726, 0, 0, 0.77778], + "57368": [0.25142, 0.75726, 0, 0, 0.77778], + "57369": [0.25142, 0.75726, 0, 0, 0.77778], + "57370": [0.13597, 0.63597, 0, 0, 0.77778], + "57371": [0.13597, 0.63597, 0, 0, 0.77778] + }, + "Caligraphic-Regular": { + "48": [0, 0.43056, 0, 0, 0.5], + "49": [0, 0.43056, 0, 0, 0.5], + "50": [0, 0.43056, 0, 0, 0.5], + "51": [0.19444, 0.43056, 0, 0, 0.5], + "52": [0.19444, 0.43056, 0, 0, 0.5], + "53": [0.19444, 0.43056, 0, 0, 0.5], + "54": [0, 0.64444, 0, 0, 0.5], + "55": [0.19444, 0.43056, 0, 0, 0.5], + "56": [0, 0.64444, 0, 0, 0.5], + "57": [0.19444, 0.43056, 0, 0, 0.5], + "65": [0, 0.68333, 0, 0.19445, 0.79847], + "66": [0, 0.68333, 0.03041, 0.13889, 0.65681], + "67": [0, 0.68333, 0.05834, 0.13889, 0.52653], + "68": [0, 0.68333, 0.02778, 0.08334, 0.77139], + "69": [0, 0.68333, 0.08944, 0.11111, 0.52778], + "70": [0, 0.68333, 0.09931, 0.11111, 0.71875], + "71": [0.09722, 0.68333, 0.0593, 0.11111, 0.59487], + "72": [0, 0.68333, 0.00965, 0.11111, 0.84452], + "73": [0, 0.68333, 0.07382, 0, 0.54452], + "74": [0.09722, 0.68333, 0.18472, 0.16667, 0.67778], + "75": [0, 0.68333, 0.01445, 0.05556, 0.76195], + "76": [0, 0.68333, 0, 0.13889, 0.68972], + "77": [0, 0.68333, 0, 0.13889, 1.2009], + "78": [0, 0.68333, 0.14736, 0.08334, 0.82049], + "79": [0, 0.68333, 0.02778, 0.11111, 0.79611], + "80": [0, 0.68333, 0.08222, 0.08334, 0.69556], + "81": [0.09722, 0.68333, 0, 0.11111, 0.81667], + "82": [0, 0.68333, 0, 0.08334, 0.8475], + "83": [0, 0.68333, 0.075, 0.13889, 0.60556], + "84": [0, 0.68333, 0.25417, 0, 0.54464], + "85": [0, 0.68333, 0.09931, 0.08334, 0.62583], + "86": [0, 0.68333, 0.08222, 0, 0.61278], + "87": [0, 0.68333, 0.08222, 0.08334, 0.98778], + "88": [0, 0.68333, 0.14643, 0.13889, 0.7133], + "89": [0.09722, 0.68333, 0.08222, 0.08334, 0.66834], + "90": [0, 0.68333, 0.07944, 0.13889, 0.72473] + }, + "Fraktur-Regular": { + "33": [0, 0.69141, 0, 0, 0.29574], + "34": [0, 0.69141, 0, 0, 0.21471], + "38": [0, 0.69141, 0, 0, 0.73786], + "39": [0, 0.69141, 0, 0, 0.21201], + "40": [0.24982, 0.74947, 0, 0, 0.38865], + "41": [0.24982, 0.74947, 0, 0, 0.38865], + "42": [0, 0.62119, 0, 0, 0.27764], + "43": [0.08319, 0.58283, 0, 0, 0.75623], + "44": [0, 0.10803, 0, 0, 0.27764], + "45": [0.08319, 0.58283, 0, 0, 0.75623], + "46": [0, 0.10803, 0, 0, 0.27764], + "47": [0.24982, 0.74947, 0, 0, 0.50181], + "48": [0, 0.47534, 0, 0, 0.50181], + "49": [0, 0.47534, 0, 0, 0.50181], + "50": [0, 0.47534, 0, 0, 0.50181], + "51": [0.18906, 0.47534, 0, 0, 0.50181], + "52": [0.18906, 0.47534, 0, 0, 0.50181], + "53": [0.18906, 0.47534, 0, 0, 0.50181], + "54": [0, 0.69141, 0, 0, 0.50181], + "55": [0.18906, 0.47534, 0, 0, 0.50181], + "56": [0, 0.69141, 0, 0, 0.50181], + "57": [0.18906, 0.47534, 0, 0, 0.50181], + "58": [0, 0.47534, 0, 0, 0.21606], + "59": [0.12604, 0.47534, 0, 0, 0.21606], + "61": [-0.13099, 0.36866, 0, 0, 0.75623], + "63": [0, 0.69141, 0, 0, 0.36245], + "65": [0, 0.69141, 0, 0, 0.7176], + "66": [0, 0.69141, 0, 0, 0.88397], + "67": [0, 0.69141, 0, 0, 0.61254], + "68": [0, 0.69141, 0, 0, 0.83158], + "69": [0, 0.69141, 0, 0, 0.66278], + "70": [0.12604, 0.69141, 0, 0, 0.61119], + "71": [0, 0.69141, 0, 0, 0.78539], + "72": [0.06302, 0.69141, 0, 0, 0.7203], + "73": [0, 0.69141, 0, 0, 0.55448], + "74": [0.12604, 0.69141, 0, 0, 0.55231], + "75": [0, 0.69141, 0, 0, 0.66845], + "76": [0, 0.69141, 0, 0, 0.66602], + "77": [0, 0.69141, 0, 0, 1.04953], + "78": [0, 0.69141, 0, 0, 0.83212], + "79": [0, 0.69141, 0, 0, 0.82699], + "80": [0.18906, 0.69141, 0, 0, 0.82753], + "81": [0.03781, 0.69141, 0, 0, 0.82699], + "82": [0, 0.69141, 0, 0, 0.82807], + "83": [0, 0.69141, 0, 0, 0.82861], + "84": [0, 0.69141, 0, 0, 0.66899], + "85": [0, 0.69141, 0, 0, 0.64576], + "86": [0, 0.69141, 0, 0, 0.83131], + "87": [0, 0.69141, 0, 0, 1.04602], + "88": [0, 0.69141, 0, 0, 0.71922], + "89": [0.18906, 0.69141, 0, 0, 0.83293], + "90": [0.12604, 0.69141, 0, 0, 0.60201], + "91": [0.24982, 0.74947, 0, 0, 0.27764], + "93": [0.24982, 0.74947, 0, 0, 0.27764], + "94": [0, 0.69141, 0, 0, 0.49965], + "97": [0, 0.47534, 0, 0, 0.50046], + "98": [0, 0.69141, 0, 0, 0.51315], + "99": [0, 0.47534, 0, 0, 0.38946], + "100": [0, 0.62119, 0, 0, 0.49857], + "101": [0, 0.47534, 0, 0, 0.40053], + "102": [0.18906, 0.69141, 0, 0, 0.32626], + "103": [0.18906, 0.47534, 0, 0, 0.5037], + "104": [0.18906, 0.69141, 0, 0, 0.52126], + "105": [0, 0.69141, 0, 0, 0.27899], + "106": [0, 0.69141, 0, 0, 0.28088], + "107": [0, 0.69141, 0, 0, 0.38946], + "108": [0, 0.69141, 0, 0, 0.27953], + "109": [0, 0.47534, 0, 0, 0.76676], + "110": [0, 0.47534, 0, 0, 0.52666], + "111": [0, 0.47534, 0, 0, 0.48885], + "112": [0.18906, 0.52396, 0, 0, 0.50046], + "113": [0.18906, 0.47534, 0, 0, 0.48912], + "114": [0, 0.47534, 0, 0, 0.38919], + "115": [0, 0.47534, 0, 0, 0.44266], + "116": [0, 0.62119, 0, 0, 0.33301], + "117": [0, 0.47534, 0, 0, 0.5172], + "118": [0, 0.52396, 0, 0, 0.5118], + "119": [0, 0.52396, 0, 0, 0.77351], + "120": [0.18906, 0.47534, 0, 0, 0.38865], + "121": [0.18906, 0.47534, 0, 0, 0.49884], + "122": [0.18906, 0.47534, 0, 0, 0.39054], + "8216": [0, 0.69141, 0, 0, 0.21471], + "8217": [0, 0.69141, 0, 0, 0.21471], + "58112": [0, 0.62119, 0, 0, 0.49749], + "58113": [0, 0.62119, 0, 0, 0.4983], + "58114": [0.18906, 0.69141, 0, 0, 0.33328], + "58115": [0.18906, 0.69141, 0, 0, 0.32923], + "58116": [0.18906, 0.47534, 0, 0, 0.50343], + "58117": [0, 0.69141, 0, 0, 0.33301], + "58118": [0, 0.62119, 0, 0, 0.33409], + "58119": [0, 0.47534, 0, 0, 0.50073] + }, + "Main-Bold": { + "33": [0, 0.69444, 0, 0, 0.35], + "34": [0, 0.69444, 0, 0, 0.60278], + "35": [0.19444, 0.69444, 0, 0, 0.95833], + "36": [0.05556, 0.75, 0, 0, 0.575], + "37": [0.05556, 0.75, 0, 0, 0.95833], + "38": [0, 0.69444, 0, 0, 0.89444], + "39": [0, 0.69444, 0, 0, 0.31944], + "40": [0.25, 0.75, 0, 0, 0.44722], + "41": [0.25, 0.75, 0, 0, 0.44722], + "42": [0, 0.75, 0, 0, 0.575], + "43": [0.13333, 0.63333, 0, 0, 0.89444], + "44": [0.19444, 0.15556, 0, 0, 0.31944], + "45": [0, 0.44444, 0, 0, 0.38333], + "46": [0, 0.15556, 0, 0, 0.31944], + "47": [0.25, 0.75, 0, 0, 0.575], + "48": [0, 0.64444, 0, 0, 0.575], + "49": [0, 0.64444, 0, 0, 0.575], + "50": [0, 0.64444, 0, 0, 0.575], + "51": [0, 0.64444, 0, 0, 0.575], + "52": [0, 0.64444, 0, 0, 0.575], + "53": [0, 0.64444, 0, 0, 0.575], + "54": [0, 0.64444, 0, 0, 0.575], + "55": [0, 0.64444, 0, 0, 0.575], + "56": [0, 0.64444, 0, 0, 0.575], + "57": [0, 0.64444, 0, 0, 0.575], + "58": [0, 0.44444, 0, 0, 0.31944], + "59": [0.19444, 0.44444, 0, 0, 0.31944], + "60": [0.08556, 0.58556, 0, 0, 0.89444], + "61": [-0.10889, 0.39111, 0, 0, 0.89444], + "62": [0.08556, 0.58556, 0, 0, 0.89444], + "63": [0, 0.69444, 0, 0, 0.54305], + "64": [0, 0.69444, 0, 0, 0.89444], + "65": [0, 0.68611, 0, 0, 0.86944], + "66": [0, 0.68611, 0, 0, 0.81805], + "67": [0, 0.68611, 0, 0, 0.83055], + "68": [0, 0.68611, 0, 0, 0.88194], + "69": [0, 0.68611, 0, 0, 0.75555], + "70": [0, 0.68611, 0, 0, 0.72361], + "71": [0, 0.68611, 0, 0, 0.90416], + "72": [0, 0.68611, 0, 0, 0.9], + "73": [0, 0.68611, 0, 0, 0.43611], + "74": [0, 0.68611, 0, 0, 0.59444], + "75": [0, 0.68611, 0, 0, 0.90138], + "76": [0, 0.68611, 0, 0, 0.69166], + "77": [0, 0.68611, 0, 0, 1.09166], + "78": [0, 0.68611, 0, 0, 0.9], + "79": [0, 0.68611, 0, 0, 0.86388], + "80": [0, 0.68611, 0, 0, 0.78611], + "81": [0.19444, 0.68611, 0, 0, 0.86388], + "82": [0, 0.68611, 0, 0, 0.8625], + "83": [0, 0.68611, 0, 0, 0.63889], + "84": [0, 0.68611, 0, 0, 0.8], + "85": [0, 0.68611, 0, 0, 0.88472], + "86": [0, 0.68611, 0.01597, 0, 0.86944], + "87": [0, 0.68611, 0.01597, 0, 1.18888], + "88": [0, 0.68611, 0, 0, 0.86944], + "89": [0, 0.68611, 0.02875, 0, 0.86944], + "90": [0, 0.68611, 0, 0, 0.70277], + "91": [0.25, 0.75, 0, 0, 0.31944], + "92": [0.25, 0.75, 0, 0, 0.575], + "93": [0.25, 0.75, 0, 0, 0.31944], + "94": [0, 0.69444, 0, 0, 0.575], + "95": [0.31, 0.13444, 0.03194, 0, 0.575], + "97": [0, 0.44444, 0, 0, 0.55902], + "98": [0, 0.69444, 0, 0, 0.63889], + "99": [0, 0.44444, 0, 0, 0.51111], + "100": [0, 0.69444, 0, 0, 0.63889], + "101": [0, 0.44444, 0, 0, 0.52708], + "102": [0, 0.69444, 0.10903, 0, 0.35139], + "103": [0.19444, 0.44444, 0.01597, 0, 0.575], + "104": [0, 0.69444, 0, 0, 0.63889], + "105": [0, 0.69444, 0, 0, 0.31944], + "106": [0.19444, 0.69444, 0, 0, 0.35139], + "107": [0, 0.69444, 0, 0, 0.60694], + "108": [0, 0.69444, 0, 0, 0.31944], + "109": [0, 0.44444, 0, 0, 0.95833], + "110": [0, 0.44444, 0, 0, 0.63889], + "111": [0, 0.44444, 0, 0, 0.575], + "112": [0.19444, 0.44444, 0, 0, 0.63889], + "113": [0.19444, 0.44444, 0, 0, 0.60694], + "114": [0, 0.44444, 0, 0, 0.47361], + "115": [0, 0.44444, 0, 0, 0.45361], + "116": [0, 0.63492, 0, 0, 0.44722], + "117": [0, 0.44444, 0, 0, 0.63889], + "118": [0, 0.44444, 0.01597, 0, 0.60694], + "119": [0, 0.44444, 0.01597, 0, 0.83055], + "120": [0, 0.44444, 0, 0, 0.60694], + "121": [0.19444, 0.44444, 0.01597, 0, 0.60694], + "122": [0, 0.44444, 0, 0, 0.51111], + "123": [0.25, 0.75, 0, 0, 0.575], + "124": [0.25, 0.75, 0, 0, 0.31944], + "125": [0.25, 0.75, 0, 0, 0.575], + "126": [0.35, 0.34444, 0, 0, 0.575], + "168": [0, 0.69444, 0, 0, 0.575], + "172": [0, 0.44444, 0, 0, 0.76666], + "176": [0, 0.69444, 0, 0, 0.86944], + "177": [0.13333, 0.63333, 0, 0, 0.89444], + "184": [0.17014, 0, 0, 0, 0.51111], + "198": [0, 0.68611, 0, 0, 1.04166], + "215": [0.13333, 0.63333, 0, 0, 0.89444], + "216": [0.04861, 0.73472, 0, 0, 0.89444], + "223": [0, 0.69444, 0, 0, 0.59722], + "230": [0, 0.44444, 0, 0, 0.83055], + "247": [0.13333, 0.63333, 0, 0, 0.89444], + "248": [0.09722, 0.54167, 0, 0, 0.575], + "305": [0, 0.44444, 0, 0, 0.31944], + "338": [0, 0.68611, 0, 0, 1.16944], + "339": [0, 0.44444, 0, 0, 0.89444], + "567": [0.19444, 0.44444, 0, 0, 0.35139], + "710": [0, 0.69444, 0, 0, 0.575], + "711": [0, 0.63194, 0, 0, 0.575], + "713": [0, 0.59611, 0, 0, 0.575], + "714": [0, 0.69444, 0, 0, 0.575], + "715": [0, 0.69444, 0, 0, 0.575], + "728": [0, 0.69444, 0, 0, 0.575], + "729": [0, 0.69444, 0, 0, 0.31944], + "730": [0, 0.69444, 0, 0, 0.86944], + "732": [0, 0.69444, 0, 0, 0.575], + "733": [0, 0.69444, 0, 0, 0.575], + "915": [0, 0.68611, 0, 0, 0.69166], + "916": [0, 0.68611, 0, 0, 0.95833], + "920": [0, 0.68611, 0, 0, 0.89444], + "923": [0, 0.68611, 0, 0, 0.80555], + "926": [0, 0.68611, 0, 0, 0.76666], + "928": [0, 0.68611, 0, 0, 0.9], + "931": [0, 0.68611, 0, 0, 0.83055], + "933": [0, 0.68611, 0, 0, 0.89444], + "934": [0, 0.68611, 0, 0, 0.83055], + "936": [0, 0.68611, 0, 0, 0.89444], + "937": [0, 0.68611, 0, 0, 0.83055], + "8211": [0, 0.44444, 0.03194, 0, 0.575], + "8212": [0, 0.44444, 0.03194, 0, 1.14999], + "8216": [0, 0.69444, 0, 0, 0.31944], + "8217": [0, 0.69444, 0, 0, 0.31944], + "8220": [0, 0.69444, 0, 0, 0.60278], + "8221": [0, 0.69444, 0, 0, 0.60278], + "8224": [0.19444, 0.69444, 0, 0, 0.51111], + "8225": [0.19444, 0.69444, 0, 0, 0.51111], + "8242": [0, 0.55556, 0, 0, 0.34444], + "8407": [0, 0.72444, 0.15486, 0, 0.575], + "8463": [0, 0.69444, 0, 0, 0.66759], + "8465": [0, 0.69444, 0, 0, 0.83055], + "8467": [0, 0.69444, 0, 0, 0.47361], + "8472": [0.19444, 0.44444, 0, 0, 0.74027], + "8476": [0, 0.69444, 0, 0, 0.83055], + "8501": [0, 0.69444, 0, 0, 0.70277], + "8592": [-0.10889, 0.39111, 0, 0, 1.14999], + "8593": [0.19444, 0.69444, 0, 0, 0.575], + "8594": [-0.10889, 0.39111, 0, 0, 1.14999], + "8595": [0.19444, 0.69444, 0, 0, 0.575], + "8596": [-0.10889, 0.39111, 0, 0, 1.14999], + "8597": [0.25, 0.75, 0, 0, 0.575], + "8598": [0.19444, 0.69444, 0, 0, 1.14999], + "8599": [0.19444, 0.69444, 0, 0, 1.14999], + "8600": [0.19444, 0.69444, 0, 0, 1.14999], + "8601": [0.19444, 0.69444, 0, 0, 1.14999], + "8636": [-0.10889, 0.39111, 0, 0, 1.14999], + "8637": [-0.10889, 0.39111, 0, 0, 1.14999], + "8640": [-0.10889, 0.39111, 0, 0, 1.14999], + "8641": [-0.10889, 0.39111, 0, 0, 1.14999], + "8656": [-0.10889, 0.39111, 0, 0, 1.14999], + "8657": [0.19444, 0.69444, 0, 0, 0.70277], + "8658": [-0.10889, 0.39111, 0, 0, 1.14999], + "8659": [0.19444, 0.69444, 0, 0, 0.70277], + "8660": [-0.10889, 0.39111, 0, 0, 1.14999], + "8661": [0.25, 0.75, 0, 0, 0.70277], + "8704": [0, 0.69444, 0, 0, 0.63889], + "8706": [0, 0.69444, 0.06389, 0, 0.62847], + "8707": [0, 0.69444, 0, 0, 0.63889], + "8709": [0.05556, 0.75, 0, 0, 0.575], + "8711": [0, 0.68611, 0, 0, 0.95833], + "8712": [0.08556, 0.58556, 0, 0, 0.76666], + "8715": [0.08556, 0.58556, 0, 0, 0.76666], + "8722": [0.13333, 0.63333, 0, 0, 0.89444], + "8723": [0.13333, 0.63333, 0, 0, 0.89444], + "8725": [0.25, 0.75, 0, 0, 0.575], + "8726": [0.25, 0.75, 0, 0, 0.575], + "8727": [-0.02778, 0.47222, 0, 0, 0.575], + "8728": [-0.02639, 0.47361, 0, 0, 0.575], + "8729": [-0.02639, 0.47361, 0, 0, 0.575], + "8730": [0.18, 0.82, 0, 0, 0.95833], + "8733": [0, 0.44444, 0, 0, 0.89444], + "8734": [0, 0.44444, 0, 0, 1.14999], + "8736": [0, 0.69224, 0, 0, 0.72222], + "8739": [0.25, 0.75, 0, 0, 0.31944], + "8741": [0.25, 0.75, 0, 0, 0.575], + "8743": [0, 0.55556, 0, 0, 0.76666], + "8744": [0, 0.55556, 0, 0, 0.76666], + "8745": [0, 0.55556, 0, 0, 0.76666], + "8746": [0, 0.55556, 0, 0, 0.76666], + "8747": [0.19444, 0.69444, 0.12778, 0, 0.56875], + "8764": [-0.10889, 0.39111, 0, 0, 0.89444], + "8768": [0.19444, 0.69444, 0, 0, 0.31944], + "8771": [0.00222, 0.50222, 0, 0, 0.89444], + "8776": [0.02444, 0.52444, 0, 0, 0.89444], + "8781": [0.00222, 0.50222, 0, 0, 0.89444], + "8801": [0.00222, 0.50222, 0, 0, 0.89444], + "8804": [0.19667, 0.69667, 0, 0, 0.89444], + "8805": [0.19667, 0.69667, 0, 0, 0.89444], + "8810": [0.08556, 0.58556, 0, 0, 1.14999], + "8811": [0.08556, 0.58556, 0, 0, 1.14999], + "8826": [0.08556, 0.58556, 0, 0, 0.89444], + "8827": [0.08556, 0.58556, 0, 0, 0.89444], + "8834": [0.08556, 0.58556, 0, 0, 0.89444], + "8835": [0.08556, 0.58556, 0, 0, 0.89444], + "8838": [0.19667, 0.69667, 0, 0, 0.89444], + "8839": [0.19667, 0.69667, 0, 0, 0.89444], + "8846": [0, 0.55556, 0, 0, 0.76666], + "8849": [0.19667, 0.69667, 0, 0, 0.89444], + "8850": [0.19667, 0.69667, 0, 0, 0.89444], + "8851": [0, 0.55556, 0, 0, 0.76666], + "8852": [0, 0.55556, 0, 0, 0.76666], + "8853": [0.13333, 0.63333, 0, 0, 0.89444], + "8854": [0.13333, 0.63333, 0, 0, 0.89444], + "8855": [0.13333, 0.63333, 0, 0, 0.89444], + "8856": [0.13333, 0.63333, 0, 0, 0.89444], + "8857": [0.13333, 0.63333, 0, 0, 0.89444], + "8866": [0, 0.69444, 0, 0, 0.70277], + "8867": [0, 0.69444, 0, 0, 0.70277], + "8868": [0, 0.69444, 0, 0, 0.89444], + "8869": [0, 0.69444, 0, 0, 0.89444], + "8900": [-0.02639, 0.47361, 0, 0, 0.575], + "8901": [-0.02639, 0.47361, 0, 0, 0.31944], + "8902": [-0.02778, 0.47222, 0, 0, 0.575], + "8968": [0.25, 0.75, 0, 0, 0.51111], + "8969": [0.25, 0.75, 0, 0, 0.51111], + "8970": [0.25, 0.75, 0, 0, 0.51111], + "8971": [0.25, 0.75, 0, 0, 0.51111], + "8994": [-0.13889, 0.36111, 0, 0, 1.14999], + "8995": [-0.13889, 0.36111, 0, 0, 1.14999], + "9651": [0.19444, 0.69444, 0, 0, 1.02222], + "9657": [-0.02778, 0.47222, 0, 0, 0.575], + "9661": [0.19444, 0.69444, 0, 0, 1.02222], + "9667": [-0.02778, 0.47222, 0, 0, 0.575], + "9711": [0.19444, 0.69444, 0, 0, 1.14999], + "9824": [0.12963, 0.69444, 0, 0, 0.89444], + "9825": [0.12963, 0.69444, 0, 0, 0.89444], + "9826": [0.12963, 0.69444, 0, 0, 0.89444], + "9827": [0.12963, 0.69444, 0, 0, 0.89444], + "9837": [0, 0.75, 0, 0, 0.44722], + "9838": [0.19444, 0.69444, 0, 0, 0.44722], + "9839": [0.19444, 0.69444, 0, 0, 0.44722], + "10216": [0.25, 0.75, 0, 0, 0.44722], + "10217": [0.25, 0.75, 0, 0, 0.44722], + "10815": [0, 0.68611, 0, 0, 0.9], + "10927": [0.19667, 0.69667, 0, 0, 0.89444], + "10928": [0.19667, 0.69667, 0, 0, 0.89444], + "57376": [0.19444, 0.69444, 0, 0, 0] + }, + "Main-BoldItalic": { + "33": [0, 0.69444, 0.11417, 0, 0.38611], + "34": [0, 0.69444, 0.07939, 0, 0.62055], + "35": [0.19444, 0.69444, 0.06833, 0, 0.94444], + "37": [0.05556, 0.75, 0.12861, 0, 0.94444], + "38": [0, 0.69444, 0.08528, 0, 0.88555], + "39": [0, 0.69444, 0.12945, 0, 0.35555], + "40": [0.25, 0.75, 0.15806, 0, 0.47333], + "41": [0.25, 0.75, 0.03306, 0, 0.47333], + "42": [0, 0.75, 0.14333, 0, 0.59111], + "43": [0.10333, 0.60333, 0.03306, 0, 0.88555], + "44": [0.19444, 0.14722, 0, 0, 0.35555], + "45": [0, 0.44444, 0.02611, 0, 0.41444], + "46": [0, 0.14722, 0, 0, 0.35555], + "47": [0.25, 0.75, 0.15806, 0, 0.59111], + "48": [0, 0.64444, 0.13167, 0, 0.59111], + "49": [0, 0.64444, 0.13167, 0, 0.59111], + "50": [0, 0.64444, 0.13167, 0, 0.59111], + "51": [0, 0.64444, 0.13167, 0, 0.59111], + "52": [0.19444, 0.64444, 0.13167, 0, 0.59111], + "53": [0, 0.64444, 0.13167, 0, 0.59111], + "54": [0, 0.64444, 0.13167, 0, 0.59111], + "55": [0.19444, 0.64444, 0.13167, 0, 0.59111], + "56": [0, 0.64444, 0.13167, 0, 0.59111], + "57": [0, 0.64444, 0.13167, 0, 0.59111], + "58": [0, 0.44444, 0.06695, 0, 0.35555], + "59": [0.19444, 0.44444, 0.06695, 0, 0.35555], + "61": [-0.10889, 0.39111, 0.06833, 0, 0.88555], + "63": [0, 0.69444, 0.11472, 0, 0.59111], + "64": [0, 0.69444, 0.09208, 0, 0.88555], + "65": [0, 0.68611, 0, 0, 0.86555], + "66": [0, 0.68611, 0.0992, 0, 0.81666], + "67": [0, 0.68611, 0.14208, 0, 0.82666], + "68": [0, 0.68611, 0.09062, 0, 0.87555], + "69": [0, 0.68611, 0.11431, 0, 0.75666], + "70": [0, 0.68611, 0.12903, 0, 0.72722], + "71": [0, 0.68611, 0.07347, 0, 0.89527], + "72": [0, 0.68611, 0.17208, 0, 0.8961], + "73": [0, 0.68611, 0.15681, 0, 0.47166], + "74": [0, 0.68611, 0.145, 0, 0.61055], + "75": [0, 0.68611, 0.14208, 0, 0.89499], + "76": [0, 0.68611, 0, 0, 0.69777], + "77": [0, 0.68611, 0.17208, 0, 1.07277], + "78": [0, 0.68611, 0.17208, 0, 0.8961], + "79": [0, 0.68611, 0.09062, 0, 0.85499], + "80": [0, 0.68611, 0.0992, 0, 0.78721], + "81": [0.19444, 0.68611, 0.09062, 0, 0.85499], + "82": [0, 0.68611, 0.02559, 0, 0.85944], + "83": [0, 0.68611, 0.11264, 0, 0.64999], + "84": [0, 0.68611, 0.12903, 0, 0.7961], + "85": [0, 0.68611, 0.17208, 0, 0.88083], + "86": [0, 0.68611, 0.18625, 0, 0.86555], + "87": [0, 0.68611, 0.18625, 0, 1.15999], + "88": [0, 0.68611, 0.15681, 0, 0.86555], + "89": [0, 0.68611, 0.19803, 0, 0.86555], + "90": [0, 0.68611, 0.14208, 0, 0.70888], + "91": [0.25, 0.75, 0.1875, 0, 0.35611], + "93": [0.25, 0.75, 0.09972, 0, 0.35611], + "94": [0, 0.69444, 0.06709, 0, 0.59111], + "95": [0.31, 0.13444, 0.09811, 0, 0.59111], + "97": [0, 0.44444, 0.09426, 0, 0.59111], + "98": [0, 0.69444, 0.07861, 0, 0.53222], + "99": [0, 0.44444, 0.05222, 0, 0.53222], + "100": [0, 0.69444, 0.10861, 0, 0.59111], + "101": [0, 0.44444, 0.085, 0, 0.53222], + "102": [0.19444, 0.69444, 0.21778, 0, 0.4], + "103": [0.19444, 0.44444, 0.105, 0, 0.53222], + "104": [0, 0.69444, 0.09426, 0, 0.59111], + "105": [0, 0.69326, 0.11387, 0, 0.35555], + "106": [0.19444, 0.69326, 0.1672, 0, 0.35555], + "107": [0, 0.69444, 0.11111, 0, 0.53222], + "108": [0, 0.69444, 0.10861, 0, 0.29666], + "109": [0, 0.44444, 0.09426, 0, 0.94444], + "110": [0, 0.44444, 0.09426, 0, 0.64999], + "111": [0, 0.44444, 0.07861, 0, 0.59111], + "112": [0.19444, 0.44444, 0.07861, 0, 0.59111], + "113": [0.19444, 0.44444, 0.105, 0, 0.53222], + "114": [0, 0.44444, 0.11111, 0, 0.50167], + "115": [0, 0.44444, 0.08167, 0, 0.48694], + "116": [0, 0.63492, 0.09639, 0, 0.385], + "117": [0, 0.44444, 0.09426, 0, 0.62055], + "118": [0, 0.44444, 0.11111, 0, 0.53222], + "119": [0, 0.44444, 0.11111, 0, 0.76777], + "120": [0, 0.44444, 0.12583, 0, 0.56055], + "121": [0.19444, 0.44444, 0.105, 0, 0.56166], + "122": [0, 0.44444, 0.13889, 0, 0.49055], + "126": [0.35, 0.34444, 0.11472, 0, 0.59111], + "163": [0, 0.69444, 0, 0, 0.86853], + "168": [0, 0.69444, 0.11473, 0, 0.59111], + "176": [0, 0.69444, 0, 0, 0.94888], + "184": [0.17014, 0, 0, 0, 0.53222], + "198": [0, 0.68611, 0.11431, 0, 1.02277], + "216": [0.04861, 0.73472, 0.09062, 0, 0.88555], + "223": [0.19444, 0.69444, 0.09736, 0, 0.665], + "230": [0, 0.44444, 0.085, 0, 0.82666], + "248": [0.09722, 0.54167, 0.09458, 0, 0.59111], + "305": [0, 0.44444, 0.09426, 0, 0.35555], + "338": [0, 0.68611, 0.11431, 0, 1.14054], + "339": [0, 0.44444, 0.085, 0, 0.82666], + "567": [0.19444, 0.44444, 0.04611, 0, 0.385], + "710": [0, 0.69444, 0.06709, 0, 0.59111], + "711": [0, 0.63194, 0.08271, 0, 0.59111], + "713": [0, 0.59444, 0.10444, 0, 0.59111], + "714": [0, 0.69444, 0.08528, 0, 0.59111], + "715": [0, 0.69444, 0, 0, 0.59111], + "728": [0, 0.69444, 0.10333, 0, 0.59111], + "729": [0, 0.69444, 0.12945, 0, 0.35555], + "730": [0, 0.69444, 0, 0, 0.94888], + "732": [0, 0.69444, 0.11472, 0, 0.59111], + "733": [0, 0.69444, 0.11472, 0, 0.59111], + "915": [0, 0.68611, 0.12903, 0, 0.69777], + "916": [0, 0.68611, 0, 0, 0.94444], + "920": [0, 0.68611, 0.09062, 0, 0.88555], + "923": [0, 0.68611, 0, 0, 0.80666], + "926": [0, 0.68611, 0.15092, 0, 0.76777], + "928": [0, 0.68611, 0.17208, 0, 0.8961], + "931": [0, 0.68611, 0.11431, 0, 0.82666], + "933": [0, 0.68611, 0.10778, 0, 0.88555], + "934": [0, 0.68611, 0.05632, 0, 0.82666], + "936": [0, 0.68611, 0.10778, 0, 0.88555], + "937": [0, 0.68611, 0.0992, 0, 0.82666], + "8211": [0, 0.44444, 0.09811, 0, 0.59111], + "8212": [0, 0.44444, 0.09811, 0, 1.18221], + "8216": [0, 0.69444, 0.12945, 0, 0.35555], + "8217": [0, 0.69444, 0.12945, 0, 0.35555], + "8220": [0, 0.69444, 0.16772, 0, 0.62055], + "8221": [0, 0.69444, 0.07939, 0, 0.62055] + }, + "Main-Italic": { + "33": [0, 0.69444, 0.12417, 0, 0.30667], + "34": [0, 0.69444, 0.06961, 0, 0.51444], + "35": [0.19444, 0.69444, 0.06616, 0, 0.81777], + "37": [0.05556, 0.75, 0.13639, 0, 0.81777], + "38": [0, 0.69444, 0.09694, 0, 0.76666], + "39": [0, 0.69444, 0.12417, 0, 0.30667], + "40": [0.25, 0.75, 0.16194, 0, 0.40889], + "41": [0.25, 0.75, 0.03694, 0, 0.40889], + "42": [0, 0.75, 0.14917, 0, 0.51111], + "43": [0.05667, 0.56167, 0.03694, 0, 0.76666], + "44": [0.19444, 0.10556, 0, 0, 0.30667], + "45": [0, 0.43056, 0.02826, 0, 0.35778], + "46": [0, 0.10556, 0, 0, 0.30667], + "47": [0.25, 0.75, 0.16194, 0, 0.51111], + "48": [0, 0.64444, 0.13556, 0, 0.51111], + "49": [0, 0.64444, 0.13556, 0, 0.51111], + "50": [0, 0.64444, 0.13556, 0, 0.51111], + "51": [0, 0.64444, 0.13556, 0, 0.51111], + "52": [0.19444, 0.64444, 0.13556, 0, 0.51111], + "53": [0, 0.64444, 0.13556, 0, 0.51111], + "54": [0, 0.64444, 0.13556, 0, 0.51111], + "55": [0.19444, 0.64444, 0.13556, 0, 0.51111], + "56": [0, 0.64444, 0.13556, 0, 0.51111], + "57": [0, 0.64444, 0.13556, 0, 0.51111], + "58": [0, 0.43056, 0.0582, 0, 0.30667], + "59": [0.19444, 0.43056, 0.0582, 0, 0.30667], + "61": [-0.13313, 0.36687, 0.06616, 0, 0.76666], + "63": [0, 0.69444, 0.1225, 0, 0.51111], + "64": [0, 0.69444, 0.09597, 0, 0.76666], + "65": [0, 0.68333, 0, 0, 0.74333], + "66": [0, 0.68333, 0.10257, 0, 0.70389], + "67": [0, 0.68333, 0.14528, 0, 0.71555], + "68": [0, 0.68333, 0.09403, 0, 0.755], + "69": [0, 0.68333, 0.12028, 0, 0.67833], + "70": [0, 0.68333, 0.13305, 0, 0.65277], + "71": [0, 0.68333, 0.08722, 0, 0.77361], + "72": [0, 0.68333, 0.16389, 0, 0.74333], + "73": [0, 0.68333, 0.15806, 0, 0.38555], + "74": [0, 0.68333, 0.14028, 0, 0.525], + "75": [0, 0.68333, 0.14528, 0, 0.76888], + "76": [0, 0.68333, 0, 0, 0.62722], + "77": [0, 0.68333, 0.16389, 0, 0.89666], + "78": [0, 0.68333, 0.16389, 0, 0.74333], + "79": [0, 0.68333, 0.09403, 0, 0.76666], + "80": [0, 0.68333, 0.10257, 0, 0.67833], + "81": [0.19444, 0.68333, 0.09403, 0, 0.76666], + "82": [0, 0.68333, 0.03868, 0, 0.72944], + "83": [0, 0.68333, 0.11972, 0, 0.56222], + "84": [0, 0.68333, 0.13305, 0, 0.71555], + "85": [0, 0.68333, 0.16389, 0, 0.74333], + "86": [0, 0.68333, 0.18361, 0, 0.74333], + "87": [0, 0.68333, 0.18361, 0, 0.99888], + "88": [0, 0.68333, 0.15806, 0, 0.74333], + "89": [0, 0.68333, 0.19383, 0, 0.74333], + "90": [0, 0.68333, 0.14528, 0, 0.61333], + "91": [0.25, 0.75, 0.1875, 0, 0.30667], + "93": [0.25, 0.75, 0.10528, 0, 0.30667], + "94": [0, 0.69444, 0.06646, 0, 0.51111], + "95": [0.31, 0.12056, 0.09208, 0, 0.51111], + "97": [0, 0.43056, 0.07671, 0, 0.51111], + "98": [0, 0.69444, 0.06312, 0, 0.46], + "99": [0, 0.43056, 0.05653, 0, 0.46], + "100": [0, 0.69444, 0.10333, 0, 0.51111], + "101": [0, 0.43056, 0.07514, 0, 0.46], + "102": [0.19444, 0.69444, 0.21194, 0, 0.30667], + "103": [0.19444, 0.43056, 0.08847, 0, 0.46], + "104": [0, 0.69444, 0.07671, 0, 0.51111], + "105": [0, 0.65536, 0.1019, 0, 0.30667], + "106": [0.19444, 0.65536, 0.14467, 0, 0.30667], + "107": [0, 0.69444, 0.10764, 0, 0.46], + "108": [0, 0.69444, 0.10333, 0, 0.25555], + "109": [0, 0.43056, 0.07671, 0, 0.81777], + "110": [0, 0.43056, 0.07671, 0, 0.56222], + "111": [0, 0.43056, 0.06312, 0, 0.51111], + "112": [0.19444, 0.43056, 0.06312, 0, 0.51111], + "113": [0.19444, 0.43056, 0.08847, 0, 0.46], + "114": [0, 0.43056, 0.10764, 0, 0.42166], + "115": [0, 0.43056, 0.08208, 0, 0.40889], + "116": [0, 0.61508, 0.09486, 0, 0.33222], + "117": [0, 0.43056, 0.07671, 0, 0.53666], + "118": [0, 0.43056, 0.10764, 0, 0.46], + "119": [0, 0.43056, 0.10764, 0, 0.66444], + "120": [0, 0.43056, 0.12042, 0, 0.46389], + "121": [0.19444, 0.43056, 0.08847, 0, 0.48555], + "122": [0, 0.43056, 0.12292, 0, 0.40889], + "126": [0.35, 0.31786, 0.11585, 0, 0.51111], + "163": [0, 0.69444, 0, 0, 0.76909], + "168": [0, 0.66786, 0.10474, 0, 0.51111], + "176": [0, 0.69444, 0, 0, 0.83129], + "184": [0.17014, 0, 0, 0, 0.46], + "198": [0, 0.68333, 0.12028, 0, 0.88277], + "216": [0.04861, 0.73194, 0.09403, 0, 0.76666], + "223": [0.19444, 0.69444, 0.10514, 0, 0.53666], + "230": [0, 0.43056, 0.07514, 0, 0.71555], + "248": [0.09722, 0.52778, 0.09194, 0, 0.51111], + "305": [0, 0.43056, 0, 0.02778, 0.32246], + "338": [0, 0.68333, 0.12028, 0, 0.98499], + "339": [0, 0.43056, 0.07514, 0, 0.71555], + "567": [0.19444, 0.43056, 0, 0.08334, 0.38403], + "710": [0, 0.69444, 0.06646, 0, 0.51111], + "711": [0, 0.62847, 0.08295, 0, 0.51111], + "713": [0, 0.56167, 0.10333, 0, 0.51111], + "714": [0, 0.69444, 0.09694, 0, 0.51111], + "715": [0, 0.69444, 0, 0, 0.51111], + "728": [0, 0.69444, 0.10806, 0, 0.51111], + "729": [0, 0.66786, 0.11752, 0, 0.30667], + "730": [0, 0.69444, 0, 0, 0.83129], + "732": [0, 0.66786, 0.11585, 0, 0.51111], + "733": [0, 0.69444, 0.1225, 0, 0.51111], + "915": [0, 0.68333, 0.13305, 0, 0.62722], + "916": [0, 0.68333, 0, 0, 0.81777], + "920": [0, 0.68333, 0.09403, 0, 0.76666], + "923": [0, 0.68333, 0, 0, 0.69222], + "926": [0, 0.68333, 0.15294, 0, 0.66444], + "928": [0, 0.68333, 0.16389, 0, 0.74333], + "931": [0, 0.68333, 0.12028, 0, 0.71555], + "933": [0, 0.68333, 0.11111, 0, 0.76666], + "934": [0, 0.68333, 0.05986, 0, 0.71555], + "936": [0, 0.68333, 0.11111, 0, 0.76666], + "937": [0, 0.68333, 0.10257, 0, 0.71555], + "8211": [0, 0.43056, 0.09208, 0, 0.51111], + "8212": [0, 0.43056, 0.09208, 0, 1.02222], + "8216": [0, 0.69444, 0.12417, 0, 0.30667], + "8217": [0, 0.69444, 0.12417, 0, 0.30667], + "8220": [0, 0.69444, 0.1685, 0, 0.51444], + "8221": [0, 0.69444, 0.06961, 0, 0.51444], + "8463": [0, 0.68889, 0, 0, 0.54028] + }, + "Main-Regular": { + "32": [0, 0, 0, 0, 0.25], + "33": [0, 0.69444, 0, 0, 0.27778], + "34": [0, 0.69444, 0, 0, 0.5], + "35": [0.19444, 0.69444, 0, 0, 0.83334], + "36": [0.05556, 0.75, 0, 0, 0.5], + "37": [0.05556, 0.75, 0, 0, 0.83334], + "38": [0, 0.69444, 0, 0, 0.77778], + "39": [0, 0.69444, 0, 0, 0.27778], + "40": [0.25, 0.75, 0, 0, 0.38889], + "41": [0.25, 0.75, 0, 0, 0.38889], + "42": [0, 0.75, 0, 0, 0.5], + "43": [0.08333, 0.58333, 0, 0, 0.77778], + "44": [0.19444, 0.10556, 0, 0, 0.27778], + "45": [0, 0.43056, 0, 0, 0.33333], + "46": [0, 0.10556, 0, 0, 0.27778], + "47": [0.25, 0.75, 0, 0, 0.5], + "48": [0, 0.64444, 0, 0, 0.5], + "49": [0, 0.64444, 0, 0, 0.5], + "50": [0, 0.64444, 0, 0, 0.5], + "51": [0, 0.64444, 0, 0, 0.5], + "52": [0, 0.64444, 0, 0, 0.5], + "53": [0, 0.64444, 0, 0, 0.5], + "54": [0, 0.64444, 0, 0, 0.5], + "55": [0, 0.64444, 0, 0, 0.5], + "56": [0, 0.64444, 0, 0, 0.5], + "57": [0, 0.64444, 0, 0, 0.5], + "58": [0, 0.43056, 0, 0, 0.27778], + "59": [0.19444, 0.43056, 0, 0, 0.27778], + "60": [0.0391, 0.5391, 0, 0, 0.77778], + "61": [-0.13313, 0.36687, 0, 0, 0.77778], + "62": [0.0391, 0.5391, 0, 0, 0.77778], + "63": [0, 0.69444, 0, 0, 0.47222], + "64": [0, 0.69444, 0, 0, 0.77778], + "65": [0, 0.68333, 0, 0, 0.75], + "66": [0, 0.68333, 0, 0, 0.70834], + "67": [0, 0.68333, 0, 0, 0.72222], + "68": [0, 0.68333, 0, 0, 0.76389], + "69": [0, 0.68333, 0, 0, 0.68056], + "70": [0, 0.68333, 0, 0, 0.65278], + "71": [0, 0.68333, 0, 0, 0.78472], + "72": [0, 0.68333, 0, 0, 0.75], + "73": [0, 0.68333, 0, 0, 0.36111], + "74": [0, 0.68333, 0, 0, 0.51389], + "75": [0, 0.68333, 0, 0, 0.77778], + "76": [0, 0.68333, 0, 0, 0.625], + "77": [0, 0.68333, 0, 0, 0.91667], + "78": [0, 0.68333, 0, 0, 0.75], + "79": [0, 0.68333, 0, 0, 0.77778], + "80": [0, 0.68333, 0, 0, 0.68056], + "81": [0.19444, 0.68333, 0, 0, 0.77778], + "82": [0, 0.68333, 0, 0, 0.73611], + "83": [0, 0.68333, 0, 0, 0.55556], + "84": [0, 0.68333, 0, 0, 0.72222], + "85": [0, 0.68333, 0, 0, 0.75], + "86": [0, 0.68333, 0.01389, 0, 0.75], + "87": [0, 0.68333, 0.01389, 0, 1.02778], + "88": [0, 0.68333, 0, 0, 0.75], + "89": [0, 0.68333, 0.025, 0, 0.75], + "90": [0, 0.68333, 0, 0, 0.61111], + "91": [0.25, 0.75, 0, 0, 0.27778], + "92": [0.25, 0.75, 0, 0, 0.5], + "93": [0.25, 0.75, 0, 0, 0.27778], + "94": [0, 0.69444, 0, 0, 0.5], + "95": [0.31, 0.12056, 0.02778, 0, 0.5], + "97": [0, 0.43056, 0, 0, 0.5], + "98": [0, 0.69444, 0, 0, 0.55556], + "99": [0, 0.43056, 0, 0, 0.44445], + "100": [0, 0.69444, 0, 0, 0.55556], + "101": [0, 0.43056, 0, 0, 0.44445], + "102": [0, 0.69444, 0.07778, 0, 0.30556], + "103": [0.19444, 0.43056, 0.01389, 0, 0.5], + "104": [0, 0.69444, 0, 0, 0.55556], + "105": [0, 0.66786, 0, 0, 0.27778], + "106": [0.19444, 0.66786, 0, 0, 0.30556], + "107": [0, 0.69444, 0, 0, 0.52778], + "108": [0, 0.69444, 0, 0, 0.27778], + "109": [0, 0.43056, 0, 0, 0.83334], + "110": [0, 0.43056, 0, 0, 0.55556], + "111": [0, 0.43056, 0, 0, 0.5], + "112": [0.19444, 0.43056, 0, 0, 0.55556], + "113": [0.19444, 0.43056, 0, 0, 0.52778], + "114": [0, 0.43056, 0, 0, 0.39167], + "115": [0, 0.43056, 0, 0, 0.39445], + "116": [0, 0.61508, 0, 0, 0.38889], + "117": [0, 0.43056, 0, 0, 0.55556], + "118": [0, 0.43056, 0.01389, 0, 0.52778], + "119": [0, 0.43056, 0.01389, 0, 0.72222], + "120": [0, 0.43056, 0, 0, 0.52778], + "121": [0.19444, 0.43056, 0.01389, 0, 0.52778], + "122": [0, 0.43056, 0, 0, 0.44445], + "123": [0.25, 0.75, 0, 0, 0.5], + "124": [0.25, 0.75, 0, 0, 0.27778], + "125": [0.25, 0.75, 0, 0, 0.5], + "126": [0.35, 0.31786, 0, 0, 0.5], + "160": [0, 0, 0, 0, 0.25], + "167": [0.19444, 0.69444, 0, 0, 0.44445], + "168": [0, 0.66786, 0, 0, 0.5], + "172": [0, 0.43056, 0, 0, 0.66667], + "176": [0, 0.69444, 0, 0, 0.75], + "177": [0.08333, 0.58333, 0, 0, 0.77778], + "182": [0.19444, 0.69444, 0, 0, 0.61111], + "184": [0.17014, 0, 0, 0, 0.44445], + "198": [0, 0.68333, 0, 0, 0.90278], + "215": [0.08333, 0.58333, 0, 0, 0.77778], + "216": [0.04861, 0.73194, 0, 0, 0.77778], + "223": [0, 0.69444, 0, 0, 0.5], + "230": [0, 0.43056, 0, 0, 0.72222], + "247": [0.08333, 0.58333, 0, 0, 0.77778], + "248": [0.09722, 0.52778, 0, 0, 0.5], + "305": [0, 0.43056, 0, 0, 0.27778], + "338": [0, 0.68333, 0, 0, 1.01389], + "339": [0, 0.43056, 0, 0, 0.77778], + "567": [0.19444, 0.43056, 0, 0, 0.30556], + "710": [0, 0.69444, 0, 0, 0.5], + "711": [0, 0.62847, 0, 0, 0.5], + "713": [0, 0.56778, 0, 0, 0.5], + "714": [0, 0.69444, 0, 0, 0.5], + "715": [0, 0.69444, 0, 0, 0.5], + "728": [0, 0.69444, 0, 0, 0.5], + "729": [0, 0.66786, 0, 0, 0.27778], + "730": [0, 0.69444, 0, 0, 0.75], + "732": [0, 0.66786, 0, 0, 0.5], + "733": [0, 0.69444, 0, 0, 0.5], + "915": [0, 0.68333, 0, 0, 0.625], + "916": [0, 0.68333, 0, 0, 0.83334], + "920": [0, 0.68333, 0, 0, 0.77778], + "923": [0, 0.68333, 0, 0, 0.69445], + "926": [0, 0.68333, 0, 0, 0.66667], + "928": [0, 0.68333, 0, 0, 0.75], + "931": [0, 0.68333, 0, 0, 0.72222], + "933": [0, 0.68333, 0, 0, 0.77778], + "934": [0, 0.68333, 0, 0, 0.72222], + "936": [0, 0.68333, 0, 0, 0.77778], + "937": [0, 0.68333, 0, 0, 0.72222], + "8211": [0, 0.43056, 0.02778, 0, 0.5], + "8212": [0, 0.43056, 0.02778, 0, 1.0], + "8216": [0, 0.69444, 0, 0, 0.27778], + "8217": [0, 0.69444, 0, 0, 0.27778], + "8220": [0, 0.69444, 0, 0, 0.5], + "8221": [0, 0.69444, 0, 0, 0.5], + "8224": [0.19444, 0.69444, 0, 0, 0.44445], + "8225": [0.19444, 0.69444, 0, 0, 0.44445], + "8230": [0, 0.12, 0, 0, 1.172], + "8242": [0, 0.55556, 0, 0, 0.275], + "8407": [0, 0.71444, 0.15382, 0, 0.5], + "8463": [0, 0.68889, 0, 0, 0.54028], + "8465": [0, 0.69444, 0, 0, 0.72222], + "8467": [0, 0.69444, 0, 0.11111, 0.41667], + "8472": [0.19444, 0.43056, 0, 0.11111, 0.63646], + "8476": [0, 0.69444, 0, 0, 0.72222], + "8501": [0, 0.69444, 0, 0, 0.61111], + "8592": [-0.13313, 0.36687, 0, 0, 1.0], + "8593": [0.19444, 0.69444, 0, 0, 0.5], + "8594": [-0.13313, 0.36687, 0, 0, 1.0], + "8595": [0.19444, 0.69444, 0, 0, 0.5], + "8596": [-0.13313, 0.36687, 0, 0, 1.0], + "8597": [0.25, 0.75, 0, 0, 0.5], + "8598": [0.19444, 0.69444, 0, 0, 1.0], + "8599": [0.19444, 0.69444, 0, 0, 1.0], + "8600": [0.19444, 0.69444, 0, 0, 1.0], + "8601": [0.19444, 0.69444, 0, 0, 1.0], + "8614": [0.011, 0.511, 0, 0, 1.0], + "8617": [0.011, 0.511, 0, 0, 1.126], + "8618": [0.011, 0.511, 0, 0, 1.126], + "8636": [-0.13313, 0.36687, 0, 0, 1.0], + "8637": [-0.13313, 0.36687, 0, 0, 1.0], + "8640": [-0.13313, 0.36687, 0, 0, 1.0], + "8641": [-0.13313, 0.36687, 0, 0, 1.0], + "8652": [0.011, 0.671, 0, 0, 1.0], + "8656": [-0.13313, 0.36687, 0, 0, 1.0], + "8657": [0.19444, 0.69444, 0, 0, 0.61111], + "8658": [-0.13313, 0.36687, 0, 0, 1.0], + "8659": [0.19444, 0.69444, 0, 0, 0.61111], + "8660": [-0.13313, 0.36687, 0, 0, 1.0], + "8661": [0.25, 0.75, 0, 0, 0.61111], + "8704": [0, 0.69444, 0, 0, 0.55556], + "8706": [0, 0.69444, 0.05556, 0.08334, 0.5309], + "8707": [0, 0.69444, 0, 0, 0.55556], + "8709": [0.05556, 0.75, 0, 0, 0.5], + "8711": [0, 0.68333, 0, 0, 0.83334], + "8712": [0.0391, 0.5391, 0, 0, 0.66667], + "8715": [0.0391, 0.5391, 0, 0, 0.66667], + "8722": [0.08333, 0.58333, 0, 0, 0.77778], + "8723": [0.08333, 0.58333, 0, 0, 0.77778], + "8725": [0.25, 0.75, 0, 0, 0.5], + "8726": [0.25, 0.75, 0, 0, 0.5], + "8727": [-0.03472, 0.46528, 0, 0, 0.5], + "8728": [-0.05555, 0.44445, 0, 0, 0.5], + "8729": [-0.05555, 0.44445, 0, 0, 0.5], + "8730": [0.2, 0.8, 0, 0, 0.83334], + "8733": [0, 0.43056, 0, 0, 0.77778], + "8734": [0, 0.43056, 0, 0, 1.0], + "8736": [0, 0.69224, 0, 0, 0.72222], + "8739": [0.25, 0.75, 0, 0, 0.27778], + "8741": [0.25, 0.75, 0, 0, 0.5], + "8743": [0, 0.55556, 0, 0, 0.66667], + "8744": [0, 0.55556, 0, 0, 0.66667], + "8745": [0, 0.55556, 0, 0, 0.66667], + "8746": [0, 0.55556, 0, 0, 0.66667], + "8747": [0.19444, 0.69444, 0.11111, 0, 0.41667], + "8764": [-0.13313, 0.36687, 0, 0, 0.77778], + "8768": [0.19444, 0.69444, 0, 0, 0.27778], + "8771": [-0.03625, 0.46375, 0, 0, 0.77778], + "8773": [-0.022, 0.589, 0, 0, 1.0], + "8776": [-0.01688, 0.48312, 0, 0, 0.77778], + "8781": [-0.03625, 0.46375, 0, 0, 0.77778], + "8784": [-0.133, 0.67, 0, 0, 0.778], + "8801": [-0.03625, 0.46375, 0, 0, 0.77778], + "8804": [0.13597, 0.63597, 0, 0, 0.77778], + "8805": [0.13597, 0.63597, 0, 0, 0.77778], + "8810": [0.0391, 0.5391, 0, 0, 1.0], + "8811": [0.0391, 0.5391, 0, 0, 1.0], + "8826": [0.0391, 0.5391, 0, 0, 0.77778], + "8827": [0.0391, 0.5391, 0, 0, 0.77778], + "8834": [0.0391, 0.5391, 0, 0, 0.77778], + "8835": [0.0391, 0.5391, 0, 0, 0.77778], + "8838": [0.13597, 0.63597, 0, 0, 0.77778], + "8839": [0.13597, 0.63597, 0, 0, 0.77778], + "8846": [0, 0.55556, 0, 0, 0.66667], + "8849": [0.13597, 0.63597, 0, 0, 0.77778], + "8850": [0.13597, 0.63597, 0, 0, 0.77778], + "8851": [0, 0.55556, 0, 0, 0.66667], + "8852": [0, 0.55556, 0, 0, 0.66667], + "8853": [0.08333, 0.58333, 0, 0, 0.77778], + "8854": [0.08333, 0.58333, 0, 0, 0.77778], + "8855": [0.08333, 0.58333, 0, 0, 0.77778], + "8856": [0.08333, 0.58333, 0, 0, 0.77778], + "8857": [0.08333, 0.58333, 0, 0, 0.77778], + "8866": [0, 0.69444, 0, 0, 0.61111], + "8867": [0, 0.69444, 0, 0, 0.61111], + "8868": [0, 0.69444, 0, 0, 0.77778], + "8869": [0, 0.69444, 0, 0, 0.77778], + "8872": [0.249, 0.75, 0, 0, 0.867], + "8900": [-0.05555, 0.44445, 0, 0, 0.5], + "8901": [-0.05555, 0.44445, 0, 0, 0.27778], + "8902": [-0.03472, 0.46528, 0, 0, 0.5], + "8904": [0.005, 0.505, 0, 0, 0.9], + "8942": [0.03, 0.9, 0, 0, 0.278], + "8943": [-0.19, 0.31, 0, 0, 1.172], + "8945": [-0.1, 0.82, 0, 0, 1.282], + "8968": [0.25, 0.75, 0, 0, 0.44445], + "8969": [0.25, 0.75, 0, 0, 0.44445], + "8970": [0.25, 0.75, 0, 0, 0.44445], + "8971": [0.25, 0.75, 0, 0, 0.44445], + "8994": [-0.14236, 0.35764, 0, 0, 1.0], + "8995": [-0.14236, 0.35764, 0, 0, 1.0], + "9136": [0.244, 0.744, 0, 0, 0.412], + "9137": [0.244, 0.744, 0, 0, 0.412], + "9651": [0.19444, 0.69444, 0, 0, 0.88889], + "9657": [-0.03472, 0.46528, 0, 0, 0.5], + "9661": [0.19444, 0.69444, 0, 0, 0.88889], + "9667": [-0.03472, 0.46528, 0, 0, 0.5], + "9711": [0.19444, 0.69444, 0, 0, 1.0], + "9824": [0.12963, 0.69444, 0, 0, 0.77778], + "9825": [0.12963, 0.69444, 0, 0, 0.77778], + "9826": [0.12963, 0.69444, 0, 0, 0.77778], + "9827": [0.12963, 0.69444, 0, 0, 0.77778], + "9837": [0, 0.75, 0, 0, 0.38889], + "9838": [0.19444, 0.69444, 0, 0, 0.38889], + "9839": [0.19444, 0.69444, 0, 0, 0.38889], + "10216": [0.25, 0.75, 0, 0, 0.38889], + "10217": [0.25, 0.75, 0, 0, 0.38889], + "10222": [0.244, 0.744, 0, 0, 0.412], + "10223": [0.244, 0.744, 0, 0, 0.412], + "10229": [0.011, 0.511, 0, 0, 1.609], + "10230": [0.011, 0.511, 0, 0, 1.638], + "10231": [0.011, 0.511, 0, 0, 1.859], + "10232": [0.024, 0.525, 0, 0, 1.609], + "10233": [0.024, 0.525, 0, 0, 1.638], + "10234": [0.024, 0.525, 0, 0, 1.858], + "10236": [0.011, 0.511, 0, 0, 1.638], + "10815": [0, 0.68333, 0, 0, 0.75], + "10927": [0.13597, 0.63597, 0, 0, 0.77778], + "10928": [0.13597, 0.63597, 0, 0, 0.77778], + "57376": [0.19444, 0.69444, 0, 0, 0] + }, + "Math-BoldItalic": { + "65": [0, 0.68611, 0, 0, 0.86944], + "66": [0, 0.68611, 0.04835, 0, 0.8664], + "67": [0, 0.68611, 0.06979, 0, 0.81694], + "68": [0, 0.68611, 0.03194, 0, 0.93812], + "69": [0, 0.68611, 0.05451, 0, 0.81007], + "70": [0, 0.68611, 0.15972, 0, 0.68889], + "71": [0, 0.68611, 0, 0, 0.88673], + "72": [0, 0.68611, 0.08229, 0, 0.98229], + "73": [0, 0.68611, 0.07778, 0, 0.51111], + "74": [0, 0.68611, 0.10069, 0, 0.63125], + "75": [0, 0.68611, 0.06979, 0, 0.97118], + "76": [0, 0.68611, 0, 0, 0.75555], + "77": [0, 0.68611, 0.11424, 0, 1.14201], + "78": [0, 0.68611, 0.11424, 0, 0.95034], + "79": [0, 0.68611, 0.03194, 0, 0.83666], + "80": [0, 0.68611, 0.15972, 0, 0.72309], + "81": [0.19444, 0.68611, 0, 0, 0.86861], + "82": [0, 0.68611, 0.00421, 0, 0.87235], + "83": [0, 0.68611, 0.05382, 0, 0.69271], + "84": [0, 0.68611, 0.15972, 0, 0.63663], + "85": [0, 0.68611, 0.11424, 0, 0.80027], + "86": [0, 0.68611, 0.25555, 0, 0.67778], + "87": [0, 0.68611, 0.15972, 0, 1.09305], + "88": [0, 0.68611, 0.07778, 0, 0.94722], + "89": [0, 0.68611, 0.25555, 0, 0.67458], + "90": [0, 0.68611, 0.06979, 0, 0.77257], + "97": [0, 0.44444, 0, 0, 0.63287], + "98": [0, 0.69444, 0, 0, 0.52083], + "99": [0, 0.44444, 0, 0, 0.51342], + "100": [0, 0.69444, 0, 0, 0.60972], + "101": [0, 0.44444, 0, 0, 0.55361], + "102": [0.19444, 0.69444, 0.11042, 0, 0.56806], + "103": [0.19444, 0.44444, 0.03704, 0, 0.5449], + "104": [0, 0.69444, 0, 0, 0.66759], + "105": [0, 0.69326, 0, 0, 0.4048], + "106": [0.19444, 0.69326, 0.0622, 0, 0.47083], + "107": [0, 0.69444, 0.01852, 0, 0.6037], + "108": [0, 0.69444, 0.0088, 0, 0.34815], + "109": [0, 0.44444, 0, 0, 1.0324], + "110": [0, 0.44444, 0, 0, 0.71296], + "111": [0, 0.44444, 0, 0, 0.58472], + "112": [0.19444, 0.44444, 0, 0, 0.60092], + "113": [0.19444, 0.44444, 0.03704, 0, 0.54213], + "114": [0, 0.44444, 0.03194, 0, 0.5287], + "115": [0, 0.44444, 0, 0, 0.53125], + "116": [0, 0.63492, 0, 0, 0.41528], + "117": [0, 0.44444, 0, 0, 0.68102], + "118": [0, 0.44444, 0.03704, 0, 0.56666], + "119": [0, 0.44444, 0.02778, 0, 0.83148], + "120": [0, 0.44444, 0, 0, 0.65903], + "121": [0.19444, 0.44444, 0.03704, 0, 0.59028], + "122": [0, 0.44444, 0.04213, 0, 0.55509], + "915": [0, 0.68611, 0.15972, 0, 0.65694], + "916": [0, 0.68611, 0, 0, 0.95833], + "920": [0, 0.68611, 0.03194, 0, 0.86722], + "923": [0, 0.68611, 0, 0, 0.80555], + "926": [0, 0.68611, 0.07458, 0, 0.84125], + "928": [0, 0.68611, 0.08229, 0, 0.98229], + "931": [0, 0.68611, 0.05451, 0, 0.88507], + "933": [0, 0.68611, 0.15972, 0, 0.67083], + "934": [0, 0.68611, 0, 0, 0.76666], + "936": [0, 0.68611, 0.11653, 0, 0.71402], + "937": [0, 0.68611, 0.04835, 0, 0.8789], + "945": [0, 0.44444, 0, 0, 0.76064], + "946": [0.19444, 0.69444, 0.03403, 0, 0.65972], + "947": [0.19444, 0.44444, 0.06389, 0, 0.59003], + "948": [0, 0.69444, 0.03819, 0, 0.52222], + "949": [0, 0.44444, 0, 0, 0.52882], + "950": [0.19444, 0.69444, 0.06215, 0, 0.50833], + "951": [0.19444, 0.44444, 0.03704, 0, 0.6], + "952": [0, 0.69444, 0.03194, 0, 0.5618], + "953": [0, 0.44444, 0, 0, 0.41204], + "954": [0, 0.44444, 0, 0, 0.66759], + "955": [0, 0.69444, 0, 0, 0.67083], + "956": [0.19444, 0.44444, 0, 0, 0.70787], + "957": [0, 0.44444, 0.06898, 0, 0.57685], + "958": [0.19444, 0.69444, 0.03021, 0, 0.50833], + "959": [0, 0.44444, 0, 0, 0.58472], + "960": [0, 0.44444, 0.03704, 0, 0.68241], + "961": [0.19444, 0.44444, 0, 0, 0.6118], + "962": [0.09722, 0.44444, 0.07917, 0, 0.42361], + "963": [0, 0.44444, 0.03704, 0, 0.68588], + "964": [0, 0.44444, 0.13472, 0, 0.52083], + "965": [0, 0.44444, 0.03704, 0, 0.63055], + "966": [0.19444, 0.44444, 0, 0, 0.74722], + "967": [0.19444, 0.44444, 0, 0, 0.71805], + "968": [0.19444, 0.69444, 0.03704, 0, 0.75833], + "969": [0, 0.44444, 0.03704, 0, 0.71782], + "977": [0, 0.69444, 0, 0, 0.69155], + "981": [0.19444, 0.69444, 0, 0, 0.7125], + "982": [0, 0.44444, 0.03194, 0, 0.975], + "1009": [0.19444, 0.44444, 0, 0, 0.6118], + "1013": [0, 0.44444, 0, 0, 0.48333] + }, + "Math-Italic": { + "65": [0, 0.68333, 0, 0.13889, 0.75], + "66": [0, 0.68333, 0.05017, 0.08334, 0.75851], + "67": [0, 0.68333, 0.07153, 0.08334, 0.71472], + "68": [0, 0.68333, 0.02778, 0.05556, 0.82792], + "69": [0, 0.68333, 0.05764, 0.08334, 0.7382], + "70": [0, 0.68333, 0.13889, 0.08334, 0.64306], + "71": [0, 0.68333, 0, 0.08334, 0.78625], + "72": [0, 0.68333, 0.08125, 0.05556, 0.83125], + "73": [0, 0.68333, 0.07847, 0.11111, 0.43958], + "74": [0, 0.68333, 0.09618, 0.16667, 0.55451], + "75": [0, 0.68333, 0.07153, 0.05556, 0.84931], + "76": [0, 0.68333, 0, 0.02778, 0.68056], + "77": [0, 0.68333, 0.10903, 0.08334, 0.97014], + "78": [0, 0.68333, 0.10903, 0.08334, 0.80347], + "79": [0, 0.68333, 0.02778, 0.08334, 0.76278], + "80": [0, 0.68333, 0.13889, 0.08334, 0.64201], + "81": [0.19444, 0.68333, 0, 0.08334, 0.79056], + "82": [0, 0.68333, 0.00773, 0.08334, 0.75929], + "83": [0, 0.68333, 0.05764, 0.08334, 0.6132], + "84": [0, 0.68333, 0.13889, 0.08334, 0.58438], + "85": [0, 0.68333, 0.10903, 0.02778, 0.68278], + "86": [0, 0.68333, 0.22222, 0, 0.58333], + "87": [0, 0.68333, 0.13889, 0, 0.94445], + "88": [0, 0.68333, 0.07847, 0.08334, 0.82847], + "89": [0, 0.68333, 0.22222, 0, 0.58056], + "90": [0, 0.68333, 0.07153, 0.08334, 0.68264], + "97": [0, 0.43056, 0, 0, 0.52859], + "98": [0, 0.69444, 0, 0, 0.42917], + "99": [0, 0.43056, 0, 0.05556, 0.43276], + "100": [0, 0.69444, 0, 0.16667, 0.52049], + "101": [0, 0.43056, 0, 0.05556, 0.46563], + "102": [0.19444, 0.69444, 0.10764, 0.16667, 0.48959], + "103": [0.19444, 0.43056, 0.03588, 0.02778, 0.47697], + "104": [0, 0.69444, 0, 0, 0.57616], + "105": [0, 0.65952, 0, 0, 0.34451], + "106": [0.19444, 0.65952, 0.05724, 0, 0.41181], + "107": [0, 0.69444, 0.03148, 0, 0.5206], + "108": [0, 0.69444, 0.01968, 0.08334, 0.29838], + "109": [0, 0.43056, 0, 0, 0.87801], + "110": [0, 0.43056, 0, 0, 0.60023], + "111": [0, 0.43056, 0, 0.05556, 0.48472], + "112": [0.19444, 0.43056, 0, 0.08334, 0.50313], + "113": [0.19444, 0.43056, 0.03588, 0.08334, 0.44641], + "114": [0, 0.43056, 0.02778, 0.05556, 0.45116], + "115": [0, 0.43056, 0, 0.05556, 0.46875], + "116": [0, 0.61508, 0, 0.08334, 0.36111], + "117": [0, 0.43056, 0, 0.02778, 0.57246], + "118": [0, 0.43056, 0.03588, 0.02778, 0.48472], + "119": [0, 0.43056, 0.02691, 0.08334, 0.71592], + "120": [0, 0.43056, 0, 0.02778, 0.57153], + "121": [0.19444, 0.43056, 0.03588, 0.05556, 0.49028], + "122": [0, 0.43056, 0.04398, 0.05556, 0.46505], + "915": [0, 0.68333, 0.13889, 0.08334, 0.61528], + "916": [0, 0.68333, 0, 0.16667, 0.83334], + "920": [0, 0.68333, 0.02778, 0.08334, 0.76278], + "923": [0, 0.68333, 0, 0.16667, 0.69445], + "926": [0, 0.68333, 0.07569, 0.08334, 0.74236], + "928": [0, 0.68333, 0.08125, 0.05556, 0.83125], + "931": [0, 0.68333, 0.05764, 0.08334, 0.77986], + "933": [0, 0.68333, 0.13889, 0.05556, 0.58333], + "934": [0, 0.68333, 0, 0.08334, 0.66667], + "936": [0, 0.68333, 0.11, 0.05556, 0.61222], + "937": [0, 0.68333, 0.05017, 0.08334, 0.7724], + "945": [0, 0.43056, 0.0037, 0.02778, 0.6397], + "946": [0.19444, 0.69444, 0.05278, 0.08334, 0.56563], + "947": [0.19444, 0.43056, 0.05556, 0, 0.51773], + "948": [0, 0.69444, 0.03785, 0.05556, 0.44444], + "949": [0, 0.43056, 0, 0.08334, 0.46632], + "950": [0.19444, 0.69444, 0.07378, 0.08334, 0.4375], + "951": [0.19444, 0.43056, 0.03588, 0.05556, 0.49653], + "952": [0, 0.69444, 0.02778, 0.08334, 0.46944], + "953": [0, 0.43056, 0, 0.05556, 0.35394], + "954": [0, 0.43056, 0, 0, 0.57616], + "955": [0, 0.69444, 0, 0, 0.58334], + "956": [0.19444, 0.43056, 0, 0.02778, 0.60255], + "957": [0, 0.43056, 0.06366, 0.02778, 0.49398], + "958": [0.19444, 0.69444, 0.04601, 0.11111, 0.4375], + "959": [0, 0.43056, 0, 0.05556, 0.48472], + "960": [0, 0.43056, 0.03588, 0, 0.57003], + "961": [0.19444, 0.43056, 0, 0.08334, 0.51702], + "962": [0.09722, 0.43056, 0.07986, 0.08334, 0.36285], + "963": [0, 0.43056, 0.03588, 0, 0.57141], + "964": [0, 0.43056, 0.1132, 0.02778, 0.43715], + "965": [0, 0.43056, 0.03588, 0.02778, 0.54028], + "966": [0.19444, 0.43056, 0, 0.08334, 0.65417], + "967": [0.19444, 0.43056, 0, 0.05556, 0.62569], + "968": [0.19444, 0.69444, 0.03588, 0.11111, 0.65139], + "969": [0, 0.43056, 0.03588, 0, 0.62245], + "977": [0, 0.69444, 0, 0.08334, 0.59144], + "981": [0.19444, 0.69444, 0, 0.08334, 0.59583], + "982": [0, 0.43056, 0.02778, 0, 0.82813], + "1009": [0.19444, 0.43056, 0, 0.08334, 0.51702], + "1013": [0, 0.43056, 0, 0.05556, 0.4059] + }, + "Math-Regular": { + "65": [0, 0.68333, 0, 0.13889, 0.75], + "66": [0, 0.68333, 0.05017, 0.08334, 0.75851], + "67": [0, 0.68333, 0.07153, 0.08334, 0.71472], + "68": [0, 0.68333, 0.02778, 0.05556, 0.82792], + "69": [0, 0.68333, 0.05764, 0.08334, 0.7382], + "70": [0, 0.68333, 0.13889, 0.08334, 0.64306], + "71": [0, 0.68333, 0, 0.08334, 0.78625], + "72": [0, 0.68333, 0.08125, 0.05556, 0.83125], + "73": [0, 0.68333, 0.07847, 0.11111, 0.43958], + "74": [0, 0.68333, 0.09618, 0.16667, 0.55451], + "75": [0, 0.68333, 0.07153, 0.05556, 0.84931], + "76": [0, 0.68333, 0, 0.02778, 0.68056], + "77": [0, 0.68333, 0.10903, 0.08334, 0.97014], + "78": [0, 0.68333, 0.10903, 0.08334, 0.80347], + "79": [0, 0.68333, 0.02778, 0.08334, 0.76278], + "80": [0, 0.68333, 0.13889, 0.08334, 0.64201], + "81": [0.19444, 0.68333, 0, 0.08334, 0.79056], + "82": [0, 0.68333, 0.00773, 0.08334, 0.75929], + "83": [0, 0.68333, 0.05764, 0.08334, 0.6132], + "84": [0, 0.68333, 0.13889, 0.08334, 0.58438], + "85": [0, 0.68333, 0.10903, 0.02778, 0.68278], + "86": [0, 0.68333, 0.22222, 0, 0.58333], + "87": [0, 0.68333, 0.13889, 0, 0.94445], + "88": [0, 0.68333, 0.07847, 0.08334, 0.82847], + "89": [0, 0.68333, 0.22222, 0, 0.58056], + "90": [0, 0.68333, 0.07153, 0.08334, 0.68264], + "97": [0, 0.43056, 0, 0, 0.52859], + "98": [0, 0.69444, 0, 0, 0.42917], + "99": [0, 0.43056, 0, 0.05556, 0.43276], + "100": [0, 0.69444, 0, 0.16667, 0.52049], + "101": [0, 0.43056, 0, 0.05556, 0.46563], + "102": [0.19444, 0.69444, 0.10764, 0.16667, 0.48959], + "103": [0.19444, 0.43056, 0.03588, 0.02778, 0.47697], + "104": [0, 0.69444, 0, 0, 0.57616], + "105": [0, 0.65952, 0, 0, 0.34451], + "106": [0.19444, 0.65952, 0.05724, 0, 0.41181], + "107": [0, 0.69444, 0.03148, 0, 0.5206], + "108": [0, 0.69444, 0.01968, 0.08334, 0.29838], + "109": [0, 0.43056, 0, 0, 0.87801], + "110": [0, 0.43056, 0, 0, 0.60023], + "111": [0, 0.43056, 0, 0.05556, 0.48472], + "112": [0.19444, 0.43056, 0, 0.08334, 0.50313], + "113": [0.19444, 0.43056, 0.03588, 0.08334, 0.44641], + "114": [0, 0.43056, 0.02778, 0.05556, 0.45116], + "115": [0, 0.43056, 0, 0.05556, 0.46875], + "116": [0, 0.61508, 0, 0.08334, 0.36111], + "117": [0, 0.43056, 0, 0.02778, 0.57246], + "118": [0, 0.43056, 0.03588, 0.02778, 0.48472], + "119": [0, 0.43056, 0.02691, 0.08334, 0.71592], + "120": [0, 0.43056, 0, 0.02778, 0.57153], + "121": [0.19444, 0.43056, 0.03588, 0.05556, 0.49028], + "122": [0, 0.43056, 0.04398, 0.05556, 0.46505], + "915": [0, 0.68333, 0.13889, 0.08334, 0.61528], + "916": [0, 0.68333, 0, 0.16667, 0.83334], + "920": [0, 0.68333, 0.02778, 0.08334, 0.76278], + "923": [0, 0.68333, 0, 0.16667, 0.69445], + "926": [0, 0.68333, 0.07569, 0.08334, 0.74236], + "928": [0, 0.68333, 0.08125, 0.05556, 0.83125], + "931": [0, 0.68333, 0.05764, 0.08334, 0.77986], + "933": [0, 0.68333, 0.13889, 0.05556, 0.58333], + "934": [0, 0.68333, 0, 0.08334, 0.66667], + "936": [0, 0.68333, 0.11, 0.05556, 0.61222], + "937": [0, 0.68333, 0.05017, 0.08334, 0.7724], + "945": [0, 0.43056, 0.0037, 0.02778, 0.6397], + "946": [0.19444, 0.69444, 0.05278, 0.08334, 0.56563], + "947": [0.19444, 0.43056, 0.05556, 0, 0.51773], + "948": [0, 0.69444, 0.03785, 0.05556, 0.44444], + "949": [0, 0.43056, 0, 0.08334, 0.46632], + "950": [0.19444, 0.69444, 0.07378, 0.08334, 0.4375], + "951": [0.19444, 0.43056, 0.03588, 0.05556, 0.49653], + "952": [0, 0.69444, 0.02778, 0.08334, 0.46944], + "953": [0, 0.43056, 0, 0.05556, 0.35394], + "954": [0, 0.43056, 0, 0, 0.57616], + "955": [0, 0.69444, 0, 0, 0.58334], + "956": [0.19444, 0.43056, 0, 0.02778, 0.60255], + "957": [0, 0.43056, 0.06366, 0.02778, 0.49398], + "958": [0.19444, 0.69444, 0.04601, 0.11111, 0.4375], + "959": [0, 0.43056, 0, 0.05556, 0.48472], + "960": [0, 0.43056, 0.03588, 0, 0.57003], + "961": [0.19444, 0.43056, 0, 0.08334, 0.51702], + "962": [0.09722, 0.43056, 0.07986, 0.08334, 0.36285], + "963": [0, 0.43056, 0.03588, 0, 0.57141], + "964": [0, 0.43056, 0.1132, 0.02778, 0.43715], + "965": [0, 0.43056, 0.03588, 0.02778, 0.54028], + "966": [0.19444, 0.43056, 0, 0.08334, 0.65417], + "967": [0.19444, 0.43056, 0, 0.05556, 0.62569], + "968": [0.19444, 0.69444, 0.03588, 0.11111, 0.65139], + "969": [0, 0.43056, 0.03588, 0, 0.62245], + "977": [0, 0.69444, 0, 0.08334, 0.59144], + "981": [0.19444, 0.69444, 0, 0.08334, 0.59583], + "982": [0, 0.43056, 0.02778, 0, 0.82813], + "1009": [0.19444, 0.43056, 0, 0.08334, 0.51702], + "1013": [0, 0.43056, 0, 0.05556, 0.4059] + }, + "SansSerif-Bold": { + "33": [0, 0.69444, 0, 0, 0.36667], + "34": [0, 0.69444, 0, 0, 0.55834], + "35": [0.19444, 0.69444, 0, 0, 0.91667], + "36": [0.05556, 0.75, 0, 0, 0.55], + "37": [0.05556, 0.75, 0, 0, 1.02912], + "38": [0, 0.69444, 0, 0, 0.83056], + "39": [0, 0.69444, 0, 0, 0.30556], + "40": [0.25, 0.75, 0, 0, 0.42778], + "41": [0.25, 0.75, 0, 0, 0.42778], + "42": [0, 0.75, 0, 0, 0.55], + "43": [0.11667, 0.61667, 0, 0, 0.85556], + "44": [0.10556, 0.13056, 0, 0, 0.30556], + "45": [0, 0.45833, 0, 0, 0.36667], + "46": [0, 0.13056, 0, 0, 0.30556], + "47": [0.25, 0.75, 0, 0, 0.55], + "48": [0, 0.69444, 0, 0, 0.55], + "49": [0, 0.69444, 0, 0, 0.55], + "50": [0, 0.69444, 0, 0, 0.55], + "51": [0, 0.69444, 0, 0, 0.55], + "52": [0, 0.69444, 0, 0, 0.55], + "53": [0, 0.69444, 0, 0, 0.55], + "54": [0, 0.69444, 0, 0, 0.55], + "55": [0, 0.69444, 0, 0, 0.55], + "56": [0, 0.69444, 0, 0, 0.55], + "57": [0, 0.69444, 0, 0, 0.55], + "58": [0, 0.45833, 0, 0, 0.30556], + "59": [0.10556, 0.45833, 0, 0, 0.30556], + "61": [-0.09375, 0.40625, 0, 0, 0.85556], + "63": [0, 0.69444, 0, 0, 0.51945], + "64": [0, 0.69444, 0, 0, 0.73334], + "65": [0, 0.69444, 0, 0, 0.73334], + "66": [0, 0.69444, 0, 0, 0.73334], + "67": [0, 0.69444, 0, 0, 0.70278], + "68": [0, 0.69444, 0, 0, 0.79445], + "69": [0, 0.69444, 0, 0, 0.64167], + "70": [0, 0.69444, 0, 0, 0.61111], + "71": [0, 0.69444, 0, 0, 0.73334], + "72": [0, 0.69444, 0, 0, 0.79445], + "73": [0, 0.69444, 0, 0, 0.33056], + "74": [0, 0.69444, 0, 0, 0.51945], + "75": [0, 0.69444, 0, 0, 0.76389], + "76": [0, 0.69444, 0, 0, 0.58056], + "77": [0, 0.69444, 0, 0, 0.97778], + "78": [0, 0.69444, 0, 0, 0.79445], + "79": [0, 0.69444, 0, 0, 0.79445], + "80": [0, 0.69444, 0, 0, 0.70278], + "81": [0.10556, 0.69444, 0, 0, 0.79445], + "82": [0, 0.69444, 0, 0, 0.70278], + "83": [0, 0.69444, 0, 0, 0.61111], + "84": [0, 0.69444, 0, 0, 0.73334], + "85": [0, 0.69444, 0, 0, 0.76389], + "86": [0, 0.69444, 0.01528, 0, 0.73334], + "87": [0, 0.69444, 0.01528, 0, 1.03889], + "88": [0, 0.69444, 0, 0, 0.73334], + "89": [0, 0.69444, 0.0275, 0, 0.73334], + "90": [0, 0.69444, 0, 0, 0.67223], + "91": [0.25, 0.75, 0, 0, 0.34306], + "93": [0.25, 0.75, 0, 0, 0.34306], + "94": [0, 0.69444, 0, 0, 0.55], + "95": [0.35, 0.10833, 0.03056, 0, 0.55], + "97": [0, 0.45833, 0, 0, 0.525], + "98": [0, 0.69444, 0, 0, 0.56111], + "99": [0, 0.45833, 0, 0, 0.48889], + "100": [0, 0.69444, 0, 0, 0.56111], + "101": [0, 0.45833, 0, 0, 0.51111], + "102": [0, 0.69444, 0.07639, 0, 0.33611], + "103": [0.19444, 0.45833, 0.01528, 0, 0.55], + "104": [0, 0.69444, 0, 0, 0.56111], + "105": [0, 0.69444, 0, 0, 0.25556], + "106": [0.19444, 0.69444, 0, 0, 0.28611], + "107": [0, 0.69444, 0, 0, 0.53056], + "108": [0, 0.69444, 0, 0, 0.25556], + "109": [0, 0.45833, 0, 0, 0.86667], + "110": [0, 0.45833, 0, 0, 0.56111], + "111": [0, 0.45833, 0, 0, 0.55], + "112": [0.19444, 0.45833, 0, 0, 0.56111], + "113": [0.19444, 0.45833, 0, 0, 0.56111], + "114": [0, 0.45833, 0.01528, 0, 0.37222], + "115": [0, 0.45833, 0, 0, 0.42167], + "116": [0, 0.58929, 0, 0, 0.40417], + "117": [0, 0.45833, 0, 0, 0.56111], + "118": [0, 0.45833, 0.01528, 0, 0.5], + "119": [0, 0.45833, 0.01528, 0, 0.74445], + "120": [0, 0.45833, 0, 0, 0.5], + "121": [0.19444, 0.45833, 0.01528, 0, 0.5], + "122": [0, 0.45833, 0, 0, 0.47639], + "126": [0.35, 0.34444, 0, 0, 0.55], + "168": [0, 0.69444, 0, 0, 0.55], + "176": [0, 0.69444, 0, 0, 0.73334], + "180": [0, 0.69444, 0, 0, 0.55], + "184": [0.17014, 0, 0, 0, 0.48889], + "305": [0, 0.45833, 0, 0, 0.25556], + "567": [0.19444, 0.45833, 0, 0, 0.28611], + "710": [0, 0.69444, 0, 0, 0.55], + "711": [0, 0.63542, 0, 0, 0.55], + "713": [0, 0.63778, 0, 0, 0.55], + "728": [0, 0.69444, 0, 0, 0.55], + "729": [0, 0.69444, 0, 0, 0.30556], + "730": [0, 0.69444, 0, 0, 0.73334], + "732": [0, 0.69444, 0, 0, 0.55], + "733": [0, 0.69444, 0, 0, 0.55], + "915": [0, 0.69444, 0, 0, 0.58056], + "916": [0, 0.69444, 0, 0, 0.91667], + "920": [0, 0.69444, 0, 0, 0.85556], + "923": [0, 0.69444, 0, 0, 0.67223], + "926": [0, 0.69444, 0, 0, 0.73334], + "928": [0, 0.69444, 0, 0, 0.79445], + "931": [0, 0.69444, 0, 0, 0.79445], + "933": [0, 0.69444, 0, 0, 0.85556], + "934": [0, 0.69444, 0, 0, 0.79445], + "936": [0, 0.69444, 0, 0, 0.85556], + "937": [0, 0.69444, 0, 0, 0.79445], + "8211": [0, 0.45833, 0.03056, 0, 0.55], + "8212": [0, 0.45833, 0.03056, 0, 1.10001], + "8216": [0, 0.69444, 0, 0, 0.30556], + "8217": [0, 0.69444, 0, 0, 0.30556], + "8220": [0, 0.69444, 0, 0, 0.55834], + "8221": [0, 0.69444, 0, 0, 0.55834] + }, + "SansSerif-Italic": { + "33": [0, 0.69444, 0.05733, 0, 0.31945], + "34": [0, 0.69444, 0.00316, 0, 0.5], + "35": [0.19444, 0.69444, 0.05087, 0, 0.83334], + "36": [0.05556, 0.75, 0.11156, 0, 0.5], + "37": [0.05556, 0.75, 0.03126, 0, 0.83334], + "38": [0, 0.69444, 0.03058, 0, 0.75834], + "39": [0, 0.69444, 0.07816, 0, 0.27778], + "40": [0.25, 0.75, 0.13164, 0, 0.38889], + "41": [0.25, 0.75, 0.02536, 0, 0.38889], + "42": [0, 0.75, 0.11775, 0, 0.5], + "43": [0.08333, 0.58333, 0.02536, 0, 0.77778], + "44": [0.125, 0.08333, 0, 0, 0.27778], + "45": [0, 0.44444, 0.01946, 0, 0.33333], + "46": [0, 0.08333, 0, 0, 0.27778], + "47": [0.25, 0.75, 0.13164, 0, 0.5], + "48": [0, 0.65556, 0.11156, 0, 0.5], + "49": [0, 0.65556, 0.11156, 0, 0.5], + "50": [0, 0.65556, 0.11156, 0, 0.5], + "51": [0, 0.65556, 0.11156, 0, 0.5], + "52": [0, 0.65556, 0.11156, 0, 0.5], + "53": [0, 0.65556, 0.11156, 0, 0.5], + "54": [0, 0.65556, 0.11156, 0, 0.5], + "55": [0, 0.65556, 0.11156, 0, 0.5], + "56": [0, 0.65556, 0.11156, 0, 0.5], + "57": [0, 0.65556, 0.11156, 0, 0.5], + "58": [0, 0.44444, 0.02502, 0, 0.27778], + "59": [0.125, 0.44444, 0.02502, 0, 0.27778], + "61": [-0.13, 0.37, 0.05087, 0, 0.77778], + "63": [0, 0.69444, 0.11809, 0, 0.47222], + "64": [0, 0.69444, 0.07555, 0, 0.66667], + "65": [0, 0.69444, 0, 0, 0.66667], + "66": [0, 0.69444, 0.08293, 0, 0.66667], + "67": [0, 0.69444, 0.11983, 0, 0.63889], + "68": [0, 0.69444, 0.07555, 0, 0.72223], + "69": [0, 0.69444, 0.11983, 0, 0.59722], + "70": [0, 0.69444, 0.13372, 0, 0.56945], + "71": [0, 0.69444, 0.11983, 0, 0.66667], + "72": [0, 0.69444, 0.08094, 0, 0.70834], + "73": [0, 0.69444, 0.13372, 0, 0.27778], + "74": [0, 0.69444, 0.08094, 0, 0.47222], + "75": [0, 0.69444, 0.11983, 0, 0.69445], + "76": [0, 0.69444, 0, 0, 0.54167], + "77": [0, 0.69444, 0.08094, 0, 0.875], + "78": [0, 0.69444, 0.08094, 0, 0.70834], + "79": [0, 0.69444, 0.07555, 0, 0.73611], + "80": [0, 0.69444, 0.08293, 0, 0.63889], + "81": [0.125, 0.69444, 0.07555, 0, 0.73611], + "82": [0, 0.69444, 0.08293, 0, 0.64584], + "83": [0, 0.69444, 0.09205, 0, 0.55556], + "84": [0, 0.69444, 0.13372, 0, 0.68056], + "85": [0, 0.69444, 0.08094, 0, 0.6875], + "86": [0, 0.69444, 0.1615, 0, 0.66667], + "87": [0, 0.69444, 0.1615, 0, 0.94445], + "88": [0, 0.69444, 0.13372, 0, 0.66667], + "89": [0, 0.69444, 0.17261, 0, 0.66667], + "90": [0, 0.69444, 0.11983, 0, 0.61111], + "91": [0.25, 0.75, 0.15942, 0, 0.28889], + "93": [0.25, 0.75, 0.08719, 0, 0.28889], + "94": [0, 0.69444, 0.0799, 0, 0.5], + "95": [0.35, 0.09444, 0.08616, 0, 0.5], + "97": [0, 0.44444, 0.00981, 0, 0.48056], + "98": [0, 0.69444, 0.03057, 0, 0.51667], + "99": [0, 0.44444, 0.08336, 0, 0.44445], + "100": [0, 0.69444, 0.09483, 0, 0.51667], + "101": [0, 0.44444, 0.06778, 0, 0.44445], + "102": [0, 0.69444, 0.21705, 0, 0.30556], + "103": [0.19444, 0.44444, 0.10836, 0, 0.5], + "104": [0, 0.69444, 0.01778, 0, 0.51667], + "105": [0, 0.67937, 0.09718, 0, 0.23889], + "106": [0.19444, 0.67937, 0.09162, 0, 0.26667], + "107": [0, 0.69444, 0.08336, 0, 0.48889], + "108": [0, 0.69444, 0.09483, 0, 0.23889], + "109": [0, 0.44444, 0.01778, 0, 0.79445], + "110": [0, 0.44444, 0.01778, 0, 0.51667], + "111": [0, 0.44444, 0.06613, 0, 0.5], + "112": [0.19444, 0.44444, 0.0389, 0, 0.51667], + "113": [0.19444, 0.44444, 0.04169, 0, 0.51667], + "114": [0, 0.44444, 0.10836, 0, 0.34167], + "115": [0, 0.44444, 0.0778, 0, 0.38333], + "116": [0, 0.57143, 0.07225, 0, 0.36111], + "117": [0, 0.44444, 0.04169, 0, 0.51667], + "118": [0, 0.44444, 0.10836, 0, 0.46111], + "119": [0, 0.44444, 0.10836, 0, 0.68334], + "120": [0, 0.44444, 0.09169, 0, 0.46111], + "121": [0.19444, 0.44444, 0.10836, 0, 0.46111], + "122": [0, 0.44444, 0.08752, 0, 0.43472], + "126": [0.35, 0.32659, 0.08826, 0, 0.5], + "168": [0, 0.67937, 0.06385, 0, 0.5], + "176": [0, 0.69444, 0, 0, 0.73752], + "184": [0.17014, 0, 0, 0, 0.44445], + "305": [0, 0.44444, 0.04169, 0, 0.23889], + "567": [0.19444, 0.44444, 0.04169, 0, 0.26667], + "710": [0, 0.69444, 0.0799, 0, 0.5], + "711": [0, 0.63194, 0.08432, 0, 0.5], + "713": [0, 0.60889, 0.08776, 0, 0.5], + "714": [0, 0.69444, 0.09205, 0, 0.5], + "715": [0, 0.69444, 0, 0, 0.5], + "728": [0, 0.69444, 0.09483, 0, 0.5], + "729": [0, 0.67937, 0.07774, 0, 0.27778], + "730": [0, 0.69444, 0, 0, 0.73752], + "732": [0, 0.67659, 0.08826, 0, 0.5], + "733": [0, 0.69444, 0.09205, 0, 0.5], + "915": [0, 0.69444, 0.13372, 0, 0.54167], + "916": [0, 0.69444, 0, 0, 0.83334], + "920": [0, 0.69444, 0.07555, 0, 0.77778], + "923": [0, 0.69444, 0, 0, 0.61111], + "926": [0, 0.69444, 0.12816, 0, 0.66667], + "928": [0, 0.69444, 0.08094, 0, 0.70834], + "931": [0, 0.69444, 0.11983, 0, 0.72222], + "933": [0, 0.69444, 0.09031, 0, 0.77778], + "934": [0, 0.69444, 0.04603, 0, 0.72222], + "936": [0, 0.69444, 0.09031, 0, 0.77778], + "937": [0, 0.69444, 0.08293, 0, 0.72222], + "8211": [0, 0.44444, 0.08616, 0, 0.5], + "8212": [0, 0.44444, 0.08616, 0, 1.0], + "8216": [0, 0.69444, 0.07816, 0, 0.27778], + "8217": [0, 0.69444, 0.07816, 0, 0.27778], + "8220": [0, 0.69444, 0.14205, 0, 0.5], + "8221": [0, 0.69444, 0.00316, 0, 0.5] + }, + "SansSerif-Regular": { + "33": [0, 0.69444, 0, 0, 0.31945], + "34": [0, 0.69444, 0, 0, 0.5], + "35": [0.19444, 0.69444, 0, 0, 0.83334], + "36": [0.05556, 0.75, 0, 0, 0.5], + "37": [0.05556, 0.75, 0, 0, 0.83334], + "38": [0, 0.69444, 0, 0, 0.75834], + "39": [0, 0.69444, 0, 0, 0.27778], + "40": [0.25, 0.75, 0, 0, 0.38889], + "41": [0.25, 0.75, 0, 0, 0.38889], + "42": [0, 0.75, 0, 0, 0.5], + "43": [0.08333, 0.58333, 0, 0, 0.77778], + "44": [0.125, 0.08333, 0, 0, 0.27778], + "45": [0, 0.44444, 0, 0, 0.33333], + "46": [0, 0.08333, 0, 0, 0.27778], + "47": [0.25, 0.75, 0, 0, 0.5], + "48": [0, 0.65556, 0, 0, 0.5], + "49": [0, 0.65556, 0, 0, 0.5], + "50": [0, 0.65556, 0, 0, 0.5], + "51": [0, 0.65556, 0, 0, 0.5], + "52": [0, 0.65556, 0, 0, 0.5], + "53": [0, 0.65556, 0, 0, 0.5], + "54": [0, 0.65556, 0, 0, 0.5], + "55": [0, 0.65556, 0, 0, 0.5], + "56": [0, 0.65556, 0, 0, 0.5], + "57": [0, 0.65556, 0, 0, 0.5], + "58": [0, 0.44444, 0, 0, 0.27778], + "59": [0.125, 0.44444, 0, 0, 0.27778], + "61": [-0.13, 0.37, 0, 0, 0.77778], + "63": [0, 0.69444, 0, 0, 0.47222], + "64": [0, 0.69444, 0, 0, 0.66667], + "65": [0, 0.69444, 0, 0, 0.66667], + "66": [0, 0.69444, 0, 0, 0.66667], + "67": [0, 0.69444, 0, 0, 0.63889], + "68": [0, 0.69444, 0, 0, 0.72223], + "69": [0, 0.69444, 0, 0, 0.59722], + "70": [0, 0.69444, 0, 0, 0.56945], + "71": [0, 0.69444, 0, 0, 0.66667], + "72": [0, 0.69444, 0, 0, 0.70834], + "73": [0, 0.69444, 0, 0, 0.27778], + "74": [0, 0.69444, 0, 0, 0.47222], + "75": [0, 0.69444, 0, 0, 0.69445], + "76": [0, 0.69444, 0, 0, 0.54167], + "77": [0, 0.69444, 0, 0, 0.875], + "78": [0, 0.69444, 0, 0, 0.70834], + "79": [0, 0.69444, 0, 0, 0.73611], + "80": [0, 0.69444, 0, 0, 0.63889], + "81": [0.125, 0.69444, 0, 0, 0.73611], + "82": [0, 0.69444, 0, 0, 0.64584], + "83": [0, 0.69444, 0, 0, 0.55556], + "84": [0, 0.69444, 0, 0, 0.68056], + "85": [0, 0.69444, 0, 0, 0.6875], + "86": [0, 0.69444, 0.01389, 0, 0.66667], + "87": [0, 0.69444, 0.01389, 0, 0.94445], + "88": [0, 0.69444, 0, 0, 0.66667], + "89": [0, 0.69444, 0.025, 0, 0.66667], + "90": [0, 0.69444, 0, 0, 0.61111], + "91": [0.25, 0.75, 0, 0, 0.28889], + "93": [0.25, 0.75, 0, 0, 0.28889], + "94": [0, 0.69444, 0, 0, 0.5], + "95": [0.35, 0.09444, 0.02778, 0, 0.5], + "97": [0, 0.44444, 0, 0, 0.48056], + "98": [0, 0.69444, 0, 0, 0.51667], + "99": [0, 0.44444, 0, 0, 0.44445], + "100": [0, 0.69444, 0, 0, 0.51667], + "101": [0, 0.44444, 0, 0, 0.44445], + "102": [0, 0.69444, 0.06944, 0, 0.30556], + "103": [0.19444, 0.44444, 0.01389, 0, 0.5], + "104": [0, 0.69444, 0, 0, 0.51667], + "105": [0, 0.67937, 0, 0, 0.23889], + "106": [0.19444, 0.67937, 0, 0, 0.26667], + "107": [0, 0.69444, 0, 0, 0.48889], + "108": [0, 0.69444, 0, 0, 0.23889], + "109": [0, 0.44444, 0, 0, 0.79445], + "110": [0, 0.44444, 0, 0, 0.51667], + "111": [0, 0.44444, 0, 0, 0.5], + "112": [0.19444, 0.44444, 0, 0, 0.51667], + "113": [0.19444, 0.44444, 0, 0, 0.51667], + "114": [0, 0.44444, 0.01389, 0, 0.34167], + "115": [0, 0.44444, 0, 0, 0.38333], + "116": [0, 0.57143, 0, 0, 0.36111], + "117": [0, 0.44444, 0, 0, 0.51667], + "118": [0, 0.44444, 0.01389, 0, 0.46111], + "119": [0, 0.44444, 0.01389, 0, 0.68334], + "120": [0, 0.44444, 0, 0, 0.46111], + "121": [0.19444, 0.44444, 0.01389, 0, 0.46111], + "122": [0, 0.44444, 0, 0, 0.43472], + "126": [0.35, 0.32659, 0, 0, 0.5], + "168": [0, 0.67937, 0, 0, 0.5], + "176": [0, 0.69444, 0, 0, 0.66667], + "184": [0.17014, 0, 0, 0, 0.44445], + "305": [0, 0.44444, 0, 0, 0.23889], + "567": [0.19444, 0.44444, 0, 0, 0.26667], + "710": [0, 0.69444, 0, 0, 0.5], + "711": [0, 0.63194, 0, 0, 0.5], + "713": [0, 0.60889, 0, 0, 0.5], + "714": [0, 0.69444, 0, 0, 0.5], + "715": [0, 0.69444, 0, 0, 0.5], + "728": [0, 0.69444, 0, 0, 0.5], + "729": [0, 0.67937, 0, 0, 0.27778], + "730": [0, 0.69444, 0, 0, 0.66667], + "732": [0, 0.67659, 0, 0, 0.5], + "733": [0, 0.69444, 0, 0, 0.5], + "915": [0, 0.69444, 0, 0, 0.54167], + "916": [0, 0.69444, 0, 0, 0.83334], + "920": [0, 0.69444, 0, 0, 0.77778], + "923": [0, 0.69444, 0, 0, 0.61111], + "926": [0, 0.69444, 0, 0, 0.66667], + "928": [0, 0.69444, 0, 0, 0.70834], + "931": [0, 0.69444, 0, 0, 0.72222], + "933": [0, 0.69444, 0, 0, 0.77778], + "934": [0, 0.69444, 0, 0, 0.72222], + "936": [0, 0.69444, 0, 0, 0.77778], + "937": [0, 0.69444, 0, 0, 0.72222], + "8211": [0, 0.44444, 0.02778, 0, 0.5], + "8212": [0, 0.44444, 0.02778, 0, 1.0], + "8216": [0, 0.69444, 0, 0, 0.27778], + "8217": [0, 0.69444, 0, 0, 0.27778], + "8220": [0, 0.69444, 0, 0, 0.5], + "8221": [0, 0.69444, 0, 0, 0.5] + }, + "Script-Regular": { + "65": [0, 0.7, 0.22925, 0, 0.80253], + "66": [0, 0.7, 0.04087, 0, 0.90757], + "67": [0, 0.7, 0.1689, 0, 0.66619], + "68": [0, 0.7, 0.09371, 0, 0.77443], + "69": [0, 0.7, 0.18583, 0, 0.56162], + "70": [0, 0.7, 0.13634, 0, 0.89544], + "71": [0, 0.7, 0.17322, 0, 0.60961], + "72": [0, 0.7, 0.29694, 0, 0.96919], + "73": [0, 0.7, 0.19189, 0, 0.80907], + "74": [0.27778, 0.7, 0.19189, 0, 1.05159], + "75": [0, 0.7, 0.31259, 0, 0.91364], + "76": [0, 0.7, 0.19189, 0, 0.87373], + "77": [0, 0.7, 0.15981, 0, 1.08031], + "78": [0, 0.7, 0.3525, 0, 0.9015], + "79": [0, 0.7, 0.08078, 0, 0.73787], + "80": [0, 0.7, 0.08078, 0, 1.01262], + "81": [0, 0.7, 0.03305, 0, 0.88282], + "82": [0, 0.7, 0.06259, 0, 0.85], + "83": [0, 0.7, 0.19189, 0, 0.86767], + "84": [0, 0.7, 0.29087, 0, 0.74697], + "85": [0, 0.7, 0.25815, 0, 0.79996], + "86": [0, 0.7, 0.27523, 0, 0.62204], + "87": [0, 0.7, 0.27523, 0, 0.80532], + "88": [0, 0.7, 0.26006, 0, 0.94445], + "89": [0, 0.7, 0.2939, 0, 0.70961], + "90": [0, 0.7, 0.24037, 0, 0.8212] + }, + "Size1-Regular": { + "40": [0.35001, 0.85, 0, 0, 0.45834], + "41": [0.35001, 0.85, 0, 0, 0.45834], + "47": [0.35001, 0.85, 0, 0, 0.57778], + "91": [0.35001, 0.85, 0, 0, 0.41667], + "92": [0.35001, 0.85, 0, 0, 0.57778], + "93": [0.35001, 0.85, 0, 0, 0.41667], + "123": [0.35001, 0.85, 0, 0, 0.58334], + "125": [0.35001, 0.85, 0, 0, 0.58334], + "710": [0, 0.72222, 0, 0, 0.55556], + "732": [0, 0.72222, 0, 0, 0.55556], + "770": [0, 0.72222, 0, 0, 0.55556], + "771": [0, 0.72222, 0, 0, 0.55556], + "8214": [-0.00099, 0.601, 0, 0, 0.77778], + "8593": [1e-05, 0.6, 0, 0, 0.66667], + "8595": [1e-05, 0.6, 0, 0, 0.66667], + "8657": [1e-05, 0.6, 0, 0, 0.77778], + "8659": [1e-05, 0.6, 0, 0, 0.77778], + "8719": [0.25001, 0.75, 0, 0, 0.94445], + "8720": [0.25001, 0.75, 0, 0, 0.94445], + "8721": [0.25001, 0.75, 0, 0, 1.05556], + "8730": [0.35001, 0.85, 0, 0, 1.0], + "8739": [-0.00599, 0.606, 0, 0, 0.33333], + "8741": [-0.00599, 0.606, 0, 0, 0.55556], + "8747": [0.30612, 0.805, 0.19445, 0, 0.47222], + "8748": [0.306, 0.805, 0.19445, 0, 0.47222], + "8749": [0.306, 0.805, 0.19445, 0, 0.47222], + "8750": [0.30612, 0.805, 0.19445, 0, 0.47222], + "8896": [0.25001, 0.75, 0, 0, 0.83334], + "8897": [0.25001, 0.75, 0, 0, 0.83334], + "8898": [0.25001, 0.75, 0, 0, 0.83334], + "8899": [0.25001, 0.75, 0, 0, 0.83334], + "8968": [0.35001, 0.85, 0, 0, 0.47222], + "8969": [0.35001, 0.85, 0, 0, 0.47222], + "8970": [0.35001, 0.85, 0, 0, 0.47222], + "8971": [0.35001, 0.85, 0, 0, 0.47222], + "9168": [-0.00099, 0.601, 0, 0, 0.66667], + "10216": [0.35001, 0.85, 0, 0, 0.47222], + "10217": [0.35001, 0.85, 0, 0, 0.47222], + "10752": [0.25001, 0.75, 0, 0, 1.11111], + "10753": [0.25001, 0.75, 0, 0, 1.11111], + "10754": [0.25001, 0.75, 0, 0, 1.11111], + "10756": [0.25001, 0.75, 0, 0, 0.83334], + "10758": [0.25001, 0.75, 0, 0, 0.83334] + }, + "Size2-Regular": { + "40": [0.65002, 1.15, 0, 0, 0.59722], + "41": [0.65002, 1.15, 0, 0, 0.59722], + "47": [0.65002, 1.15, 0, 0, 0.81111], + "91": [0.65002, 1.15, 0, 0, 0.47222], + "92": [0.65002, 1.15, 0, 0, 0.81111], + "93": [0.65002, 1.15, 0, 0, 0.47222], + "123": [0.65002, 1.15, 0, 0, 0.66667], + "125": [0.65002, 1.15, 0, 0, 0.66667], + "710": [0, 0.75, 0, 0, 1.0], + "732": [0, 0.75, 0, 0, 1.0], + "770": [0, 0.75, 0, 0, 1.0], + "771": [0, 0.75, 0, 0, 1.0], + "8719": [0.55001, 1.05, 0, 0, 1.27778], + "8720": [0.55001, 1.05, 0, 0, 1.27778], + "8721": [0.55001, 1.05, 0, 0, 1.44445], + "8730": [0.65002, 1.15, 0, 0, 1.0], + "8747": [0.86225, 1.36, 0.44445, 0, 0.55556], + "8748": [0.862, 1.36, 0.44445, 0, 0.55556], + "8749": [0.862, 1.36, 0.44445, 0, 0.55556], + "8750": [0.86225, 1.36, 0.44445, 0, 0.55556], + "8896": [0.55001, 1.05, 0, 0, 1.11111], + "8897": [0.55001, 1.05, 0, 0, 1.11111], + "8898": [0.55001, 1.05, 0, 0, 1.11111], + "8899": [0.55001, 1.05, 0, 0, 1.11111], + "8968": [0.65002, 1.15, 0, 0, 0.52778], + "8969": [0.65002, 1.15, 0, 0, 0.52778], + "8970": [0.65002, 1.15, 0, 0, 0.52778], + "8971": [0.65002, 1.15, 0, 0, 0.52778], + "10216": [0.65002, 1.15, 0, 0, 0.61111], + "10217": [0.65002, 1.15, 0, 0, 0.61111], + "10752": [0.55001, 1.05, 0, 0, 1.51112], + "10753": [0.55001, 1.05, 0, 0, 1.51112], + "10754": [0.55001, 1.05, 0, 0, 1.51112], + "10756": [0.55001, 1.05, 0, 0, 1.11111], + "10758": [0.55001, 1.05, 0, 0, 1.11111] + }, + "Size3-Regular": { + "40": [0.95003, 1.45, 0, 0, 0.73611], + "41": [0.95003, 1.45, 0, 0, 0.73611], + "47": [0.95003, 1.45, 0, 0, 1.04445], + "91": [0.95003, 1.45, 0, 0, 0.52778], + "92": [0.95003, 1.45, 0, 0, 1.04445], + "93": [0.95003, 1.45, 0, 0, 0.52778], + "123": [0.95003, 1.45, 0, 0, 0.75], + "125": [0.95003, 1.45, 0, 0, 0.75], + "710": [0, 0.75, 0, 0, 1.44445], + "732": [0, 0.75, 0, 0, 1.44445], + "770": [0, 0.75, 0, 0, 1.44445], + "771": [0, 0.75, 0, 0, 1.44445], + "8730": [0.95003, 1.45, 0, 0, 1.0], + "8968": [0.95003, 1.45, 0, 0, 0.58334], + "8969": [0.95003, 1.45, 0, 0, 0.58334], + "8970": [0.95003, 1.45, 0, 0, 0.58334], + "8971": [0.95003, 1.45, 0, 0, 0.58334], + "10216": [0.95003, 1.45, 0, 0, 0.75], + "10217": [0.95003, 1.45, 0, 0, 0.75] + }, + "Size4-Regular": { + "40": [1.25003, 1.75, 0, 0, 0.79167], + "41": [1.25003, 1.75, 0, 0, 0.79167], + "47": [1.25003, 1.75, 0, 0, 1.27778], + "91": [1.25003, 1.75, 0, 0, 0.58334], + "92": [1.25003, 1.75, 0, 0, 1.27778], + "93": [1.25003, 1.75, 0, 0, 0.58334], + "123": [1.25003, 1.75, 0, 0, 0.80556], + "125": [1.25003, 1.75, 0, 0, 0.80556], + "710": [0, 0.825, 0, 0, 1.8889], + "732": [0, 0.825, 0, 0, 1.8889], + "770": [0, 0.825, 0, 0, 1.8889], + "771": [0, 0.825, 0, 0, 1.8889], + "8730": [1.25003, 1.75, 0, 0, 1.0], + "8968": [1.25003, 1.75, 0, 0, 0.63889], + "8969": [1.25003, 1.75, 0, 0, 0.63889], + "8970": [1.25003, 1.75, 0, 0, 0.63889], + "8971": [1.25003, 1.75, 0, 0, 0.63889], + "9115": [0.64502, 1.155, 0, 0, 0.875], + "9116": [1e-05, 0.6, 0, 0, 0.875], + "9117": [0.64502, 1.155, 0, 0, 0.875], + "9118": [0.64502, 1.155, 0, 0, 0.875], + "9119": [1e-05, 0.6, 0, 0, 0.875], + "9120": [0.64502, 1.155, 0, 0, 0.875], + "9121": [0.64502, 1.155, 0, 0, 0.66667], + "9122": [-0.00099, 0.601, 0, 0, 0.66667], + "9123": [0.64502, 1.155, 0, 0, 0.66667], + "9124": [0.64502, 1.155, 0, 0, 0.66667], + "9125": [-0.00099, 0.601, 0, 0, 0.66667], + "9126": [0.64502, 1.155, 0, 0, 0.66667], + "9127": [1e-05, 0.9, 0, 0, 0.88889], + "9128": [0.65002, 1.15, 0, 0, 0.88889], + "9129": [0.90001, 0, 0, 0, 0.88889], + "9130": [0, 0.3, 0, 0, 0.88889], + "9131": [1e-05, 0.9, 0, 0, 0.88889], + "9132": [0.65002, 1.15, 0, 0, 0.88889], + "9133": [0.90001, 0, 0, 0, 0.88889], + "9143": [0.88502, 0.915, 0, 0, 1.05556], + "10216": [1.25003, 1.75, 0, 0, 0.80556], + "10217": [1.25003, 1.75, 0, 0, 0.80556], + "57344": [-0.00499, 0.605, 0, 0, 1.05556], + "57345": [-0.00499, 0.605, 0, 0, 1.05556], + "57680": [0, 0.12, 0, 0, 0.45], + "57681": [0, 0.12, 0, 0, 0.45], + "57682": [0, 0.12, 0, 0, 0.45], + "57683": [0, 0.12, 0, 0, 0.45] + }, + "Typewriter-Regular": { + "32": [0, 0, 0, 0, 0.525], + "33": [0, 0.61111, 0, 0, 0.525], + "34": [0, 0.61111, 0, 0, 0.525], + "35": [0, 0.61111, 0, 0, 0.525], + "36": [0.08333, 0.69444, 0, 0, 0.525], + "37": [0.08333, 0.69444, 0, 0, 0.525], + "38": [0, 0.61111, 0, 0, 0.525], + "39": [0, 0.61111, 0, 0, 0.525], + "40": [0.08333, 0.69444, 0, 0, 0.525], + "41": [0.08333, 0.69444, 0, 0, 0.525], + "42": [0, 0.52083, 0, 0, 0.525], + "43": [-0.08056, 0.53055, 0, 0, 0.525], + "44": [0.13889, 0.125, 0, 0, 0.525], + "45": [-0.08056, 0.53055, 0, 0, 0.525], + "46": [0, 0.125, 0, 0, 0.525], + "47": [0.08333, 0.69444, 0, 0, 0.525], + "48": [0, 0.61111, 0, 0, 0.525], + "49": [0, 0.61111, 0, 0, 0.525], + "50": [0, 0.61111, 0, 0, 0.525], + "51": [0, 0.61111, 0, 0, 0.525], + "52": [0, 0.61111, 0, 0, 0.525], + "53": [0, 0.61111, 0, 0, 0.525], + "54": [0, 0.61111, 0, 0, 0.525], + "55": [0, 0.61111, 0, 0, 0.525], + "56": [0, 0.61111, 0, 0, 0.525], + "57": [0, 0.61111, 0, 0, 0.525], + "58": [0, 0.43056, 0, 0, 0.525], + "59": [0.13889, 0.43056, 0, 0, 0.525], + "60": [-0.05556, 0.55556, 0, 0, 0.525], + "61": [-0.19549, 0.41562, 0, 0, 0.525], + "62": [-0.05556, 0.55556, 0, 0, 0.525], + "63": [0, 0.61111, 0, 0, 0.525], + "64": [0, 0.61111, 0, 0, 0.525], + "65": [0, 0.61111, 0, 0, 0.525], + "66": [0, 0.61111, 0, 0, 0.525], + "67": [0, 0.61111, 0, 0, 0.525], + "68": [0, 0.61111, 0, 0, 0.525], + "69": [0, 0.61111, 0, 0, 0.525], + "70": [0, 0.61111, 0, 0, 0.525], + "71": [0, 0.61111, 0, 0, 0.525], + "72": [0, 0.61111, 0, 0, 0.525], + "73": [0, 0.61111, 0, 0, 0.525], + "74": [0, 0.61111, 0, 0, 0.525], + "75": [0, 0.61111, 0, 0, 0.525], + "76": [0, 0.61111, 0, 0, 0.525], + "77": [0, 0.61111, 0, 0, 0.525], + "78": [0, 0.61111, 0, 0, 0.525], + "79": [0, 0.61111, 0, 0, 0.525], + "80": [0, 0.61111, 0, 0, 0.525], + "81": [0.13889, 0.61111, 0, 0, 0.525], + "82": [0, 0.61111, 0, 0, 0.525], + "83": [0, 0.61111, 0, 0, 0.525], + "84": [0, 0.61111, 0, 0, 0.525], + "85": [0, 0.61111, 0, 0, 0.525], + "86": [0, 0.61111, 0, 0, 0.525], + "87": [0, 0.61111, 0, 0, 0.525], + "88": [0, 0.61111, 0, 0, 0.525], + "89": [0, 0.61111, 0, 0, 0.525], + "90": [0, 0.61111, 0, 0, 0.525], + "91": [0.08333, 0.69444, 0, 0, 0.525], + "92": [0.08333, 0.69444, 0, 0, 0.525], + "93": [0.08333, 0.69444, 0, 0, 0.525], + "94": [0, 0.61111, 0, 0, 0.525], + "95": [0.09514, 0, 0, 0, 0.525], + "96": [0, 0.61111, 0, 0, 0.525], + "97": [0, 0.43056, 0, 0, 0.525], + "98": [0, 0.61111, 0, 0, 0.525], + "99": [0, 0.43056, 0, 0, 0.525], + "100": [0, 0.61111, 0, 0, 0.525], + "101": [0, 0.43056, 0, 0, 0.525], + "102": [0, 0.61111, 0, 0, 0.525], + "103": [0.22222, 0.43056, 0, 0, 0.525], + "104": [0, 0.61111, 0, 0, 0.525], + "105": [0, 0.61111, 0, 0, 0.525], + "106": [0.22222, 0.61111, 0, 0, 0.525], + "107": [0, 0.61111, 0, 0, 0.525], + "108": [0, 0.61111, 0, 0, 0.525], + "109": [0, 0.43056, 0, 0, 0.525], + "110": [0, 0.43056, 0, 0, 0.525], + "111": [0, 0.43056, 0, 0, 0.525], + "112": [0.22222, 0.43056, 0, 0, 0.525], + "113": [0.22222, 0.43056, 0, 0, 0.525], + "114": [0, 0.43056, 0, 0, 0.525], + "115": [0, 0.43056, 0, 0, 0.525], + "116": [0, 0.55358, 0, 0, 0.525], + "117": [0, 0.43056, 0, 0, 0.525], + "118": [0, 0.43056, 0, 0, 0.525], + "119": [0, 0.43056, 0, 0, 0.525], + "120": [0, 0.43056, 0, 0, 0.525], + "121": [0.22222, 0.43056, 0, 0, 0.525], + "122": [0, 0.43056, 0, 0, 0.525], + "123": [0.08333, 0.69444, 0, 0, 0.525], + "124": [0.08333, 0.69444, 0, 0, 0.525], + "125": [0.08333, 0.69444, 0, 0, 0.525], + "126": [0, 0.61111, 0, 0, 0.525], + "127": [0, 0.61111, 0, 0, 0.525], + "160": [0, 0, 0, 0, 0.525], + "176": [0, 0.61111, 0, 0, 0.525], + "184": [0.19445, 0, 0, 0, 0.525], + "305": [0, 0.43056, 0, 0, 0.525], + "567": [0.22222, 0.43056, 0, 0, 0.525], + "711": [0, 0.56597, 0, 0, 0.525], + "713": [0, 0.56555, 0, 0, 0.525], + "714": [0, 0.61111, 0, 0, 0.525], + "715": [0, 0.61111, 0, 0, 0.525], + "728": [0, 0.61111, 0, 0, 0.525], + "730": [0, 0.61111, 0, 0, 0.525], + "770": [0, 0.61111, 0, 0, 0.525], + "771": [0, 0.61111, 0, 0, 0.525], + "776": [0, 0.61111, 0, 0, 0.525], + "915": [0, 0.61111, 0, 0, 0.525], + "916": [0, 0.61111, 0, 0, 0.525], + "920": [0, 0.61111, 0, 0, 0.525], + "923": [0, 0.61111, 0, 0, 0.525], + "926": [0, 0.61111, 0, 0, 0.525], + "928": [0, 0.61111, 0, 0, 0.525], + "931": [0, 0.61111, 0, 0, 0.525], + "933": [0, 0.61111, 0, 0, 0.525], + "934": [0, 0.61111, 0, 0, 0.525], + "936": [0, 0.61111, 0, 0, 0.525], + "937": [0, 0.61111, 0, 0, 0.525], + "8216": [0, 0.61111, 0, 0, 0.525], + "8217": [0, 0.61111, 0, 0, 0.525], + "8242": [0, 0.61111, 0, 0, 0.525], + "9251": [0.11111, 0.21944, 0, 0, 0.525] + } +}; + +/** + * This file contains metrics regarding fonts and individual symbols. The sigma + * and xi variables, as well as the metricMap map contain data extracted from + * TeX, TeX font metrics, and the TTF files. These data are then exposed via the + * `metrics` variable and the getCharacterMetrics function. + */ +// In TeX, there are actually three sets of dimensions, one for each of +// textstyle (size index 5 and higher: >=9pt), scriptstyle (size index 3 and 4: +// 7-8pt), and scriptscriptstyle (size index 1 and 2: 5-6pt). These are +// provided in the the arrays below, in that order. +// +// The font metrics are stored in fonts cmsy10, cmsy7, and cmsy5 respsectively. +// This was determined by running the following script: +// +// latex -interaction=nonstopmode \ +// '\documentclass{article}\usepackage{amsmath}\begin{document}' \ +// '$a$ \expandafter\show\the\textfont2' \ +// '\expandafter\show\the\scriptfont2' \ +// '\expandafter\show\the\scriptscriptfont2' \ +// '\stop' +// +// The metrics themselves were retreived using the following commands: +// +// tftopl cmsy10 +// tftopl cmsy7 +// tftopl cmsy5 +// +// The output of each of these commands is quite lengthy. The only part we +// care about is the FONTDIMEN section. Each value is measured in EMs. +const sigmasAndXis = { + slant: [0.250, 0.250, 0.250], + // sigma1 + space: [0.000, 0.000, 0.000], + // sigma2 + stretch: [0.000, 0.000, 0.000], + // sigma3 + shrink: [0.000, 0.000, 0.000], + // sigma4 + xHeight: [0.431, 0.431, 0.431], + // sigma5 + quad: [1.000, 1.171, 1.472], + // sigma6 + extraSpace: [0.000, 0.000, 0.000], + // sigma7 + num1: [0.677, 0.732, 0.925], + // sigma8 + num2: [0.394, 0.384, 0.387], + // sigma9 + num3: [0.444, 0.471, 0.504], + // sigma10 + denom1: [0.686, 0.752, 1.025], + // sigma11 + denom2: [0.345, 0.344, 0.532], + // sigma12 + sup1: [0.413, 0.503, 0.504], + // sigma13 + sup2: [0.363, 0.431, 0.404], + // sigma14 + sup3: [0.289, 0.286, 0.294], + // sigma15 + sub1: [0.150, 0.143, 0.200], + // sigma16 + sub2: [0.247, 0.286, 0.400], + // sigma17 + supDrop: [0.386, 0.353, 0.494], + // sigma18 + subDrop: [0.050, 0.071, 0.100], + // sigma19 + delim1: [2.390, 1.700, 1.980], + // sigma20 + delim2: [1.010, 1.157, 1.420], + // sigma21 + axisHeight: [0.250, 0.250, 0.250], + // sigma22 + // These font metrics are extracted from TeX by using tftopl on cmex10.tfm; + // they correspond to the font parameters of the extension fonts (family 3). + // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to + // match cmex7, we'd use cmex7.tfm values for script and scriptscript + // values. + defaultRuleThickness: [0.04, 0.049, 0.049], + // xi8; cmex7: 0.049 + bigOpSpacing1: [0.111, 0.111, 0.111], + // xi9 + bigOpSpacing2: [0.166, 0.166, 0.166], + // xi10 + bigOpSpacing3: [0.2, 0.2, 0.2], + // xi11 + bigOpSpacing4: [0.6, 0.611, 0.611], + // xi12; cmex7: 0.611 + bigOpSpacing5: [0.1, 0.143, 0.143], + // xi13; cmex7: 0.143 + // The \sqrt rule width is taken from the height of the surd character. + // Since we use the same font at all sizes, this thickness doesn't scale. + sqrtRuleThickness: [0.04, 0.04, 0.04], + // This value determines how large a pt is, for metrics which are defined + // in terms of pts. + // This value is also used in katex.less; if you change it make sure the + // values match. + ptPerEm: [10.0, 10.0, 10.0], + // The space between adjacent `|` columns in an array definition. From + // `\showthe\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm. + doubleRuleSep: [0.2, 0.2, 0.2], + // The width of separator lines in {array} environments. From + // `\showthe\arrayrulewidth` in LaTeX. Equals 0.4 / ptPerEm. + arrayRuleWidth: [0.04, 0.04, 0.04], + // Two values from LaTeX source2e: + fboxsep: [0.3, 0.3, 0.3], + // 3 pt / ptPerEm + fboxrule: [0.04, 0.04, 0.04] // 0.4 pt / ptPerEm + +}; // This map contains a mapping from font name and character code to character +// should have Latin-1 and Cyrillic characters, but may not depending on the +// operating system. The metrics do not account for extra height from the +// accents. In the case of Cyrillic characters which have both ascenders and +// descenders we prefer approximations with ascenders, primarily to prevent +// the fraction bar or root line from intersecting the glyph. +// TODO(kevinb) allow union of multiple glyph metrics for better accuracy. + +const extraCharacterMap = { + // Latin-1 + 'Å': 'A', + 'Ç': 'C', + 'Ð': 'D', + 'Þ': 'o', + 'å': 'a', + 'ç': 'c', + 'ð': 'd', + 'þ': 'o', + // Cyrillic + 'А': 'A', + 'Б': 'B', + 'В': 'B', + 'Г': 'F', + 'Д': 'A', + 'Е': 'E', + 'Ж': 'K', + 'З': '3', + 'И': 'N', + 'Й': 'N', + 'К': 'K', + 'Л': 'N', + 'М': 'M', + 'Н': 'H', + 'О': 'O', + 'П': 'N', + 'Р': 'P', + 'С': 'C', + 'Т': 'T', + 'У': 'y', + 'Ф': 'O', + 'Х': 'X', + 'Ц': 'U', + 'Ч': 'h', + 'Ш': 'W', + 'Щ': 'W', + 'Ъ': 'B', + 'Ы': 'X', + 'Ь': 'B', + 'Э': '3', + 'Ю': 'X', + 'Я': 'R', + 'а': 'a', + 'б': 'b', + 'в': 'a', + 'г': 'r', + 'д': 'y', + 'е': 'e', + 'ж': 'm', + 'з': 'e', + 'и': 'n', + 'й': 'n', + 'к': 'n', + 'л': 'n', + 'м': 'm', + 'н': 'n', + 'о': 'o', + 'п': 'n', + 'р': 'p', + 'с': 'c', + 'т': 'o', + 'у': 'y', + 'ф': 'b', + 'х': 'x', + 'ц': 'n', + 'ч': 'n', + 'ш': 'w', + 'щ': 'w', + 'ъ': 'a', + 'ы': 'm', + 'ь': 'a', + 'э': 'e', + 'ю': 'm', + 'я': 'r' +}; + +/** + * This function adds new font metrics to default metricMap + * It can also override existing metrics + */ +function setFontMetrics(fontName, metrics) { + metricMap[fontName] = metrics; +} +/** + * This function is a convenience function for looking up information in the + * metricMap table. It takes a character as a string, and a font. + * + * Note: the `width` property may be undefined if fontMetricsData.js wasn't + * built using `Make extended_metrics`. + */ + +function getCharacterMetrics(character, font, mode) { + if (!metricMap[font]) { + throw new Error(`Font metrics not found for font: ${font}.`); + } + + let ch = character.charCodeAt(0); + let metrics = metricMap[font][ch]; + + if (!metrics && character[0] in extraCharacterMap) { + ch = extraCharacterMap[character[0]].charCodeAt(0); + metrics = metricMap[font][ch]; + } + + if (!metrics && mode === 'text') { + // We don't typically have font metrics for Asian scripts. + // But since we support them in text mode, we need to return + // some sort of metrics. + // So if the character is in a script we support but we + // don't have metrics for it, just use the metrics for + // the Latin capital letter M. This is close enough because + // we (currently) only care about the height of the glpyh + // not its width. + if (supportedCodepoint(ch)) { + metrics = metricMap[font][77]; // 77 is the charcode for 'M' + } + } + + if (metrics) { + return { + depth: metrics[0], + height: metrics[1], + italic: metrics[2], + skew: metrics[3], + width: metrics[4] + }; + } +} +const fontMetricsBySizeIndex = {}; +/** + * Get the font metrics for a given size. + */ + +function getGlobalMetrics(size) { + let sizeIndex; + + if (size >= 5) { + sizeIndex = 0; + } else if (size >= 3) { + sizeIndex = 1; + } else { + sizeIndex = 2; + } + + if (!fontMetricsBySizeIndex[sizeIndex]) { + const metrics = fontMetricsBySizeIndex[sizeIndex] = { + cssEmPerMu: sigmasAndXis.quad[sizeIndex] / 18 + }; + + for (const key in sigmasAndXis) { + if (sigmasAndXis.hasOwnProperty(key)) { + metrics[key] = sigmasAndXis[key][sizeIndex]; + } + } + } + + return fontMetricsBySizeIndex[sizeIndex]; +} + +/** + * This file holds a list of all no-argument functions and single-character + * symbols (like 'a' or ';'). + * + * For each of the symbols, there are three properties they can have: + * - font (required): the font to be used for this symbol. Either "main" (the + normal font), or "ams" (the ams fonts). + * - group (required): the ParseNode group type the symbol should have (i.e. + "textord", "mathord", etc). + See https://github.com/KaTeX/KaTeX/wiki/Examining-TeX#group-types + * - replace: the character that this symbol or function should be + * replaced with (i.e. "\phi" has a replace value of "\u03d5", the phi + * character in the main font). + * + * The outermost map in the table indicates what mode the symbols should be + * accepted in (e.g. "math" or "text"). + */ +// Some of these have a "-token" suffix since these are also used as `ParseNode` +// types for raw text tokens, and we want to avoid conflicts with higher-level +// `ParseNode` types. These `ParseNode`s are constructed within `Parser` by +// looking up the `symbols` map. +const ATOMS = { + "bin": 1, + "close": 1, + "inner": 1, + "open": 1, + "punct": 1, + "rel": 1 +}; +const NON_ATOMS = { + "accent-token": 1, + "mathord": 1, + "op-token": 1, + "spacing": 1, + "textord": 1 +}; +const symbols = { + "math": {}, + "text": {} +}; +/** `acceptUnicodeChar = true` is only applicable if `replace` is set. */ + +function defineSymbol(mode, font, group, replace, name, acceptUnicodeChar) { + symbols[mode][name] = { + font, + group, + replace + }; + + if (acceptUnicodeChar && replace) { + symbols[mode][replace] = symbols[mode][name]; + } +} // Some abbreviations for commonly used strings. +// This helps minify the code, and also spotting typos using jshint. +// modes: + +const math = "math"; +const text$1 = "text"; // fonts: + +const main = "main"; +const ams = "ams"; // groups: + +const accent = "accent-token"; +const bin = "bin"; +const close = "close"; +const inner = "inner"; +const mathord = "mathord"; +const op = "op-token"; +const open = "open"; +const punct = "punct"; +const rel = "rel"; +const spacing = "spacing"; +const textord = "textord"; // Now comes the symbol table +// Relation Symbols + +defineSymbol(math, main, rel, "\u2261", "\\equiv", true); +defineSymbol(math, main, rel, "\u227a", "\\prec", true); +defineSymbol(math, main, rel, "\u227b", "\\succ", true); +defineSymbol(math, main, rel, "\u223c", "\\sim", true); +defineSymbol(math, main, rel, "\u22a5", "\\perp"); +defineSymbol(math, main, rel, "\u2aaf", "\\preceq", true); +defineSymbol(math, main, rel, "\u2ab0", "\\succeq", true); +defineSymbol(math, main, rel, "\u2243", "\\simeq", true); +defineSymbol(math, main, rel, "\u2223", "\\mid", true); +defineSymbol(math, main, rel, "\u226a", "\\ll", true); +defineSymbol(math, main, rel, "\u226b", "\\gg", true); +defineSymbol(math, main, rel, "\u224d", "\\asymp", true); +defineSymbol(math, main, rel, "\u2225", "\\parallel"); +defineSymbol(math, main, rel, "\u22c8", "\\bowtie", true); +defineSymbol(math, main, rel, "\u2323", "\\smile", true); +defineSymbol(math, main, rel, "\u2291", "\\sqsubseteq", true); +defineSymbol(math, main, rel, "\u2292", "\\sqsupseteq", true); +defineSymbol(math, main, rel, "\u2250", "\\doteq", true); +defineSymbol(math, main, rel, "\u2322", "\\frown", true); +defineSymbol(math, main, rel, "\u220b", "\\ni", true); +defineSymbol(math, main, rel, "\u221d", "\\propto", true); +defineSymbol(math, main, rel, "\u22a2", "\\vdash", true); +defineSymbol(math, main, rel, "\u22a3", "\\dashv", true); +defineSymbol(math, main, rel, "\u220b", "\\owns"); // Punctuation + +defineSymbol(math, main, punct, "\u002e", "\\ldotp"); +defineSymbol(math, main, punct, "\u22c5", "\\cdotp"); // Misc Symbols + +defineSymbol(math, main, textord, "\u0023", "\\#"); +defineSymbol(text$1, main, textord, "\u0023", "\\#"); +defineSymbol(math, main, textord, "\u0026", "\\&"); +defineSymbol(text$1, main, textord, "\u0026", "\\&"); +defineSymbol(math, main, textord, "\u2135", "\\aleph", true); +defineSymbol(math, main, textord, "\u2200", "\\forall", true); +defineSymbol(math, main, textord, "\u210f", "\\hbar", true); +defineSymbol(math, main, textord, "\u2203", "\\exists", true); +defineSymbol(math, main, textord, "\u2207", "\\nabla", true); +defineSymbol(math, main, textord, "\u266d", "\\flat", true); +defineSymbol(math, main, textord, "\u2113", "\\ell", true); +defineSymbol(math, main, textord, "\u266e", "\\natural", true); +defineSymbol(math, main, textord, "\u2663", "\\clubsuit", true); +defineSymbol(math, main, textord, "\u2118", "\\wp", true); +defineSymbol(math, main, textord, "\u266f", "\\sharp", true); +defineSymbol(math, main, textord, "\u2662", "\\diamondsuit", true); +defineSymbol(math, main, textord, "\u211c", "\\Re", true); +defineSymbol(math, main, textord, "\u2661", "\\heartsuit", true); +defineSymbol(math, main, textord, "\u2111", "\\Im", true); +defineSymbol(math, main, textord, "\u2660", "\\spadesuit", true); +defineSymbol(text$1, main, textord, "\u00a7", "\\S", true); +defineSymbol(text$1, main, textord, "\u00b6", "\\P", true); // Math and Text + +defineSymbol(math, main, textord, "\u2020", "\\dag"); +defineSymbol(text$1, main, textord, "\u2020", "\\dag"); +defineSymbol(text$1, main, textord, "\u2020", "\\textdagger"); +defineSymbol(math, main, textord, "\u2021", "\\ddag"); +defineSymbol(text$1, main, textord, "\u2021", "\\ddag"); +defineSymbol(text$1, main, textord, "\u2021", "\\textdaggerdbl"); // Large Delimiters + +defineSymbol(math, main, close, "\u23b1", "\\rmoustache", true); +defineSymbol(math, main, open, "\u23b0", "\\lmoustache", true); +defineSymbol(math, main, close, "\u27ef", "\\rgroup", true); +defineSymbol(math, main, open, "\u27ee", "\\lgroup", true); // Binary Operators + +defineSymbol(math, main, bin, "\u2213", "\\mp", true); +defineSymbol(math, main, bin, "\u2296", "\\ominus", true); +defineSymbol(math, main, bin, "\u228e", "\\uplus", true); +defineSymbol(math, main, bin, "\u2293", "\\sqcap", true); +defineSymbol(math, main, bin, "\u2217", "\\ast"); +defineSymbol(math, main, bin, "\u2294", "\\sqcup", true); +defineSymbol(math, main, bin, "\u25ef", "\\bigcirc"); +defineSymbol(math, main, bin, "\u2219", "\\bullet"); +defineSymbol(math, main, bin, "\u2021", "\\ddagger"); +defineSymbol(math, main, bin, "\u2240", "\\wr", true); +defineSymbol(math, main, bin, "\u2a3f", "\\amalg"); +defineSymbol(math, main, bin, "\u0026", "\\And"); // from amsmath +// Arrow Symbols + +defineSymbol(math, main, rel, "\u27f5", "\\longleftarrow", true); +defineSymbol(math, main, rel, "\u21d0", "\\Leftarrow", true); +defineSymbol(math, main, rel, "\u27f8", "\\Longleftarrow", true); +defineSymbol(math, main, rel, "\u27f6", "\\longrightarrow", true); +defineSymbol(math, main, rel, "\u21d2", "\\Rightarrow", true); +defineSymbol(math, main, rel, "\u27f9", "\\Longrightarrow", true); +defineSymbol(math, main, rel, "\u2194", "\\leftrightarrow", true); +defineSymbol(math, main, rel, "\u27f7", "\\longleftrightarrow", true); +defineSymbol(math, main, rel, "\u21d4", "\\Leftrightarrow", true); +defineSymbol(math, main, rel, "\u27fa", "\\Longleftrightarrow", true); +defineSymbol(math, main, rel, "\u21a6", "\\mapsto", true); +defineSymbol(math, main, rel, "\u27fc", "\\longmapsto", true); +defineSymbol(math, main, rel, "\u2197", "\\nearrow", true); +defineSymbol(math, main, rel, "\u21a9", "\\hookleftarrow", true); +defineSymbol(math, main, rel, "\u21aa", "\\hookrightarrow", true); +defineSymbol(math, main, rel, "\u2198", "\\searrow", true); +defineSymbol(math, main, rel, "\u21bc", "\\leftharpoonup", true); +defineSymbol(math, main, rel, "\u21c0", "\\rightharpoonup", true); +defineSymbol(math, main, rel, "\u2199", "\\swarrow", true); +defineSymbol(math, main, rel, "\u21bd", "\\leftharpoondown", true); +defineSymbol(math, main, rel, "\u21c1", "\\rightharpoondown", true); +defineSymbol(math, main, rel, "\u2196", "\\nwarrow", true); +defineSymbol(math, main, rel, "\u21cc", "\\rightleftharpoons", true); // AMS Negated Binary Relations + +defineSymbol(math, ams, rel, "\u226e", "\\nless", true); // Symbol names preceeded by "@" each have a corresponding macro. + +defineSymbol(math, ams, rel, "\ue010", "\\@nleqslant"); +defineSymbol(math, ams, rel, "\ue011", "\\@nleqq"); +defineSymbol(math, ams, rel, "\u2a87", "\\lneq", true); +defineSymbol(math, ams, rel, "\u2268", "\\lneqq", true); +defineSymbol(math, ams, rel, "\ue00c", "\\@lvertneqq"); +defineSymbol(math, ams, rel, "\u22e6", "\\lnsim", true); +defineSymbol(math, ams, rel, "\u2a89", "\\lnapprox", true); +defineSymbol(math, ams, rel, "\u2280", "\\nprec", true); // unicode-math maps \u22e0 to \npreccurlyeq. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u22e0", "\\npreceq", true); +defineSymbol(math, ams, rel, "\u22e8", "\\precnsim", true); +defineSymbol(math, ams, rel, "\u2ab9", "\\precnapprox", true); +defineSymbol(math, ams, rel, "\u2241", "\\nsim", true); +defineSymbol(math, ams, rel, "\ue006", "\\@nshortmid"); +defineSymbol(math, ams, rel, "\u2224", "\\nmid", true); +defineSymbol(math, ams, rel, "\u22ac", "\\nvdash", true); +defineSymbol(math, ams, rel, "\u22ad", "\\nvDash", true); +defineSymbol(math, ams, rel, "\u22ea", "\\ntriangleleft"); +defineSymbol(math, ams, rel, "\u22ec", "\\ntrianglelefteq", true); +defineSymbol(math, ams, rel, "\u228a", "\\subsetneq", true); +defineSymbol(math, ams, rel, "\ue01a", "\\@varsubsetneq"); +defineSymbol(math, ams, rel, "\u2acb", "\\subsetneqq", true); +defineSymbol(math, ams, rel, "\ue017", "\\@varsubsetneqq"); +defineSymbol(math, ams, rel, "\u226f", "\\ngtr", true); +defineSymbol(math, ams, rel, "\ue00f", "\\@ngeqslant"); +defineSymbol(math, ams, rel, "\ue00e", "\\@ngeqq"); +defineSymbol(math, ams, rel, "\u2a88", "\\gneq", true); +defineSymbol(math, ams, rel, "\u2269", "\\gneqq", true); +defineSymbol(math, ams, rel, "\ue00d", "\\@gvertneqq"); +defineSymbol(math, ams, rel, "\u22e7", "\\gnsim", true); +defineSymbol(math, ams, rel, "\u2a8a", "\\gnapprox", true); +defineSymbol(math, ams, rel, "\u2281", "\\nsucc", true); // unicode-math maps \u22e1 to \nsucccurlyeq. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u22e1", "\\nsucceq", true); +defineSymbol(math, ams, rel, "\u22e9", "\\succnsim", true); +defineSymbol(math, ams, rel, "\u2aba", "\\succnapprox", true); // unicode-math maps \u2246 to \simneqq. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u2246", "\\ncong", true); +defineSymbol(math, ams, rel, "\ue007", "\\@nshortparallel"); +defineSymbol(math, ams, rel, "\u2226", "\\nparallel", true); +defineSymbol(math, ams, rel, "\u22af", "\\nVDash", true); +defineSymbol(math, ams, rel, "\u22eb", "\\ntriangleright"); +defineSymbol(math, ams, rel, "\u22ed", "\\ntrianglerighteq", true); +defineSymbol(math, ams, rel, "\ue018", "\\@nsupseteqq"); +defineSymbol(math, ams, rel, "\u228b", "\\supsetneq", true); +defineSymbol(math, ams, rel, "\ue01b", "\\@varsupsetneq"); +defineSymbol(math, ams, rel, "\u2acc", "\\supsetneqq", true); +defineSymbol(math, ams, rel, "\ue019", "\\@varsupsetneqq"); +defineSymbol(math, ams, rel, "\u22ae", "\\nVdash", true); +defineSymbol(math, ams, rel, "\u2ab5", "\\precneqq", true); +defineSymbol(math, ams, rel, "\u2ab6", "\\succneqq", true); +defineSymbol(math, ams, rel, "\ue016", "\\@nsubseteqq"); +defineSymbol(math, ams, bin, "\u22b4", "\\unlhd"); +defineSymbol(math, ams, bin, "\u22b5", "\\unrhd"); // AMS Negated Arrows + +defineSymbol(math, ams, rel, "\u219a", "\\nleftarrow", true); +defineSymbol(math, ams, rel, "\u219b", "\\nrightarrow", true); +defineSymbol(math, ams, rel, "\u21cd", "\\nLeftarrow", true); +defineSymbol(math, ams, rel, "\u21cf", "\\nRightarrow", true); +defineSymbol(math, ams, rel, "\u21ae", "\\nleftrightarrow", true); +defineSymbol(math, ams, rel, "\u21ce", "\\nLeftrightarrow", true); // AMS Misc + +defineSymbol(math, ams, rel, "\u25b3", "\\vartriangle"); +defineSymbol(math, ams, textord, "\u210f", "\\hslash"); +defineSymbol(math, ams, textord, "\u25bd", "\\triangledown"); +defineSymbol(math, ams, textord, "\u25ca", "\\lozenge"); +defineSymbol(math, ams, textord, "\u24c8", "\\circledS"); +defineSymbol(math, ams, textord, "\u00ae", "\\circledR"); +defineSymbol(text$1, ams, textord, "\u00ae", "\\circledR"); +defineSymbol(math, ams, textord, "\u2221", "\\measuredangle", true); +defineSymbol(math, ams, textord, "\u2204", "\\nexists"); +defineSymbol(math, ams, textord, "\u2127", "\\mho"); +defineSymbol(math, ams, textord, "\u2132", "\\Finv", true); +defineSymbol(math, ams, textord, "\u2141", "\\Game", true); +defineSymbol(math, ams, textord, "\u2035", "\\backprime"); +defineSymbol(math, ams, textord, "\u25b2", "\\blacktriangle"); +defineSymbol(math, ams, textord, "\u25bc", "\\blacktriangledown"); +defineSymbol(math, ams, textord, "\u25a0", "\\blacksquare"); +defineSymbol(math, ams, textord, "\u29eb", "\\blacklozenge"); +defineSymbol(math, ams, textord, "\u2605", "\\bigstar"); +defineSymbol(math, ams, textord, "\u2222", "\\sphericalangle", true); +defineSymbol(math, ams, textord, "\u2201", "\\complement", true); // unicode-math maps U+F0 (ð) to \matheth. We map to AMS function \eth + +defineSymbol(math, ams, textord, "\u00f0", "\\eth", true); +defineSymbol(math, ams, textord, "\u2571", "\\diagup"); +defineSymbol(math, ams, textord, "\u2572", "\\diagdown"); +defineSymbol(math, ams, textord, "\u25a1", "\\square"); +defineSymbol(math, ams, textord, "\u25a1", "\\Box"); +defineSymbol(math, ams, textord, "\u25ca", "\\Diamond"); // unicode-math maps U+A5 to \mathyen. We map to AMS function \yen + +defineSymbol(math, ams, textord, "\u00a5", "\\yen", true); +defineSymbol(text$1, ams, textord, "\u00a5", "\\yen", true); +defineSymbol(math, ams, textord, "\u2713", "\\checkmark", true); +defineSymbol(text$1, ams, textord, "\u2713", "\\checkmark"); // AMS Hebrew + +defineSymbol(math, ams, textord, "\u2136", "\\beth", true); +defineSymbol(math, ams, textord, "\u2138", "\\daleth", true); +defineSymbol(math, ams, textord, "\u2137", "\\gimel", true); // AMS Greek + +defineSymbol(math, ams, textord, "\u03dd", "\\digamma", true); +defineSymbol(math, ams, textord, "\u03f0", "\\varkappa"); // AMS Delimiters + +defineSymbol(math, ams, open, "\u250c", "\\ulcorner", true); +defineSymbol(math, ams, close, "\u2510", "\\urcorner", true); +defineSymbol(math, ams, open, "\u2514", "\\llcorner", true); +defineSymbol(math, ams, close, "\u2518", "\\lrcorner", true); // AMS Binary Relations + +defineSymbol(math, ams, rel, "\u2266", "\\leqq", true); +defineSymbol(math, ams, rel, "\u2a7d", "\\leqslant", true); +defineSymbol(math, ams, rel, "\u2a95", "\\eqslantless", true); +defineSymbol(math, ams, rel, "\u2272", "\\lesssim", true); +defineSymbol(math, ams, rel, "\u2a85", "\\lessapprox", true); +defineSymbol(math, ams, rel, "\u224a", "\\approxeq", true); +defineSymbol(math, ams, bin, "\u22d6", "\\lessdot"); +defineSymbol(math, ams, rel, "\u22d8", "\\lll", true); +defineSymbol(math, ams, rel, "\u2276", "\\lessgtr", true); +defineSymbol(math, ams, rel, "\u22da", "\\lesseqgtr", true); +defineSymbol(math, ams, rel, "\u2a8b", "\\lesseqqgtr", true); +defineSymbol(math, ams, rel, "\u2251", "\\doteqdot"); +defineSymbol(math, ams, rel, "\u2253", "\\risingdotseq", true); +defineSymbol(math, ams, rel, "\u2252", "\\fallingdotseq", true); +defineSymbol(math, ams, rel, "\u223d", "\\backsim", true); +defineSymbol(math, ams, rel, "\u22cd", "\\backsimeq", true); +defineSymbol(math, ams, rel, "\u2ac5", "\\subseteqq", true); +defineSymbol(math, ams, rel, "\u22d0", "\\Subset", true); +defineSymbol(math, ams, rel, "\u228f", "\\sqsubset", true); +defineSymbol(math, ams, rel, "\u227c", "\\preccurlyeq", true); +defineSymbol(math, ams, rel, "\u22de", "\\curlyeqprec", true); +defineSymbol(math, ams, rel, "\u227e", "\\precsim", true); +defineSymbol(math, ams, rel, "\u2ab7", "\\precapprox", true); +defineSymbol(math, ams, rel, "\u22b2", "\\vartriangleleft"); +defineSymbol(math, ams, rel, "\u22b4", "\\trianglelefteq"); +defineSymbol(math, ams, rel, "\u22a8", "\\vDash", true); +defineSymbol(math, ams, rel, "\u22aa", "\\Vvdash", true); +defineSymbol(math, ams, rel, "\u2323", "\\smallsmile"); +defineSymbol(math, ams, rel, "\u2322", "\\smallfrown"); +defineSymbol(math, ams, rel, "\u224f", "\\bumpeq", true); +defineSymbol(math, ams, rel, "\u224e", "\\Bumpeq", true); +defineSymbol(math, ams, rel, "\u2267", "\\geqq", true); +defineSymbol(math, ams, rel, "\u2a7e", "\\geqslant", true); +defineSymbol(math, ams, rel, "\u2a96", "\\eqslantgtr", true); +defineSymbol(math, ams, rel, "\u2273", "\\gtrsim", true); +defineSymbol(math, ams, rel, "\u2a86", "\\gtrapprox", true); +defineSymbol(math, ams, bin, "\u22d7", "\\gtrdot"); +defineSymbol(math, ams, rel, "\u22d9", "\\ggg", true); +defineSymbol(math, ams, rel, "\u2277", "\\gtrless", true); +defineSymbol(math, ams, rel, "\u22db", "\\gtreqless", true); +defineSymbol(math, ams, rel, "\u2a8c", "\\gtreqqless", true); +defineSymbol(math, ams, rel, "\u2256", "\\eqcirc", true); +defineSymbol(math, ams, rel, "\u2257", "\\circeq", true); +defineSymbol(math, ams, rel, "\u225c", "\\triangleq", true); +defineSymbol(math, ams, rel, "\u223c", "\\thicksim"); +defineSymbol(math, ams, rel, "\u2248", "\\thickapprox"); +defineSymbol(math, ams, rel, "\u2ac6", "\\supseteqq", true); +defineSymbol(math, ams, rel, "\u22d1", "\\Supset", true); +defineSymbol(math, ams, rel, "\u2290", "\\sqsupset", true); +defineSymbol(math, ams, rel, "\u227d", "\\succcurlyeq", true); +defineSymbol(math, ams, rel, "\u22df", "\\curlyeqsucc", true); +defineSymbol(math, ams, rel, "\u227f", "\\succsim", true); +defineSymbol(math, ams, rel, "\u2ab8", "\\succapprox", true); +defineSymbol(math, ams, rel, "\u22b3", "\\vartriangleright"); +defineSymbol(math, ams, rel, "\u22b5", "\\trianglerighteq"); +defineSymbol(math, ams, rel, "\u22a9", "\\Vdash", true); +defineSymbol(math, ams, rel, "\u2223", "\\shortmid"); +defineSymbol(math, ams, rel, "\u2225", "\\shortparallel"); +defineSymbol(math, ams, rel, "\u226c", "\\between", true); +defineSymbol(math, ams, rel, "\u22d4", "\\pitchfork", true); +defineSymbol(math, ams, rel, "\u221d", "\\varpropto"); +defineSymbol(math, ams, rel, "\u25c0", "\\blacktriangleleft"); // unicode-math says that \therefore is a mathord atom. +// We kept the amssymb atom type, which is rel. + +defineSymbol(math, ams, rel, "\u2234", "\\therefore", true); +defineSymbol(math, ams, rel, "\u220d", "\\backepsilon"); +defineSymbol(math, ams, rel, "\u25b6", "\\blacktriangleright"); // unicode-math says that \because is a mathord atom. +// We kept the amssymb atom type, which is rel. + +defineSymbol(math, ams, rel, "\u2235", "\\because", true); +defineSymbol(math, ams, rel, "\u22d8", "\\llless"); +defineSymbol(math, ams, rel, "\u22d9", "\\gggtr"); +defineSymbol(math, ams, bin, "\u22b2", "\\lhd"); +defineSymbol(math, ams, bin, "\u22b3", "\\rhd"); +defineSymbol(math, ams, rel, "\u2242", "\\eqsim", true); +defineSymbol(math, main, rel, "\u22c8", "\\Join"); +defineSymbol(math, ams, rel, "\u2251", "\\Doteq", true); // AMS Binary Operators + +defineSymbol(math, ams, bin, "\u2214", "\\dotplus", true); +defineSymbol(math, ams, bin, "\u2216", "\\smallsetminus"); +defineSymbol(math, ams, bin, "\u22d2", "\\Cap", true); +defineSymbol(math, ams, bin, "\u22d3", "\\Cup", true); +defineSymbol(math, ams, bin, "\u2a5e", "\\doublebarwedge", true); +defineSymbol(math, ams, bin, "\u229f", "\\boxminus", true); +defineSymbol(math, ams, bin, "\u229e", "\\boxplus", true); +defineSymbol(math, ams, bin, "\u22c7", "\\divideontimes", true); +defineSymbol(math, ams, bin, "\u22c9", "\\ltimes", true); +defineSymbol(math, ams, bin, "\u22ca", "\\rtimes", true); +defineSymbol(math, ams, bin, "\u22cb", "\\leftthreetimes", true); +defineSymbol(math, ams, bin, "\u22cc", "\\rightthreetimes", true); +defineSymbol(math, ams, bin, "\u22cf", "\\curlywedge", true); +defineSymbol(math, ams, bin, "\u22ce", "\\curlyvee", true); +defineSymbol(math, ams, bin, "\u229d", "\\circleddash", true); +defineSymbol(math, ams, bin, "\u229b", "\\circledast", true); +defineSymbol(math, ams, bin, "\u22c5", "\\centerdot"); +defineSymbol(math, ams, bin, "\u22ba", "\\intercal", true); +defineSymbol(math, ams, bin, "\u22d2", "\\doublecap"); +defineSymbol(math, ams, bin, "\u22d3", "\\doublecup"); +defineSymbol(math, ams, bin, "\u22a0", "\\boxtimes", true); // AMS Arrows +// Note: unicode-math maps \u21e2 to their own function \rightdasharrow. +// We'll map it to AMS function \dashrightarrow. It produces the same atom. + +defineSymbol(math, ams, rel, "\u21e2", "\\dashrightarrow", true); // unicode-math maps \u21e0 to \leftdasharrow. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u21e0", "\\dashleftarrow", true); +defineSymbol(math, ams, rel, "\u21c7", "\\leftleftarrows", true); +defineSymbol(math, ams, rel, "\u21c6", "\\leftrightarrows", true); +defineSymbol(math, ams, rel, "\u21da", "\\Lleftarrow", true); +defineSymbol(math, ams, rel, "\u219e", "\\twoheadleftarrow", true); +defineSymbol(math, ams, rel, "\u21a2", "\\leftarrowtail", true); +defineSymbol(math, ams, rel, "\u21ab", "\\looparrowleft", true); +defineSymbol(math, ams, rel, "\u21cb", "\\leftrightharpoons", true); +defineSymbol(math, ams, rel, "\u21b6", "\\curvearrowleft", true); // unicode-math maps \u21ba to \acwopencirclearrow. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u21ba", "\\circlearrowleft", true); +defineSymbol(math, ams, rel, "\u21b0", "\\Lsh", true); +defineSymbol(math, ams, rel, "\u21c8", "\\upuparrows", true); +defineSymbol(math, ams, rel, "\u21bf", "\\upharpoonleft", true); +defineSymbol(math, ams, rel, "\u21c3", "\\downharpoonleft", true); +defineSymbol(math, ams, rel, "\u22b8", "\\multimap", true); +defineSymbol(math, ams, rel, "\u21ad", "\\leftrightsquigarrow", true); +defineSymbol(math, ams, rel, "\u21c9", "\\rightrightarrows", true); +defineSymbol(math, ams, rel, "\u21c4", "\\rightleftarrows", true); +defineSymbol(math, ams, rel, "\u21a0", "\\twoheadrightarrow", true); +defineSymbol(math, ams, rel, "\u21a3", "\\rightarrowtail", true); +defineSymbol(math, ams, rel, "\u21ac", "\\looparrowright", true); +defineSymbol(math, ams, rel, "\u21b7", "\\curvearrowright", true); // unicode-math maps \u21bb to \cwopencirclearrow. We'll use the AMS synonym. + +defineSymbol(math, ams, rel, "\u21bb", "\\circlearrowright", true); +defineSymbol(math, ams, rel, "\u21b1", "\\Rsh", true); +defineSymbol(math, ams, rel, "\u21ca", "\\downdownarrows", true); +defineSymbol(math, ams, rel, "\u21be", "\\upharpoonright", true); +defineSymbol(math, ams, rel, "\u21c2", "\\downharpoonright", true); +defineSymbol(math, ams, rel, "\u21dd", "\\rightsquigarrow", true); +defineSymbol(math, ams, rel, "\u21dd", "\\leadsto"); +defineSymbol(math, ams, rel, "\u21db", "\\Rrightarrow", true); +defineSymbol(math, ams, rel, "\u21be", "\\restriction"); +defineSymbol(math, main, textord, "\u2018", "`"); +defineSymbol(math, main, textord, "$", "\\$"); +defineSymbol(text$1, main, textord, "$", "\\$"); +defineSymbol(text$1, main, textord, "$", "\\textdollar"); +defineSymbol(math, main, textord, "%", "\\%"); +defineSymbol(text$1, main, textord, "%", "\\%"); +defineSymbol(math, main, textord, "_", "\\_"); +defineSymbol(text$1, main, textord, "_", "\\_"); +defineSymbol(text$1, main, textord, "_", "\\textunderscore"); +defineSymbol(math, main, textord, "\u2220", "\\angle", true); +defineSymbol(math, main, textord, "\u221e", "\\infty", true); +defineSymbol(math, main, textord, "\u2032", "\\prime"); +defineSymbol(math, main, textord, "\u25b3", "\\triangle"); +defineSymbol(math, main, textord, "\u0393", "\\Gamma", true); +defineSymbol(math, main, textord, "\u0394", "\\Delta", true); +defineSymbol(math, main, textord, "\u0398", "\\Theta", true); +defineSymbol(math, main, textord, "\u039b", "\\Lambda", true); +defineSymbol(math, main, textord, "\u039e", "\\Xi", true); +defineSymbol(math, main, textord, "\u03a0", "\\Pi", true); +defineSymbol(math, main, textord, "\u03a3", "\\Sigma", true); +defineSymbol(math, main, textord, "\u03a5", "\\Upsilon", true); +defineSymbol(math, main, textord, "\u03a6", "\\Phi", true); +defineSymbol(math, main, textord, "\u03a8", "\\Psi", true); +defineSymbol(math, main, textord, "\u03a9", "\\Omega", true); +defineSymbol(math, main, textord, "A", "\u0391"); +defineSymbol(math, main, textord, "B", "\u0392"); +defineSymbol(math, main, textord, "E", "\u0395"); +defineSymbol(math, main, textord, "Z", "\u0396"); +defineSymbol(math, main, textord, "H", "\u0397"); +defineSymbol(math, main, textord, "I", "\u0399"); +defineSymbol(math, main, textord, "K", "\u039A"); +defineSymbol(math, main, textord, "M", "\u039C"); +defineSymbol(math, main, textord, "N", "\u039D"); +defineSymbol(math, main, textord, "O", "\u039F"); +defineSymbol(math, main, textord, "P", "\u03A1"); +defineSymbol(math, main, textord, "T", "\u03A4"); +defineSymbol(math, main, textord, "X", "\u03A7"); +defineSymbol(math, main, textord, "\u00ac", "\\neg", true); +defineSymbol(math, main, textord, "\u00ac", "\\lnot"); +defineSymbol(math, main, textord, "\u22a4", "\\top"); +defineSymbol(math, main, textord, "\u22a5", "\\bot"); +defineSymbol(math, main, textord, "\u2205", "\\emptyset"); +defineSymbol(math, ams, textord, "\u2205", "\\varnothing"); +defineSymbol(math, main, mathord, "\u03b1", "\\alpha", true); +defineSymbol(math, main, mathord, "\u03b2", "\\beta", true); +defineSymbol(math, main, mathord, "\u03b3", "\\gamma", true); +defineSymbol(math, main, mathord, "\u03b4", "\\delta", true); +defineSymbol(math, main, mathord, "\u03f5", "\\epsilon", true); +defineSymbol(math, main, mathord, "\u03b6", "\\zeta", true); +defineSymbol(math, main, mathord, "\u03b7", "\\eta", true); +defineSymbol(math, main, mathord, "\u03b8", "\\theta", true); +defineSymbol(math, main, mathord, "\u03b9", "\\iota", true); +defineSymbol(math, main, mathord, "\u03ba", "\\kappa", true); +defineSymbol(math, main, mathord, "\u03bb", "\\lambda", true); +defineSymbol(math, main, mathord, "\u03bc", "\\mu", true); +defineSymbol(math, main, mathord, "\u03bd", "\\nu", true); +defineSymbol(math, main, mathord, "\u03be", "\\xi", true); +defineSymbol(math, main, mathord, "\u03bf", "\\omicron", true); +defineSymbol(math, main, mathord, "\u03c0", "\\pi", true); +defineSymbol(math, main, mathord, "\u03c1", "\\rho", true); +defineSymbol(math, main, mathord, "\u03c3", "\\sigma", true); +defineSymbol(math, main, mathord, "\u03c4", "\\tau", true); +defineSymbol(math, main, mathord, "\u03c5", "\\upsilon", true); +defineSymbol(math, main, mathord, "\u03d5", "\\phi", true); +defineSymbol(math, main, mathord, "\u03c7", "\\chi", true); +defineSymbol(math, main, mathord, "\u03c8", "\\psi", true); +defineSymbol(math, main, mathord, "\u03c9", "\\omega", true); +defineSymbol(math, main, mathord, "\u03b5", "\\varepsilon", true); +defineSymbol(math, main, mathord, "\u03d1", "\\vartheta", true); +defineSymbol(math, main, mathord, "\u03d6", "\\varpi", true); +defineSymbol(math, main, mathord, "\u03f1", "\\varrho", true); +defineSymbol(math, main, mathord, "\u03c2", "\\varsigma", true); +defineSymbol(math, main, mathord, "\u03c6", "\\varphi", true); +defineSymbol(math, main, bin, "\u2217", "*"); +defineSymbol(math, main, bin, "+", "+"); +defineSymbol(math, main, bin, "\u2212", "-"); +defineSymbol(math, main, bin, "\u22c5", "\\cdot", true); +defineSymbol(math, main, bin, "\u2218", "\\circ"); +defineSymbol(math, main, bin, "\u00f7", "\\div", true); +defineSymbol(math, main, bin, "\u00b1", "\\pm", true); +defineSymbol(math, main, bin, "\u00d7", "\\times", true); +defineSymbol(math, main, bin, "\u2229", "\\cap", true); +defineSymbol(math, main, bin, "\u222a", "\\cup", true); +defineSymbol(math, main, bin, "\u2216", "\\setminus"); +defineSymbol(math, main, bin, "\u2227", "\\land"); +defineSymbol(math, main, bin, "\u2228", "\\lor"); +defineSymbol(math, main, bin, "\u2227", "\\wedge", true); +defineSymbol(math, main, bin, "\u2228", "\\vee", true); +defineSymbol(math, main, textord, "\u221a", "\\surd"); +defineSymbol(math, main, open, "(", "("); +defineSymbol(math, main, open, "[", "["); +defineSymbol(math, main, open, "\u27e8", "\\langle", true); +defineSymbol(math, main, open, "\u2223", "\\lvert"); +defineSymbol(math, main, open, "\u2225", "\\lVert"); +defineSymbol(math, main, close, ")", ")"); +defineSymbol(math, main, close, "]", "]"); +defineSymbol(math, main, close, "?", "?"); +defineSymbol(math, main, close, "!", "!"); +defineSymbol(math, main, close, "\u27e9", "\\rangle", true); +defineSymbol(math, main, close, "\u2223", "\\rvert"); +defineSymbol(math, main, close, "\u2225", "\\rVert"); +defineSymbol(math, main, rel, "=", "="); +defineSymbol(math, main, rel, "<", "<"); +defineSymbol(math, main, rel, ">", ">"); +defineSymbol(math, main, rel, ":", ":"); +defineSymbol(math, main, rel, "\u2248", "\\approx", true); +defineSymbol(math, main, rel, "\u2245", "\\cong", true); +defineSymbol(math, main, rel, "\u2265", "\\ge"); +defineSymbol(math, main, rel, "\u2265", "\\geq", true); +defineSymbol(math, main, rel, "\u2190", "\\gets"); +defineSymbol(math, main, rel, ">", "\\gt"); +defineSymbol(math, main, rel, "\u2208", "\\in", true); +defineSymbol(math, main, rel, "\ue020", "\\@not"); +defineSymbol(math, main, rel, "\u2282", "\\subset", true); +defineSymbol(math, main, rel, "\u2283", "\\supset", true); +defineSymbol(math, main, rel, "\u2286", "\\subseteq", true); +defineSymbol(math, main, rel, "\u2287", "\\supseteq", true); +defineSymbol(math, ams, rel, "\u2288", "\\nsubseteq", true); +defineSymbol(math, ams, rel, "\u2289", "\\nsupseteq", true); +defineSymbol(math, main, rel, "\u22a8", "\\models"); +defineSymbol(math, main, rel, "\u2190", "\\leftarrow", true); +defineSymbol(math, main, rel, "\u2264", "\\le"); +defineSymbol(math, main, rel, "\u2264", "\\leq", true); +defineSymbol(math, main, rel, "<", "\\lt"); +defineSymbol(math, main, rel, "\u2192", "\\rightarrow", true); +defineSymbol(math, main, rel, "\u2192", "\\to"); +defineSymbol(math, ams, rel, "\u2271", "\\ngeq", true); +defineSymbol(math, ams, rel, "\u2270", "\\nleq", true); +defineSymbol(math, main, spacing, "\u00a0", "\\ "); +defineSymbol(math, main, spacing, "\u00a0", "~"); +defineSymbol(math, main, spacing, "\u00a0", "\\space"); // Ref: LaTeX Source 2e: \DeclareRobustCommand{\nobreakspace}{% + +defineSymbol(math, main, spacing, "\u00a0", "\\nobreakspace"); +defineSymbol(text$1, main, spacing, "\u00a0", "\\ "); +defineSymbol(text$1, main, spacing, "\u00a0", "~"); +defineSymbol(text$1, main, spacing, "\u00a0", "\\space"); +defineSymbol(text$1, main, spacing, "\u00a0", "\\nobreakspace"); +defineSymbol(math, main, spacing, null, "\\nobreak"); +defineSymbol(math, main, spacing, null, "\\allowbreak"); +defineSymbol(math, main, punct, ",", ","); +defineSymbol(math, main, punct, ";", ";"); +defineSymbol(math, ams, bin, "\u22bc", "\\barwedge", true); +defineSymbol(math, ams, bin, "\u22bb", "\\veebar", true); +defineSymbol(math, main, bin, "\u2299", "\\odot", true); +defineSymbol(math, main, bin, "\u2295", "\\oplus", true); +defineSymbol(math, main, bin, "\u2297", "\\otimes", true); +defineSymbol(math, main, textord, "\u2202", "\\partial", true); +defineSymbol(math, main, bin, "\u2298", "\\oslash", true); +defineSymbol(math, ams, bin, "\u229a", "\\circledcirc", true); +defineSymbol(math, ams, bin, "\u22a1", "\\boxdot", true); +defineSymbol(math, main, bin, "\u25b3", "\\bigtriangleup"); +defineSymbol(math, main, bin, "\u25bd", "\\bigtriangledown"); +defineSymbol(math, main, bin, "\u2020", "\\dagger"); +defineSymbol(math, main, bin, "\u22c4", "\\diamond"); +defineSymbol(math, main, bin, "\u22c6", "\\star"); +defineSymbol(math, main, bin, "\u25c3", "\\triangleleft"); +defineSymbol(math, main, bin, "\u25b9", "\\triangleright"); +defineSymbol(math, main, open, "{", "\\{"); +defineSymbol(text$1, main, textord, "{", "\\{"); +defineSymbol(text$1, main, textord, "{", "\\textbraceleft"); +defineSymbol(math, main, close, "}", "\\}"); +defineSymbol(text$1, main, textord, "}", "\\}"); +defineSymbol(text$1, main, textord, "}", "\\textbraceright"); +defineSymbol(math, main, open, "{", "\\lbrace"); +defineSymbol(math, main, close, "}", "\\rbrace"); +defineSymbol(math, main, open, "[", "\\lbrack"); +defineSymbol(text$1, main, textord, "[", "\\lbrack"); +defineSymbol(math, main, close, "]", "\\rbrack"); +defineSymbol(text$1, main, textord, "]", "\\rbrack"); +defineSymbol(math, main, open, "(", "\\lparen"); +defineSymbol(math, main, close, ")", "\\rparen"); +defineSymbol(text$1, main, textord, "<", "\\textless"); // in T1 fontenc + +defineSymbol(text$1, main, textord, ">", "\\textgreater"); // in T1 fontenc + +defineSymbol(math, main, open, "\u230a", "\\lfloor", true); +defineSymbol(math, main, close, "\u230b", "\\rfloor", true); +defineSymbol(math, main, open, "\u2308", "\\lceil", true); +defineSymbol(math, main, close, "\u2309", "\\rceil", true); +defineSymbol(math, main, textord, "\\", "\\backslash"); +defineSymbol(math, main, textord, "\u2223", "|"); +defineSymbol(math, main, textord, "\u2223", "\\vert"); +defineSymbol(text$1, main, textord, "|", "\\textbar"); // in T1 fontenc + +defineSymbol(math, main, textord, "\u2225", "\\|"); +defineSymbol(math, main, textord, "\u2225", "\\Vert"); +defineSymbol(text$1, main, textord, "\u2225", "\\textbardbl"); +defineSymbol(text$1, main, textord, "~", "\\textasciitilde"); +defineSymbol(text$1, main, textord, "\\", "\\textbackslash"); +defineSymbol(text$1, main, textord, "^", "\\textasciicircum"); +defineSymbol(math, main, rel, "\u2191", "\\uparrow", true); +defineSymbol(math, main, rel, "\u21d1", "\\Uparrow", true); +defineSymbol(math, main, rel, "\u2193", "\\downarrow", true); +defineSymbol(math, main, rel, "\u21d3", "\\Downarrow", true); +defineSymbol(math, main, rel, "\u2195", "\\updownarrow", true); +defineSymbol(math, main, rel, "\u21d5", "\\Updownarrow", true); +defineSymbol(math, main, op, "\u2210", "\\coprod"); +defineSymbol(math, main, op, "\u22c1", "\\bigvee"); +defineSymbol(math, main, op, "\u22c0", "\\bigwedge"); +defineSymbol(math, main, op, "\u2a04", "\\biguplus"); +defineSymbol(math, main, op, "\u22c2", "\\bigcap"); +defineSymbol(math, main, op, "\u22c3", "\\bigcup"); +defineSymbol(math, main, op, "\u222b", "\\int"); +defineSymbol(math, main, op, "\u222b", "\\intop"); +defineSymbol(math, main, op, "\u222c", "\\iint"); +defineSymbol(math, main, op, "\u222d", "\\iiint"); +defineSymbol(math, main, op, "\u220f", "\\prod"); +defineSymbol(math, main, op, "\u2211", "\\sum"); +defineSymbol(math, main, op, "\u2a02", "\\bigotimes"); +defineSymbol(math, main, op, "\u2a01", "\\bigoplus"); +defineSymbol(math, main, op, "\u2a00", "\\bigodot"); +defineSymbol(math, main, op, "\u222e", "\\oint"); +defineSymbol(math, main, op, "\u222f", "\\oiint"); +defineSymbol(math, main, op, "\u2230", "\\oiiint"); +defineSymbol(math, main, op, "\u2a06", "\\bigsqcup"); +defineSymbol(math, main, op, "\u222b", "\\smallint"); +defineSymbol(text$1, main, inner, "\u2026", "\\textellipsis"); +defineSymbol(math, main, inner, "\u2026", "\\mathellipsis"); +defineSymbol(text$1, main, inner, "\u2026", "\\ldots", true); +defineSymbol(math, main, inner, "\u2026", "\\ldots", true); +defineSymbol(math, main, inner, "\u22ef", "\\@cdots", true); +defineSymbol(math, main, inner, "\u22f1", "\\ddots", true); +defineSymbol(math, main, textord, "\u22ee", "\\varvdots"); // \vdots is a macro + +defineSymbol(math, main, accent, "\u02ca", "\\acute"); +defineSymbol(math, main, accent, "\u02cb", "\\grave"); +defineSymbol(math, main, accent, "\u00a8", "\\ddot"); +defineSymbol(math, main, accent, "\u007e", "\\tilde"); +defineSymbol(math, main, accent, "\u02c9", "\\bar"); +defineSymbol(math, main, accent, "\u02d8", "\\breve"); +defineSymbol(math, main, accent, "\u02c7", "\\check"); +defineSymbol(math, main, accent, "\u005e", "\\hat"); +defineSymbol(math, main, accent, "\u20d7", "\\vec"); +defineSymbol(math, main, accent, "\u02d9", "\\dot"); +defineSymbol(math, main, accent, "\u02da", "\\mathring"); +defineSymbol(math, main, mathord, "\u0131", "\\imath", true); +defineSymbol(math, main, mathord, "\u0237", "\\jmath", true); +defineSymbol(text$1, main, textord, "\u0131", "\\i", true); +defineSymbol(text$1, main, textord, "\u0237", "\\j", true); +defineSymbol(text$1, main, textord, "\u00df", "\\ss", true); +defineSymbol(text$1, main, textord, "\u00e6", "\\ae", true); +defineSymbol(text$1, main, textord, "\u00e6", "\\ae", true); +defineSymbol(text$1, main, textord, "\u0153", "\\oe", true); +defineSymbol(text$1, main, textord, "\u00f8", "\\o", true); +defineSymbol(text$1, main, textord, "\u00c6", "\\AE", true); +defineSymbol(text$1, main, textord, "\u0152", "\\OE", true); +defineSymbol(text$1, main, textord, "\u00d8", "\\O", true); +defineSymbol(text$1, main, accent, "\u02ca", "\\'"); // acute + +defineSymbol(text$1, main, accent, "\u02cb", "\\`"); // grave + +defineSymbol(text$1, main, accent, "\u02c6", "\\^"); // circumflex + +defineSymbol(text$1, main, accent, "\u02dc", "\\~"); // tilde + +defineSymbol(text$1, main, accent, "\u02c9", "\\="); // macron + +defineSymbol(text$1, main, accent, "\u02d8", "\\u"); // breve + +defineSymbol(text$1, main, accent, "\u02d9", "\\."); // dot above + +defineSymbol(text$1, main, accent, "\u02da", "\\r"); // ring above + +defineSymbol(text$1, main, accent, "\u02c7", "\\v"); // caron + +defineSymbol(text$1, main, accent, "\u00a8", '\\"'); // diaresis + +defineSymbol(text$1, main, accent, "\u02dd", "\\H"); // double acute + +defineSymbol(text$1, main, accent, "\u25ef", "\\textcircled"); // \bigcirc glyph +// These ligatures are detected and created in Parser.js's `formLigatures`. + +const ligatures = { + "--": true, + "---": true, + "``": true, + "''": true +}; +defineSymbol(text$1, main, textord, "\u2013", "--"); +defineSymbol(text$1, main, textord, "\u2013", "\\textendash"); +defineSymbol(text$1, main, textord, "\u2014", "---"); +defineSymbol(text$1, main, textord, "\u2014", "\\textemdash"); +defineSymbol(text$1, main, textord, "\u2018", "`"); +defineSymbol(text$1, main, textord, "\u2018", "\\textquoteleft"); +defineSymbol(text$1, main, textord, "\u2019", "'"); +defineSymbol(text$1, main, textord, "\u2019", "\\textquoteright"); +defineSymbol(text$1, main, textord, "\u201c", "``"); +defineSymbol(text$1, main, textord, "\u201c", "\\textquotedblleft"); +defineSymbol(text$1, main, textord, "\u201d", "''"); +defineSymbol(text$1, main, textord, "\u201d", "\\textquotedblright"); // \degree from gensymb package + +defineSymbol(math, main, textord, "\u00b0", "\\degree", true); +defineSymbol(text$1, main, textord, "\u00b0", "\\degree"); // \textdegree from inputenc package + +defineSymbol(text$1, main, textord, "\u00b0", "\\textdegree", true); // TODO: In LaTeX, \pounds can generate a different character in text and math +// mode, but among our fonts, only Main-Italic defines this character "163". + +defineSymbol(math, main, mathord, "\u00a3", "\\pounds"); +defineSymbol(math, main, mathord, "\u00a3", "\\mathsterling", true); +defineSymbol(text$1, main, mathord, "\u00a3", "\\pounds"); +defineSymbol(text$1, main, mathord, "\u00a3", "\\textsterling", true); +defineSymbol(math, ams, textord, "\u2720", "\\maltese"); +defineSymbol(text$1, ams, textord, "\u2720", "\\maltese"); +defineSymbol(text$1, main, spacing, "\u00a0", "\\ "); +defineSymbol(text$1, main, spacing, "\u00a0", " "); +defineSymbol(text$1, main, spacing, "\u00a0", "~"); // There are lots of symbols which are the same, so we add them in afterwards. +// All of these are textords in math mode + +const mathTextSymbols = "0123456789/@.\""; + +for (let i = 0; i < mathTextSymbols.length; i++) { + const ch = mathTextSymbols.charAt(i); + defineSymbol(math, main, textord, ch, ch); +} // All of these are textords in text mode + + +const textSymbols = "0123456789!@*()-=+[]<>|\";:?/.,"; + +for (let i = 0; i < textSymbols.length; i++) { + const ch = textSymbols.charAt(i); + defineSymbol(text$1, main, textord, ch, ch); +} // All of these are textords in text mode, and mathords in math mode + + +const letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + +for (let i = 0; i < letters.length; i++) { + const ch = letters.charAt(i); + defineSymbol(math, main, mathord, ch, ch); + defineSymbol(text$1, main, textord, ch, ch); +} // Blackboard bold and script letters in Unicode range + + +defineSymbol(math, ams, textord, "C", "\u2102"); // blackboard bold + +defineSymbol(text$1, ams, textord, "C", "\u2102"); +defineSymbol(math, ams, textord, "H", "\u210D"); +defineSymbol(text$1, ams, textord, "H", "\u210D"); +defineSymbol(math, ams, textord, "N", "\u2115"); +defineSymbol(text$1, ams, textord, "N", "\u2115"); +defineSymbol(math, ams, textord, "P", "\u2119"); +defineSymbol(text$1, ams, textord, "P", "\u2119"); +defineSymbol(math, ams, textord, "Q", "\u211A"); +defineSymbol(text$1, ams, textord, "Q", "\u211A"); +defineSymbol(math, ams, textord, "R", "\u211D"); +defineSymbol(text$1, ams, textord, "R", "\u211D"); +defineSymbol(math, ams, textord, "Z", "\u2124"); +defineSymbol(text$1, ams, textord, "Z", "\u2124"); +defineSymbol(math, main, mathord, "h", "\u210E"); // italic h, Planck constant + +defineSymbol(text$1, main, mathord, "h", "\u210E"); // The next loop loads wide (surrogate pair) characters. +// We support some letters in the Unicode range U+1D400 to U+1D7FF, +// Mathematical Alphanumeric Symbols. +// Some editors do not deal well with wide characters. So don't write the +// string into this file. Instead, create the string from the surrogate pair. + +let wideChar = ""; + +for (let i = 0; i < letters.length; i++) { + const ch = letters.charAt(i); // The hex numbers in the next line are a surrogate pair. + // 0xD835 is the high surrogate for all letters in the range we support. + // 0xDC00 is the low surrogate for bold A. + + wideChar = String.fromCharCode(0xD835, 0xDC00 + i); // A-Z a-z bold + + defineSymbol(math, main, mathord, ch, wideChar); + defineSymbol(text$1, main, textord, ch, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDC34 + i); // A-Z a-z italic + + defineSymbol(math, main, mathord, ch, wideChar); + defineSymbol(text$1, main, textord, ch, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDC68 + i); // A-Z a-z bold italic + + defineSymbol(math, main, mathord, ch, wideChar); + defineSymbol(text$1, main, textord, ch, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDD04 + i); // A-Z a-z Fractur + + defineSymbol(math, main, mathord, ch, wideChar); + defineSymbol(text$1, main, textord, ch, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDDA0 + i); // A-Z a-z sans-serif + + defineSymbol(math, main, mathord, ch, wideChar); + defineSymbol(text$1, main, textord, ch, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDDD4 + i); // A-Z a-z sans bold + + defineSymbol(math, main, mathord, ch, wideChar); + defineSymbol(text$1, main, textord, ch, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDE08 + i); // A-Z a-z sans italic + + defineSymbol(math, main, mathord, ch, wideChar); + defineSymbol(text$1, main, textord, ch, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDE70 + i); // A-Z a-z monospace + + defineSymbol(math, main, mathord, ch, wideChar); + defineSymbol(text$1, main, textord, ch, wideChar); + + if (i < 26) { + // KaTeX fonts have only capital letters for blackboard bold and script. + // See exception for k below. + wideChar = String.fromCharCode(0xD835, 0xDD38 + i); // A-Z double struck + + defineSymbol(math, main, mathord, ch, wideChar); + defineSymbol(text$1, main, textord, ch, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDC9C + i); // A-Z script + + defineSymbol(math, main, mathord, ch, wideChar); + defineSymbol(text$1, main, textord, ch, wideChar); + } // TODO: Add bold script when it is supported by a KaTeX font. + +} // "k" is the only double struck lower case letter in the KaTeX fonts. + + +wideChar = String.fromCharCode(0xD835, 0xDD5C); // k double struck + +defineSymbol(math, main, mathord, "k", wideChar); +defineSymbol(text$1, main, textord, "k", wideChar); // Next, some wide character numerals + +for (let i = 0; i < 10; i++) { + const ch = i.toString(); + wideChar = String.fromCharCode(0xD835, 0xDFCE + i); // 0-9 bold + + defineSymbol(math, main, mathord, ch, wideChar); + defineSymbol(text$1, main, textord, ch, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDFE2 + i); // 0-9 sans serif + + defineSymbol(math, main, mathord, ch, wideChar); + defineSymbol(text$1, main, textord, ch, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDFEC + i); // 0-9 bold sans + + defineSymbol(math, main, mathord, ch, wideChar); + defineSymbol(text$1, main, textord, ch, wideChar); + wideChar = String.fromCharCode(0xD835, 0xDFF6 + i); // 0-9 monospace + + defineSymbol(math, main, mathord, ch, wideChar); + defineSymbol(text$1, main, textord, ch, wideChar); +} // We add these Latin-1 letters as symbols for backwards-compatibility, +// but they are not actually in the font, nor are they supported by the +// Unicode accent mechanism, so they fall back to Times font and look ugly. +// TODO(edemaine): Fix this. + + +const extraLatin = "ÇÐÞçþ"; + +for (let i = 0; i < extraLatin.length; i++) { + const ch = extraLatin.charAt(i); + defineSymbol(math, main, mathord, ch, ch); + defineSymbol(text$1, main, textord, ch, ch); +} + +defineSymbol(text$1, main, textord, "ð", "ð"); // Unicode versions of existing characters + +defineSymbol(text$1, main, textord, "\u2013", "–"); +defineSymbol(text$1, main, textord, "\u2014", "—"); +defineSymbol(text$1, main, textord, "\u2018", "‘"); +defineSymbol(text$1, main, textord, "\u2019", "’"); +defineSymbol(text$1, main, textord, "\u201c", "“"); +defineSymbol(text$1, main, textord, "\u201d", "”"); + +/** + * This file provides support for Unicode range U+1D400 to U+1D7FF, + * Mathematical Alphanumeric Symbols. + * + * Function wideCharacterFont takes a wide character as input and returns + * the font information necessary to render it properly. + */ +/** + * Data below is from https://www.unicode.org/charts/PDF/U1D400.pdf + * That document sorts characters into groups by font type, say bold or italic. + * + * In the arrays below, each subarray consists three elements: + * * The CSS class of that group when in math mode. + * * The CSS class of that group when in text mode. + * * The font name, so that KaTeX can get font metrics. + */ + +const wideLatinLetterData = [["mathbf", "textbf", "Main-Bold"], // A-Z bold upright +["mathbf", "textbf", "Main-Bold"], // a-z bold upright +["mathdefault", "textit", "Math-Italic"], // A-Z italic +["mathdefault", "textit", "Math-Italic"], // a-z italic +["boldsymbol", "boldsymbol", "Main-BoldItalic"], // A-Z bold italic +["boldsymbol", "boldsymbol", "Main-BoldItalic"], // a-z bold italic +// Map fancy A-Z letters to script, not calligraphic. +// This aligns with unicode-math and math fonts (except Cambria Math). +["mathscr", "textscr", "Script-Regular"], // A-Z script +["", "", ""], // a-z script. No font +["", "", ""], // A-Z bold script. No font +["", "", ""], // a-z bold script. No font +["mathfrak", "textfrak", "Fraktur-Regular"], // A-Z Fraktur +["mathfrak", "textfrak", "Fraktur-Regular"], // a-z Fraktur +["mathbb", "textbb", "AMS-Regular"], // A-Z double-struck +["mathbb", "textbb", "AMS-Regular"], // k double-struck +["", "", ""], // A-Z bold Fraktur No font metrics +["", "", ""], // a-z bold Fraktur. No font. +["mathsf", "textsf", "SansSerif-Regular"], // A-Z sans-serif +["mathsf", "textsf", "SansSerif-Regular"], // a-z sans-serif +["mathboldsf", "textboldsf", "SansSerif-Bold"], // A-Z bold sans-serif +["mathboldsf", "textboldsf", "SansSerif-Bold"], // a-z bold sans-serif +["mathitsf", "textitsf", "SansSerif-Italic"], // A-Z italic sans-serif +["mathitsf", "textitsf", "SansSerif-Italic"], // a-z italic sans-serif +["", "", ""], // A-Z bold italic sans. No font +["", "", ""], // a-z bold italic sans. No font +["mathtt", "texttt", "Typewriter-Regular"], // A-Z monospace +["mathtt", "texttt", "Typewriter-Regular"]]; +const wideNumeralData = [["mathbf", "textbf", "Main-Bold"], // 0-9 bold +["", "", ""], // 0-9 double-struck. No KaTeX font. +["mathsf", "textsf", "SansSerif-Regular"], // 0-9 sans-serif +["mathboldsf", "textboldsf", "SansSerif-Bold"], // 0-9 bold sans-serif +["mathtt", "texttt", "Typewriter-Regular"]]; +const wideCharacterFont = function wideCharacterFont(wideChar, mode) { + // IE doesn't support codePointAt(). So work with the surrogate pair. + const H = wideChar.charCodeAt(0); // high surrogate + + const L = wideChar.charCodeAt(1); // low surrogate + + const codePoint = (H - 0xD800) * 0x400 + (L - 0xDC00) + 0x10000; + const j = mode === "math" ? 0 : 1; // column index for CSS class. + + if (0x1D400 <= codePoint && codePoint < 0x1D6A4) { + // wideLatinLetterData contains exactly 26 chars on each row. + // So we can calculate the relevant row. No traverse necessary. + const i = Math.floor((codePoint - 0x1D400) / 26); + return [wideLatinLetterData[i][2], wideLatinLetterData[i][j]]; + } else if (0x1D7CE <= codePoint && codePoint <= 0x1D7FF) { + // Numerals, ten per row. + const i = Math.floor((codePoint - 0x1D7CE) / 10); + return [wideNumeralData[i][2], wideNumeralData[i][j]]; + } else if (codePoint === 0x1D6A5 || codePoint === 0x1D6A6) { + // dotless i or j + return [wideLatinLetterData[0][2], wideLatinLetterData[0][j]]; + } else if (0x1D6A6 < codePoint && codePoint < 0x1D7CE) { + // Greek letters. Not supported, yet. + return ["", ""]; + } else { + // We don't support any wide characters outside 1D400–1D7FF. + throw new ParseError("Unsupported character: " + wideChar); + } +}; + +/** + * This file contains information about the options that the Parser carries + * around with it while parsing. Data is held in an `Options` object, and when + * recursing, a new `Options` object can be created with the `.with*` and + * `.reset` functions. + */ +const sizeStyleMap = [// Each element contains [textsize, scriptsize, scriptscriptsize]. +// The size mappings are taken from TeX with \normalsize=10pt. +[1, 1, 1], // size1: [5, 5, 5] \tiny +[2, 1, 1], // size2: [6, 5, 5] +[3, 1, 1], // size3: [7, 5, 5] \scriptsize +[4, 2, 1], // size4: [8, 6, 5] \footnotesize +[5, 2, 1], // size5: [9, 6, 5] \small +[6, 3, 1], // size6: [10, 7, 5] \normalsize +[7, 4, 2], // size7: [12, 8, 6] \large +[8, 6, 3], // size8: [14.4, 10, 7] \Large +[9, 7, 6], // size9: [17.28, 12, 10] \LARGE +[10, 8, 7], // size10: [20.74, 14.4, 12] \huge +[11, 10, 9]]; +const sizeMultipliers = [// fontMetrics.js:getGlobalMetrics also uses size indexes, so if +// you change size indexes, change that function. +0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.2, 1.44, 1.728, 2.074, 2.488]; + +const sizeAtStyle = function sizeAtStyle(size, style) { + return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1]; +}; // In these types, "" (empty string) means "no change". + + +/** + * This is the main options class. It contains the current style, size, color, + * and font. + * + * Options objects should not be modified. To create a new Options with + * different properties, call a `.having*` method. + */ +class Options { + // A font family applies to a group of fonts (i.e. SansSerif), while a font + // represents a specific font (i.e. SansSerif Bold). + // See: https://tex.stackexchange.com/questions/22350/difference-between-textrm-and-mathrm + + /** + * The base size index. + */ + constructor(data) { + this.style = void 0; + this.color = void 0; + this.size = void 0; + this.textSize = void 0; + this.phantom = void 0; + this.font = void 0; + this.fontFamily = void 0; + this.fontWeight = void 0; + this.fontShape = void 0; + this.sizeMultiplier = void 0; + this.maxSize = void 0; + this.minRuleThickness = void 0; + this._fontMetrics = void 0; + this.style = data.style; + this.color = data.color; + this.size = data.size || Options.BASESIZE; + this.textSize = data.textSize || this.size; + this.phantom = !!data.phantom; + this.font = data.font || ""; + this.fontFamily = data.fontFamily || ""; + this.fontWeight = data.fontWeight || ''; + this.fontShape = data.fontShape || ''; + this.sizeMultiplier = sizeMultipliers[this.size - 1]; + this.maxSize = data.maxSize; + this.minRuleThickness = data.minRuleThickness; + this._fontMetrics = undefined; + } + /** + * Returns a new options object with the same properties as "this". Properties + * from "extension" will be copied to the new options object. + */ + + + extend(extension) { + const data = { + style: this.style, + size: this.size, + textSize: this.textSize, + color: this.color, + phantom: this.phantom, + font: this.font, + fontFamily: this.fontFamily, + fontWeight: this.fontWeight, + fontShape: this.fontShape, + maxSize: this.maxSize, + minRuleThickness: this.minRuleThickness + }; + + for (const key in extension) { + if (extension.hasOwnProperty(key)) { + data[key] = extension[key]; + } + } + + return new Options(data); + } + /** + * Return an options object with the given style. If `this.style === style`, + * returns `this`. + */ + + + havingStyle(style) { + if (this.style === style) { + return this; + } else { + return this.extend({ + style: style, + size: sizeAtStyle(this.textSize, style) + }); + } + } + /** + * Return an options object with a cramped version of the current style. If + * the current style is cramped, returns `this`. + */ + + + havingCrampedStyle() { + return this.havingStyle(this.style.cramp()); + } + /** + * Return an options object with the given size and in at least `\textstyle`. + * Returns `this` if appropriate. + */ + + + havingSize(size) { + if (this.size === size && this.textSize === size) { + return this; + } else { + return this.extend({ + style: this.style.text(), + size: size, + textSize: size, + sizeMultiplier: sizeMultipliers[size - 1] + }); + } + } + /** + * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted, + * changes to at least `\textstyle`. + */ + + + havingBaseStyle(style) { + style = style || this.style.text(); + const wantSize = sizeAtStyle(Options.BASESIZE, style); + + if (this.size === wantSize && this.textSize === Options.BASESIZE && this.style === style) { + return this; + } else { + return this.extend({ + style: style, + size: wantSize + }); + } + } + /** + * Remove the effect of sizing changes such as \Huge. + * Keep the effect of the current style, such as \scriptstyle. + */ + + + havingBaseSizing() { + let size; + + switch (this.style.id) { + case 4: + case 5: + size = 3; // normalsize in scriptstyle + + break; + + case 6: + case 7: + size = 1; // normalsize in scriptscriptstyle + + break; + + default: + size = 6; + // normalsize in textstyle or displaystyle + } + + return this.extend({ + style: this.style.text(), + size: size + }); + } + /** + * Create a new options object with the given color. + */ + + + withColor(color) { + return this.extend({ + color: color + }); + } + /** + * Create a new options object with "phantom" set to true. + */ + + + withPhantom() { + return this.extend({ + phantom: true + }); + } + /** + * Creates a new options object with the given math font or old text font. + * @type {[type]} + */ + + + withFont(font) { + return this.extend({ + font + }); + } + /** + * Create a new options objects with the given fontFamily. + */ + + + withTextFontFamily(fontFamily) { + return this.extend({ + fontFamily, + font: "" + }); + } + /** + * Creates a new options object with the given font weight + */ + + + withTextFontWeight(fontWeight) { + return this.extend({ + fontWeight, + font: "" + }); + } + /** + * Creates a new options object with the given font weight + */ + + + withTextFontShape(fontShape) { + return this.extend({ + fontShape, + font: "" + }); + } + /** + * Return the CSS sizing classes required to switch from enclosing options + * `oldOptions` to `this`. Returns an array of classes. + */ + + + sizingClasses(oldOptions) { + if (oldOptions.size !== this.size) { + return ["sizing", "reset-size" + oldOptions.size, "size" + this.size]; + } else { + return []; + } + } + /** + * Return the CSS sizing classes required to switch to the base size. Like + * `this.havingSize(BASESIZE).sizingClasses(this)`. + */ + + + baseSizingClasses() { + if (this.size !== Options.BASESIZE) { + return ["sizing", "reset-size" + this.size, "size" + Options.BASESIZE]; + } else { + return []; + } + } + /** + * Return the font metrics for this size. + */ + + + fontMetrics() { + if (!this._fontMetrics) { + this._fontMetrics = getGlobalMetrics(this.size); + } + + return this._fontMetrics; + } + /** + * Gets the CSS color of the current options object + */ + + + getColor() { + if (this.phantom) { + return "transparent"; + } else { + return this.color; + } + } + +} + +Options.BASESIZE = 6; + +/** + * This file does conversion between units. In particular, it provides + * calculateSize to convert other units into ems. + */ +// Thus, multiplying a length by this number converts the length from units +// into pts. Dividing the result by ptPerEm gives the number of ems +// *assuming* a font size of ptPerEm (normal size, normal style). + +const ptPerUnit = { + // https://en.wikibooks.org/wiki/LaTeX/Lengths and + // https://tex.stackexchange.com/a/8263 + "pt": 1, + // TeX point + "mm": 7227 / 2540, + // millimeter + "cm": 7227 / 254, + // centimeter + "in": 72.27, + // inch + "bp": 803 / 800, + // big (PostScript) points + "pc": 12, + // pica + "dd": 1238 / 1157, + // didot + "cc": 14856 / 1157, + // cicero (12 didot) + "nd": 685 / 642, + // new didot + "nc": 1370 / 107, + // new cicero (12 new didot) + "sp": 1 / 65536, + // scaled point (TeX's internal smallest unit) + // https://tex.stackexchange.com/a/41371 + "px": 803 / 800 // \pdfpxdimen defaults to 1 bp in pdfTeX and LuaTeX + +}; // Dictionary of relative units, for fast validity testing. + +const relativeUnit = { + "ex": true, + "em": true, + "mu": true +}; + +/** + * Determine whether the specified unit (either a string defining the unit + * or a "size" parse node containing a unit field) is valid. + */ +const validUnit = function validUnit(unit) { + if (typeof unit !== "string") { + unit = unit.unit; + } + + return unit in ptPerUnit || unit in relativeUnit || unit === "ex"; +}; +/* + * Convert a "size" parse node (with numeric "number" and string "unit" fields, + * as parsed by functions.js argType "size") into a CSS em value for the + * current style/scale. `options` gives the current options. + */ + +const calculateSize = function calculateSize(sizeValue, options) { + let scale; + + if (sizeValue.unit in ptPerUnit) { + // Absolute units + scale = ptPerUnit[sizeValue.unit] // Convert unit to pt + / options.fontMetrics().ptPerEm // Convert pt to CSS em + / options.sizeMultiplier; // Unscale to make absolute units + } else if (sizeValue.unit === "mu") { + // `mu` units scale with scriptstyle/scriptscriptstyle. + scale = options.fontMetrics().cssEmPerMu; + } else { + // Other relative units always refer to the *textstyle* font + // in the current size. + let unitOptions; + + if (options.style.isTight()) { + // isTight() means current style is script/scriptscript. + unitOptions = options.havingStyle(options.style.text()); + } else { + unitOptions = options; + } // TODO: In TeX these units are relative to the quad of the current + // *text* font, e.g. cmr10. KaTeX instead uses values from the + // comparably-sized *Computer Modern symbol* font. At 10pt, these + // match. At 7pt and 5pt, they differ: cmr7=1.138894, cmsy7=1.170641; + // cmr5=1.361133, cmsy5=1.472241. Consider $\scriptsize a\kern1emb$. + // TeX \showlists shows a kern of 1.13889 * fontsize; + // KaTeX shows a kern of 1.171 * fontsize. + + + if (sizeValue.unit === "ex") { + scale = unitOptions.fontMetrics().xHeight; + } else if (sizeValue.unit === "em") { + scale = unitOptions.fontMetrics().quad; + } else { + throw new ParseError("Invalid unit: '" + sizeValue.unit + "'"); + } + + if (unitOptions !== options) { + scale *= unitOptions.sizeMultiplier / options.sizeMultiplier; + } + } + + return Math.min(sizeValue.number * scale, options.maxSize); +}; + +/* eslint no-console:0 */ +// The following have to be loaded from Main-Italic font, using class mathit +const mathitLetters = ["\\imath", "ı", // dotless i +"\\jmath", "ȷ", // dotless j +"\\pounds", "\\mathsterling", "\\textsterling", "£"]; +/** + * Looks up the given symbol in fontMetrics, after applying any symbol + * replacements defined in symbol.js + */ + +const lookupSymbol = function lookupSymbol(value, // TODO(#963): Use a union type for this. +fontName, mode) { + // Replace the value with its replaced value from symbol.js + if (symbols[mode][value] && symbols[mode][value].replace) { + value = symbols[mode][value].replace; + } + + return { + value: value, + metrics: getCharacterMetrics(value, fontName, mode) + }; +}; +/** + * Makes a symbolNode after translation via the list of symbols in symbols.js. + * Correctly pulls out metrics for the character, and optionally takes a list of + * classes to be attached to the node. + * + * TODO: make argument order closer to makeSpan + * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which + * should if present come first in `classes`. + * TODO(#953): Make `options` mandatory and always pass it in. + */ + + +const makeSymbol = function makeSymbol(value, fontName, mode, options, classes) { + const lookup = lookupSymbol(value, fontName, mode); + const metrics = lookup.metrics; + value = lookup.value; + let symbolNode; + + if (metrics) { + let italic = metrics.italic; + + if (mode === "text" || options && options.font === "mathit") { + italic = 0; + } + + symbolNode = new SymbolNode(value, metrics.height, metrics.depth, italic, metrics.skew, metrics.width, classes); + } else { + // TODO(emily): Figure out a good way to only print this in development + typeof console !== "undefined" && console.warn("No character metrics " + `for '${value}' in style '${fontName}' and mode '${mode}'`); + symbolNode = new SymbolNode(value, 0, 0, 0, 0, 0, classes); + } + + if (options) { + symbolNode.maxFontSize = options.sizeMultiplier; + + if (options.style.isTight()) { + symbolNode.classes.push("mtight"); + } + + const color = options.getColor(); + + if (color) { + symbolNode.style.color = color; + } + } + + return symbolNode; +}; +/** + * Makes a symbol in Main-Regular or AMS-Regular. + * Used for rel, bin, open, close, inner, and punct. + */ + + +const mathsym = function mathsym(value, mode, options, classes) { + if (classes === void 0) { + classes = []; + } + + // Decide what font to render the symbol in by its entry in the symbols + // table. + // Have a special case for when the value = \ because the \ is used as a + // textord in unsupported command errors but cannot be parsed as a regular + // text ordinal and is therefore not present as a symbol in the symbols + // table for text, as well as a special case for boldsymbol because it + // can be used for bold + and - + if (options.font === "boldsymbol" && lookupSymbol(value, "Main-Bold", mode).metrics) { + return makeSymbol(value, "Main-Bold", mode, options, classes.concat(["mathbf"])); + } else if (value === "\\" || symbols[mode][value].font === "main") { + return makeSymbol(value, "Main-Regular", mode, options, classes); + } else { + return makeSymbol(value, "AMS-Regular", mode, options, classes.concat(["amsrm"])); + } +}; +/** + * Determines which of the two font names (Main-Italic and Math-Italic) and + * corresponding style tags (maindefault or mathit) to use for default math font, + * depending on the symbol. + */ + + +const mathdefault = function mathdefault(value, mode, options, classes) { + if (/[0-9]/.test(value.charAt(0)) || // glyphs for \imath and \jmath do not exist in Math-Italic so we + // need to use Main-Italic instead + utils.contains(mathitLetters, value)) { + return { + fontName: "Main-Italic", + fontClass: "mathit" + }; + } else { + return { + fontName: "Math-Italic", + fontClass: "mathdefault" + }; + } +}; +/** + * Determines which of the font names (Main-Italic, Math-Italic, and Caligraphic) + * and corresponding style tags (mathit, mathdefault, or mathcal) to use for font + * "mathnormal", depending on the symbol. Use this function instead of fontMap for + * font "mathnormal". + */ + + +const mathnormal = function mathnormal(value, mode, options, classes) { + if (utils.contains(mathitLetters, value)) { + return { + fontName: "Main-Italic", + fontClass: "mathit" + }; + } else if (/[0-9]/.test(value.charAt(0))) { + return { + fontName: "Caligraphic-Regular", + fontClass: "mathcal" + }; + } else { + return { + fontName: "Math-Italic", + fontClass: "mathdefault" + }; + } +}; +/** + * Determines which of the two font names (Main-Bold and Math-BoldItalic) and + * corresponding style tags (mathbf or boldsymbol) to use for font "boldsymbol", + * depending on the symbol. Use this function instead of fontMap for font + * "boldsymbol". + */ + + +const boldsymbol = function boldsymbol(value, mode, options, classes) { + if (lookupSymbol(value, "Math-BoldItalic", mode).metrics) { + return { + fontName: "Math-BoldItalic", + fontClass: "boldsymbol" + }; + } else { + // Some glyphs do not exist in Math-BoldItalic so we need to use + // Main-Bold instead. + return { + fontName: "Main-Bold", + fontClass: "mathbf" + }; + } +}; +/** + * Makes either a mathord or textord in the correct font and color. + */ + + +const makeOrd = function makeOrd(group, options, type) { + const mode = group.mode; + const text = group.text; + const classes = ["mord"]; // Math mode or Old font (i.e. \rm) + + const isFont = mode === "math" || mode === "text" && options.font; + const fontOrFamily = isFont ? options.font : options.fontFamily; + + if (text.charCodeAt(0) === 0xD835) { + // surrogate pairs get special treatment + const _wideCharacterFont = wideCharacterFont(text, mode), + wideFontName = _wideCharacterFont[0], + wideFontClass = _wideCharacterFont[1]; + + return makeSymbol(text, wideFontName, mode, options, classes.concat(wideFontClass)); + } else if (fontOrFamily) { + let fontName; + let fontClasses; + + if (fontOrFamily === "boldsymbol" || fontOrFamily === "mathnormal") { + const fontData = fontOrFamily === "boldsymbol" ? boldsymbol(text, mode, options, classes) : mathnormal(text, mode, options, classes); + fontName = fontData.fontName; + fontClasses = [fontData.fontClass]; + } else if (utils.contains(mathitLetters, text)) { + fontName = "Main-Italic"; + fontClasses = ["mathit"]; + } else if (isFont) { + fontName = fontMap[fontOrFamily].fontName; + fontClasses = [fontOrFamily]; + } else { + fontName = retrieveTextFontName(fontOrFamily, options.fontWeight, options.fontShape); + fontClasses = [fontOrFamily, options.fontWeight, options.fontShape]; + } + + if (lookupSymbol(text, fontName, mode).metrics) { + return makeSymbol(text, fontName, mode, options, classes.concat(fontClasses)); + } else if (ligatures.hasOwnProperty(text) && fontName.substr(0, 10) === "Typewriter") { + // Deconstruct ligatures in monospace fonts (\texttt, \tt). + const parts = []; + + for (let i = 0; i < text.length; i++) { + parts.push(makeSymbol(text[i], fontName, mode, options, classes.concat(fontClasses))); + } + + return makeFragment(parts); + } + } // Makes a symbol in the default font for mathords and textords. + + + if (type === "mathord") { + const fontLookup = mathdefault(text, mode, options, classes); + return makeSymbol(text, fontLookup.fontName, mode, options, classes.concat([fontLookup.fontClass])); + } else if (type === "textord") { + const font = symbols[mode][text] && symbols[mode][text].font; + + if (font === "ams") { + const fontName = retrieveTextFontName("amsrm", options.fontWeight, options.fontShape); + return makeSymbol(text, fontName, mode, options, classes.concat("amsrm", options.fontWeight, options.fontShape)); + } else if (font === "main" || !font) { + const fontName = retrieveTextFontName("textrm", options.fontWeight, options.fontShape); + return makeSymbol(text, fontName, mode, options, classes.concat(options.fontWeight, options.fontShape)); + } else { + // fonts added by plugins + const fontName = retrieveTextFontName(font, options.fontWeight, options.fontShape); // We add font name as a css class + + return makeSymbol(text, fontName, mode, options, classes.concat(fontName, options.fontWeight, options.fontShape)); + } + } else { + throw new Error("unexpected type: " + type + " in makeOrd"); + } +}; +/** + * Returns true if subsequent symbolNodes have the same classes, skew, maxFont, + * and styles. + */ + + +const canCombine = (prev, next) => { + if (createClass(prev.classes) !== createClass(next.classes) || prev.skew !== next.skew || prev.maxFontSize !== next.maxFontSize) { + return false; + } + + for (const style in prev.style) { + if (prev.style.hasOwnProperty(style) && prev.style[style] !== next.style[style]) { + return false; + } + } + + for (const style in next.style) { + if (next.style.hasOwnProperty(style) && prev.style[style] !== next.style[style]) { + return false; + } + } + + return true; +}; +/** + * Combine consequetive domTree.symbolNodes into a single symbolNode. + * Note: this function mutates the argument. + */ + + +const tryCombineChars = chars => { + for (let i = 0; i < chars.length - 1; i++) { + const prev = chars[i]; + const next = chars[i + 1]; + + if (prev instanceof SymbolNode && next instanceof SymbolNode && canCombine(prev, next)) { + prev.text += next.text; + prev.height = Math.max(prev.height, next.height); + prev.depth = Math.max(prev.depth, next.depth); // Use the last character's italic correction since we use + // it to add padding to the right of the span created from + // the combined characters. + + prev.italic = next.italic; + chars.splice(i + 1, 1); + i--; + } + } + + return chars; +}; +/** + * Calculate the height, depth, and maxFontSize of an element based on its + * children. + */ + + +const sizeElementFromChildren = function sizeElementFromChildren(elem) { + let height = 0; + let depth = 0; + let maxFontSize = 0; + + for (let i = 0; i < elem.children.length; i++) { + const child = elem.children[i]; + + if (child.height > height) { + height = child.height; + } + + if (child.depth > depth) { + depth = child.depth; + } + + if (child.maxFontSize > maxFontSize) { + maxFontSize = child.maxFontSize; + } + } + + elem.height = height; + elem.depth = depth; + elem.maxFontSize = maxFontSize; +}; +/** + * Makes a span with the given list of classes, list of children, and options. + * + * TODO(#953): Ensure that `options` is always provided (currently some call + * sites don't pass it) and make the type below mandatory. + * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which + * should if present come first in `classes`. + */ + + +const makeSpan = function makeSpan(classes, children, options, style) { + const span = new Span(classes, children, options, style); + sizeElementFromChildren(span); + return span; +}; // SVG one is simpler -- doesn't require height, depth, max-font setting. +// This is also a separate method for typesafety. + + +const makeSvgSpan = (classes, children, options, style) => new Span(classes, children, options, style); + +const makeLineSpan = function makeLineSpan(className, options, thickness) { + const line = makeSpan([className], [], options); + line.height = Math.max(thickness || options.fontMetrics().defaultRuleThickness, options.minRuleThickness); + line.style.borderBottomWidth = line.height + "em"; + line.maxFontSize = 1.0; + return line; +}; +/** + * Makes an anchor with the given href, list of classes, list of children, + * and options. + */ + + +const makeAnchor = function makeAnchor(href, classes, children, options) { + const anchor = new Anchor(href, classes, children, options); + sizeElementFromChildren(anchor); + return anchor; +}; +/** + * Makes a document fragment with the given list of children. + */ + + +const makeFragment = function makeFragment(children) { + const fragment = new DocumentFragment(children); + sizeElementFromChildren(fragment); + return fragment; +}; +/** + * Wraps group in a span if it's a document fragment, allowing to apply classes + * and styles + */ + + +const wrapFragment = function wrapFragment(group, options) { + if (group instanceof DocumentFragment) { + return makeSpan([], [group], options); + } + + return group; +}; // These are exact object types to catch typos in the names of the optional fields. + + +// Computes the updated `children` list and the overall depth. +// +// This helper function for makeVList makes it easier to enforce type safety by +// allowing early exits (returns) in the logic. +const getVListChildrenAndDepth = function getVListChildrenAndDepth(params) { + if (params.positionType === "individualShift") { + const oldChildren = params.children; + const children = [oldChildren[0]]; // Add in kerns to the list of params.children to get each element to be + // shifted to the correct specified shift + + const depth = -oldChildren[0].shift - oldChildren[0].elem.depth; + let currPos = depth; + + for (let i = 1; i < oldChildren.length; i++) { + const diff = -oldChildren[i].shift - currPos - oldChildren[i].elem.depth; + const size = diff - (oldChildren[i - 1].elem.height + oldChildren[i - 1].elem.depth); + currPos = currPos + diff; + children.push({ + type: "kern", + size + }); + children.push(oldChildren[i]); + } + + return { + children, + depth + }; + } + + let depth; + + if (params.positionType === "top") { + // We always start at the bottom, so calculate the bottom by adding up + // all the sizes + let bottom = params.positionData; + + for (let i = 0; i < params.children.length; i++) { + const child = params.children[i]; + bottom -= child.type === "kern" ? child.size : child.elem.height + child.elem.depth; + } + + depth = bottom; + } else if (params.positionType === "bottom") { + depth = -params.positionData; + } else { + const firstChild = params.children[0]; + + if (firstChild.type !== "elem") { + throw new Error('First child must have type "elem".'); + } + + if (params.positionType === "shift") { + depth = -firstChild.elem.depth - params.positionData; + } else if (params.positionType === "firstBaseline") { + depth = -firstChild.elem.depth; + } else { + throw new Error(`Invalid positionType ${params.positionType}.`); + } + } + + return { + children: params.children, + depth + }; +}; +/** + * Makes a vertical list by stacking elements and kerns on top of each other. + * Allows for many different ways of specifying the positioning method. + * + * See VListParam documentation above. + */ + + +const makeVList = function makeVList(params, options) { + const _getVListChildrenAndD = getVListChildrenAndDepth(params), + children = _getVListChildrenAndD.children, + depth = _getVListChildrenAndD.depth; // Create a strut that is taller than any list item. The strut is added to + // each item, where it will determine the item's baseline. Since it has + // `overflow:hidden`, the strut's top edge will sit on the item's line box's + // top edge and the strut's bottom edge will sit on the item's baseline, + // with no additional line-height spacing. This allows the item baseline to + // be positioned precisely without worrying about font ascent and + // line-height. + + + let pstrutSize = 0; + + for (let i = 0; i < children.length; i++) { + const child = children[i]; + + if (child.type === "elem") { + const elem = child.elem; + pstrutSize = Math.max(pstrutSize, elem.maxFontSize, elem.height); + } + } + + pstrutSize += 2; + const pstrut = makeSpan(["pstrut"], []); + pstrut.style.height = pstrutSize + "em"; // Create a new list of actual children at the correct offsets + + const realChildren = []; + let minPos = depth; + let maxPos = depth; + let currPos = depth; + + for (let i = 0; i < children.length; i++) { + const child = children[i]; + + if (child.type === "kern") { + currPos += child.size; + } else { + const elem = child.elem; + const classes = child.wrapperClasses || []; + const style = child.wrapperStyle || {}; + const childWrap = makeSpan(classes, [pstrut, elem], undefined, style); + childWrap.style.top = -pstrutSize - currPos - elem.depth + "em"; + + if (child.marginLeft) { + childWrap.style.marginLeft = child.marginLeft; + } + + if (child.marginRight) { + childWrap.style.marginRight = child.marginRight; + } + + realChildren.push(childWrap); + currPos += elem.height + elem.depth; + } + + minPos = Math.min(minPos, currPos); + maxPos = Math.max(maxPos, currPos); + } // The vlist contents go in a table-cell with `vertical-align:bottom`. + // This cell's bottom edge will determine the containing table's baseline + // without overly expanding the containing line-box. + + + const vlist = makeSpan(["vlist"], realChildren); + vlist.style.height = maxPos + "em"; // A second row is used if necessary to represent the vlist's depth. + + let rows; + + if (minPos < 0) { + // We will define depth in an empty span with display: table-cell. + // It should render with the height that we define. But Chrome, in + // contenteditable mode only, treats that span as if it contains some + // text content. And that min-height over-rides our desired height. + // So we put another empty span inside the depth strut span. + const emptySpan = makeSpan([], []); + const depthStrut = makeSpan(["vlist"], [emptySpan]); + depthStrut.style.height = -minPos + "em"; // Safari wants the first row to have inline content; otherwise it + // puts the bottom of the *second* row on the baseline. + + const topStrut = makeSpan(["vlist-s"], [new SymbolNode("\u200b")]); + rows = [makeSpan(["vlist-r"], [vlist, topStrut]), makeSpan(["vlist-r"], [depthStrut])]; + } else { + rows = [makeSpan(["vlist-r"], [vlist])]; + } + + const vtable = makeSpan(["vlist-t"], rows); + + if (rows.length === 2) { + vtable.classes.push("vlist-t2"); + } + + vtable.height = maxPos; + vtable.depth = -minPos; + return vtable; +}; // Glue is a concept from TeX which is a flexible space between elements in +// either a vertical or horizontal list. In KaTeX, at least for now, it's +// static space between elements in a horizontal layout. + + +const makeGlue = (measurement, options) => { + // Make an empty span for the space + const rule = makeSpan(["mspace"], [], options); + const size = calculateSize(measurement, options); + rule.style.marginRight = `${size}em`; + return rule; +}; // Takes font options, and returns the appropriate fontLookup name + + +const retrieveTextFontName = function retrieveTextFontName(fontFamily, fontWeight, fontShape) { + let baseFontName = ""; + + switch (fontFamily) { + case "amsrm": + baseFontName = "AMS"; + break; + + case "textrm": + baseFontName = "Main"; + break; + + case "textsf": + baseFontName = "SansSerif"; + break; + + case "texttt": + baseFontName = "Typewriter"; + break; + + default: + baseFontName = fontFamily; + // use fonts added by a plugin + } + + let fontStylesName; + + if (fontWeight === "textbf" && fontShape === "textit") { + fontStylesName = "BoldItalic"; + } else if (fontWeight === "textbf") { + fontStylesName = "Bold"; + } else if (fontWeight === "textit") { + fontStylesName = "Italic"; + } else { + fontStylesName = "Regular"; + } + + return `${baseFontName}-${fontStylesName}`; +}; +/** + * Maps TeX font commands to objects containing: + * - variant: string used for "mathvariant" attribute in buildMathML.js + * - fontName: the "style" parameter to fontMetrics.getCharacterMetrics + */ +// A map between tex font commands an MathML mathvariant attribute values + + +const fontMap = { + // styles + "mathbf": { + variant: "bold", + fontName: "Main-Bold" + }, + "mathrm": { + variant: "normal", + fontName: "Main-Regular" + }, + "textit": { + variant: "italic", + fontName: "Main-Italic" + }, + "mathit": { + variant: "italic", + fontName: "Main-Italic" + }, + // Default math font, "mathnormal" and "boldsymbol" are missing because they + // require the use of several fonts: Main-Italic and Math-Italic for default + // math font, Main-Italic, Math-Italic, Caligraphic for "mathnormal", and + // Math-BoldItalic and Main-Bold for "boldsymbol". This is handled by a + // special case in makeOrd which ends up calling mathdefault, mathnormal, + // and boldsymbol. + // families + "mathbb": { + variant: "double-struck", + fontName: "AMS-Regular" + }, + "mathcal": { + variant: "script", + fontName: "Caligraphic-Regular" + }, + "mathfrak": { + variant: "fraktur", + fontName: "Fraktur-Regular" + }, + "mathscr": { + variant: "script", + fontName: "Script-Regular" + }, + "mathsf": { + variant: "sans-serif", + fontName: "SansSerif-Regular" + }, + "mathtt": { + variant: "monospace", + fontName: "Typewriter-Regular" + } +}; +const svgData = { + // path, width, height + vec: ["vec", 0.471, 0.714], + // values from the font glyph + oiintSize1: ["oiintSize1", 0.957, 0.499], + // oval to overlay the integrand + oiintSize2: ["oiintSize2", 1.472, 0.659], + oiiintSize1: ["oiiintSize1", 1.304, 0.499], + oiiintSize2: ["oiiintSize2", 1.98, 0.659] +}; + +const staticSvg = function staticSvg(value, options) { + // Create a span with inline SVG for the element. + const _svgData$value = svgData[value], + pathName = _svgData$value[0], + width = _svgData$value[1], + height = _svgData$value[2]; + const path = new PathNode(pathName); + const svgNode = new SvgNode([path], { + "width": width + "em", + "height": height + "em", + // Override CSS rule `.katex svg { width: 100% }` + "style": "width:" + width + "em", + "viewBox": "0 0 " + 1000 * width + " " + 1000 * height, + "preserveAspectRatio": "xMinYMin" + }); + const span = makeSvgSpan(["overlay"], [svgNode], options); + span.height = height; + span.style.height = height + "em"; + span.style.width = width + "em"; + return span; +}; + +var buildCommon = { + fontMap, + makeSymbol, + mathsym, + makeSpan, + makeSvgSpan, + makeLineSpan, + makeAnchor, + makeFragment, + wrapFragment, + makeVList, + makeOrd, + makeGlue, + staticSvg, + svgData, + tryCombineChars +}; + +/** + * Asserts that the node is of the given type and returns it with stricter + * typing. Throws if the node's type does not match. + */ +function assertNodeType(node, type) { + const typedNode = checkNodeType(node, type); + + if (!typedNode) { + throw new Error(`Expected node of type ${type}, but got ` + (node ? `node of type ${node.type}` : String(node))); + } // $FlowFixMe: Unsure why. + + + return typedNode; +} +/** + * Returns the node more strictly typed iff it is of the given type. Otherwise, + * returns null. + */ + +function checkNodeType(node, type) { + if (node && node.type === type) { + // The definition of ParseNode doesn't communicate to flow that + // `type: TYPE` (as that's not explicitly mentioned anywhere), though that + // happens to be true for all our value types. + // $FlowFixMe + return node; + } + + return null; +} +/** + * Asserts that the node is of the given type and returns it with stricter + * typing. Throws if the node's type does not match. + */ + +function assertAtomFamily(node, family) { + const typedNode = checkAtomFamily(node, family); + + if (!typedNode) { + throw new Error(`Expected node of type "atom" and family "${family}", but got ` + (node ? node.type === "atom" ? `atom of family ${node.family}` : `node of type ${node.type}` : String(node))); + } + + return typedNode; +} +/** + * Returns the node more strictly typed iff it is of the given type. Otherwise, + * returns null. + */ + +function checkAtomFamily(node, family) { + return node && node.type === "atom" && node.family === family ? node : null; +} +/** + * Returns the node more strictly typed iff it is of the given type. Otherwise, + * returns null. + */ + +function assertSymbolNodeType(node) { + const typedNode = checkSymbolNodeType(node); + + if (!typedNode) { + throw new Error(`Expected node of symbol group type, but got ` + (node ? `node of type ${node.type}` : String(node))); + } + + return typedNode; +} +/** + * Returns the node more strictly typed iff it is of the given type. Otherwise, + * returns null. + */ + +function checkSymbolNodeType(node) { + if (node && (node.type === "atom" || NON_ATOMS.hasOwnProperty(node.type))) { + // $FlowFixMe + return node; + } + + return null; +} + +/** + * Describes spaces between different classes of atoms. + */ +const thinspace = { + number: 3, + unit: "mu" +}; +const mediumspace = { + number: 4, + unit: "mu" +}; +const thickspace = { + number: 5, + unit: "mu" +}; // Making the type below exact with all optional fields doesn't work due to +// - https://github.com/facebook/flow/issues/4582 +// - https://github.com/facebook/flow/issues/5688 +// However, since *all* fields are optional, $Shape<> works as suggested in 5688 +// above. + +// Spacing relationships for display and text styles +const spacings = { + mord: { + mop: thinspace, + mbin: mediumspace, + mrel: thickspace, + minner: thinspace + }, + mop: { + mord: thinspace, + mop: thinspace, + mrel: thickspace, + minner: thinspace + }, + mbin: { + mord: mediumspace, + mop: mediumspace, + mopen: mediumspace, + minner: mediumspace + }, + mrel: { + mord: thickspace, + mop: thickspace, + mopen: thickspace, + minner: thickspace + }, + mopen: {}, + mclose: { + mop: thinspace, + mbin: mediumspace, + mrel: thickspace, + minner: thinspace + }, + mpunct: { + mord: thinspace, + mop: thinspace, + mrel: thickspace, + mopen: thinspace, + mclose: thinspace, + mpunct: thinspace, + minner: thinspace + }, + minner: { + mord: thinspace, + mop: thinspace, + mbin: mediumspace, + mrel: thickspace, + mopen: thinspace, + mpunct: thinspace, + minner: thinspace + } +}; // Spacing relationships for script and scriptscript styles + +const tightSpacings = { + mord: { + mop: thinspace + }, + mop: { + mord: thinspace, + mop: thinspace + }, + mbin: {}, + mrel: {}, + mopen: {}, + mclose: { + mop: thinspace + }, + mpunct: {}, + minner: { + mop: thinspace + } +}; + +/** + * All registered functions. + * `functions.js` just exports this same dictionary again and makes it public. + * `Parser.js` requires this dictionary. + */ +const _functions = {}; +/** + * All HTML builders. Should be only used in the `define*` and the `build*ML` + * functions. + */ + +const _htmlGroupBuilders = {}; +/** + * All MathML builders. Should be only used in the `define*` and the `build*ML` + * functions. + */ + +const _mathmlGroupBuilders = {}; +function defineFunction(_ref) { + let type = _ref.type, + names = _ref.names, + props = _ref.props, + handler = _ref.handler, + htmlBuilder = _ref.htmlBuilder, + mathmlBuilder = _ref.mathmlBuilder; + // Set default values of functions + const data = { + type, + numArgs: props.numArgs, + argTypes: props.argTypes, + greediness: props.greediness === undefined ? 1 : props.greediness, + allowedInText: !!props.allowedInText, + allowedInMath: props.allowedInMath === undefined ? true : props.allowedInMath, + numOptionalArgs: props.numOptionalArgs || 0, + infix: !!props.infix, + handler: handler + }; + + for (let i = 0; i < names.length; ++i) { + _functions[names[i]] = data; + } + + if (type) { + if (htmlBuilder) { + _htmlGroupBuilders[type] = htmlBuilder; + } + + if (mathmlBuilder) { + _mathmlGroupBuilders[type] = mathmlBuilder; + } + } +} +/** + * Use this to register only the HTML and MathML builders for a function (e.g. + * if the function's ParseNode is generated in Parser.js rather than via a + * stand-alone handler provided to `defineFunction`). + */ + +function defineFunctionBuilders(_ref2) { + let type = _ref2.type, + htmlBuilder = _ref2.htmlBuilder, + mathmlBuilder = _ref2.mathmlBuilder; + defineFunction({ + type, + names: [], + props: { + numArgs: 0 + }, + + handler() { + throw new Error('Should never be called.'); + }, + + htmlBuilder, + mathmlBuilder + }); +} // Since the corresponding buildHTML/buildMathML function expects a +// list of elements, we normalize for different kinds of arguments + +const ordargument = function ordargument(arg) { + const node = checkNodeType(arg, "ordgroup"); + return node ? node.body : [arg]; +}; + +/** + * This file does the main work of building a domTree structure from a parse + * tree. The entry point is the `buildHTML` function, which takes a parse tree. + * Then, the buildExpression, buildGroup, and various groupBuilders functions + * are called, to produce a final HTML tree. + */ +const makeSpan$1 = buildCommon.makeSpan; // Binary atoms (first class `mbin`) change into ordinary atoms (`mord`) +// depending on their surroundings. See TeXbook pg. 442-446, Rules 5 and 6, +// and the text before Rule 19. + +const binLeftCanceller = ["leftmost", "mbin", "mopen", "mrel", "mop", "mpunct"]; +const binRightCanceller = ["rightmost", "mrel", "mclose", "mpunct"]; +const styleMap = { + "display": Style$1.DISPLAY, + "text": Style$1.TEXT, + "script": Style$1.SCRIPT, + "scriptscript": Style$1.SCRIPTSCRIPT +}; +const DomEnum = { + mord: "mord", + mop: "mop", + mbin: "mbin", + mrel: "mrel", + mopen: "mopen", + mclose: "mclose", + mpunct: "mpunct", + minner: "minner" +}; + +/** + * Take a list of nodes, build them in order, and return a list of the built + * nodes. documentFragments are flattened into their contents, so the + * returned list contains no fragments. `isRealGroup` is true if `expression` + * is a real group (no atoms will be added on either side), as opposed to + * a partial group (e.g. one created by \color). `surrounding` is an array + * consisting type of nodes that will be added to the left and right. + */ +const buildExpression = function buildExpression(expression, options, isRealGroup, surrounding) { + if (surrounding === void 0) { + surrounding = [null, null]; + } + + // Parse expressions into `groups`. + const groups = []; + + for (let i = 0; i < expression.length; i++) { + const output = buildGroup(expression[i], options); + + if (output instanceof DocumentFragment) { + const children = output.children; + groups.push(...children); + } else { + groups.push(output); + } + } // If `expression` is a partial group, let the parent handle spacings + // to avoid processing groups multiple times. + + + if (!isRealGroup) { + return groups; + } + + let glueOptions = options; + + if (expression.length === 1) { + const node = checkNodeType(expression[0], "sizing") || checkNodeType(expression[0], "styling"); + + if (!node) ; else if (node.type === "sizing") { + glueOptions = options.havingSize(node.size); + } else if (node.type === "styling") { + glueOptions = options.havingStyle(styleMap[node.style]); + } + } // Dummy spans for determining spacings between surrounding atoms. + // If `expression` has no atoms on the left or right, class "leftmost" + // or "rightmost", respectively, is used to indicate it. + + + const dummyPrev = makeSpan$1([surrounding[0] || "leftmost"], [], options); + const dummyNext = makeSpan$1([surrounding[1] || "rightmost"], [], options); // TODO: These code assumes that a node's math class is the first element + // of its `classes` array. A later cleanup should ensure this, for + // instance by changing the signature of `makeSpan`. + // Before determining what spaces to insert, perform bin cancellation. + // Binary operators change to ordinary symbols in some contexts. + + traverseNonSpaceNodes(groups, (node, prev) => { + const prevType = prev.classes[0]; + const type = node.classes[0]; + + if (prevType === "mbin" && utils.contains(binRightCanceller, type)) { + prev.classes[0] = "mord"; + } else if (type === "mbin" && utils.contains(binLeftCanceller, prevType)) { + node.classes[0] = "mord"; + } + }, { + node: dummyPrev + }, dummyNext); + traverseNonSpaceNodes(groups, (node, prev) => { + const prevType = getTypeOfDomTree(prev); + const type = getTypeOfDomTree(node); // 'mtight' indicates that the node is script or scriptscript style. + + const space = prevType && type ? node.hasClass("mtight") ? tightSpacings[prevType][type] : spacings[prevType][type] : null; + + if (space) { + // Insert glue (spacing) after the `prev`. + return buildCommon.makeGlue(space, glueOptions); + } + }, { + node: dummyPrev + }, dummyNext); + return groups; +}; // Depth-first traverse non-space `nodes`, calling `callback` with the current and +// previous node as arguments, optionally returning a node to insert after the +// previous node. `prev` is an object with the previous node and `insertAfter` +// function to insert after it. `next` is a node that will be added to the right. +// Used for bin cancellation and inserting spacings. + +const traverseNonSpaceNodes = function traverseNonSpaceNodes(nodes, callback, prev, next) { + if (next) { + // temporarily append the right node, if exists + nodes.push(next); + } + + let i = 0; + + for (; i < nodes.length; i++) { + const node = nodes[i]; + const partialGroup = checkPartialGroup(node); + + if (partialGroup) { + // Recursive DFS + // $FlowFixMe: make nodes a $ReadOnlyArray by returning a new array + traverseNonSpaceNodes(partialGroup.children, callback, prev); + continue; + } // Ignore explicit spaces (e.g., \;, \,) when determining what implicit + // spacing should go between atoms of different classes + + + if (node.classes[0] === "mspace") { + continue; + } + + const result = callback(node, prev.node); + + if (result) { + if (prev.insertAfter) { + prev.insertAfter(result); + } else { + // insert at front + nodes.unshift(result); + i++; + } + } + + prev.node = node; + + prev.insertAfter = (index => n => { + nodes.splice(index + 1, 0, n); + i++; + })(i); + } + + if (next) { + nodes.pop(); + } +}; // Check if given node is a partial group, i.e., does not affect spacing around. + + +const checkPartialGroup = function checkPartialGroup(node) { + if (node instanceof DocumentFragment || node instanceof Anchor) { + return node; + } + + return null; +}; // Return the outermost node of a domTree. + + +const getOutermostNode = function getOutermostNode(node, side) { + const partialGroup = checkPartialGroup(node); + + if (partialGroup) { + const children = partialGroup.children; + + if (children.length) { + if (side === "right") { + return getOutermostNode(children[children.length - 1], "right"); + } else if (side === "left") { + return getOutermostNode(children[0], "left"); + } + } + } + + return node; +}; // Return math atom class (mclass) of a domTree. +// If `side` is given, it will get the type of the outermost node at given side. + + +const getTypeOfDomTree = function getTypeOfDomTree(node, side) { + if (!node) { + return null; + } + + if (side) { + node = getOutermostNode(node, side); + } // This makes a lot of assumptions as to where the type of atom + // appears. We should do a better job of enforcing this. + + + return DomEnum[node.classes[0]] || null; +}; +const makeNullDelimiter = function makeNullDelimiter(options, classes) { + const moreClasses = ["nulldelimiter"].concat(options.baseSizingClasses()); + return makeSpan$1(classes.concat(moreClasses)); +}; +/** + * buildGroup is the function that takes a group and calls the correct groupType + * function for it. It also handles the interaction of size and style changes + * between parents and children. + */ + +const buildGroup = function buildGroup(group, options, baseOptions) { + if (!group) { + return makeSpan$1(); + } + + if (_htmlGroupBuilders[group.type]) { + // Call the groupBuilders function + let groupNode = _htmlGroupBuilders[group.type](group, options); // If the size changed between the parent and the current group, account + // for that size difference. + + if (baseOptions && options.size !== baseOptions.size) { + groupNode = makeSpan$1(options.sizingClasses(baseOptions), [groupNode], options); + const multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; + groupNode.height *= multiplier; + groupNode.depth *= multiplier; + } + + return groupNode; + } else { + throw new ParseError("Got group of unknown type: '" + group.type + "'"); + } +}; +/** + * Combine an array of HTML DOM nodes (e.g., the output of `buildExpression`) + * into an unbreakable HTML node of class .base, with proper struts to + * guarantee correct vertical extent. `buildHTML` calls this repeatedly to + * make up the entire expression as a sequence of unbreakable units. + */ + +function buildHTMLUnbreakable(children, options) { + // Compute height and depth of this chunk. + const body = makeSpan$1(["base"], children, options); // Add strut, which ensures that the top of the HTML element falls at + // the height of the expression, and the bottom of the HTML element + // falls at the depth of the expression. + // We used to have separate top and bottom struts, where the bottom strut + // would like to use `vertical-align: top`, but in IE 9 this lowers the + // baseline of the box to the bottom of this strut (instead of staying in + // the normal place) so we use an absolute value for vertical-align instead. + + const strut = makeSpan$1(["strut"]); + strut.style.height = body.height + body.depth + "em"; + strut.style.verticalAlign = -body.depth + "em"; + body.children.unshift(strut); + return body; +} +/** + * Take an entire parse tree, and build it into an appropriate set of HTML + * nodes. + */ + + +function buildHTML(tree, options) { + // Strip off outer tag wrapper for processing below. + let tag = null; + + if (tree.length === 1 && tree[0].type === "tag") { + tag = tree[0].tag; + tree = tree[0].body; + } // Build the expression contained in the tree + + + const expression = buildExpression(tree, options, true); + const children = []; // Create one base node for each chunk between potential line breaks. + // The TeXBook [p.173] says "A formula will be broken only after a + // relation symbol like $=$ or $<$ or $\rightarrow$, or after a binary + // operation symbol like $+$ or $-$ or $\times$, where the relation or + // binary operation is on the ``outer level'' of the formula (i.e., not + // enclosed in {...} and not part of an \over construction)." + + let parts = []; + + for (let i = 0; i < expression.length; i++) { + parts.push(expression[i]); + + if (expression[i].hasClass("mbin") || expression[i].hasClass("mrel") || expression[i].hasClass("allowbreak")) { + // Put any post-operator glue on same line as operator. + // Watch for \nobreak along the way, and stop at \newline. + let nobreak = false; + + while (i < expression.length - 1 && expression[i + 1].hasClass("mspace") && !expression[i + 1].hasClass("newline")) { + i++; + parts.push(expression[i]); + + if (expression[i].hasClass("nobreak")) { + nobreak = true; + } + } // Don't allow break if \nobreak among the post-operator glue. + + + if (!nobreak) { + children.push(buildHTMLUnbreakable(parts, options)); + parts = []; + } + } else if (expression[i].hasClass("newline")) { + // Write the line except the newline + parts.pop(); + + if (parts.length > 0) { + children.push(buildHTMLUnbreakable(parts, options)); + parts = []; + } // Put the newline at the top level + + + children.push(expression[i]); + } + } + + if (parts.length > 0) { + children.push(buildHTMLUnbreakable(parts, options)); + } // Now, if there was a tag, build it too and append it as a final child. + + + let tagChild; + + if (tag) { + tagChild = buildHTMLUnbreakable(buildExpression(tag, options, true)); + tagChild.classes = ["tag"]; + children.push(tagChild); + } + + const htmlNode = makeSpan$1(["katex-html"], children); + htmlNode.setAttribute("aria-hidden", "true"); // Adjust the strut of the tag to be the maximum height of all children + // (the height of the enclosing htmlNode) for proper vertical alignment. + + if (tagChild) { + const strut = tagChild.children[0]; + strut.style.height = htmlNode.height + htmlNode.depth + "em"; + strut.style.verticalAlign = -htmlNode.depth + "em"; + } + + return htmlNode; +} + +/** + * These objects store data about MathML nodes. This is the MathML equivalent + * of the types in domTree.js. Since MathML handles its own rendering, and + * since we're mainly using MathML to improve accessibility, we don't manage + * any of the styling state that the plain DOM nodes do. + * + * The `toNode` and `toMarkup` functions work simlarly to how they do in + * domTree.js, creating namespaced DOM nodes and HTML text markup respectively. + */ +function newDocumentFragment(children) { + return new DocumentFragment(children); +} +/** + * This node represents a general purpose MathML node of any type. The + * constructor requires the type of node to create (for example, `"mo"` or + * `"mspace"`, corresponding to `` and `` tags). + */ + +class MathNode { + constructor(type, children) { + this.type = void 0; + this.attributes = void 0; + this.children = void 0; + this.type = type; + this.attributes = {}; + this.children = children || []; + } + /** + * Sets an attribute on a MathML node. MathML depends on attributes to convey a + * semantic content, so this is used heavily. + */ + + + setAttribute(name, value) { + this.attributes[name] = value; + } + /** + * Gets an attribute on a MathML node. + */ + + + getAttribute(name) { + return this.attributes[name]; + } + /** + * Converts the math node into a MathML-namespaced DOM element. + */ + + + toNode() { + const node = document.createElementNS("http://www.w3.org/1998/Math/MathML", this.type); + + for (const attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + node.setAttribute(attr, this.attributes[attr]); + } + } + + for (let i = 0; i < this.children.length; i++) { + node.appendChild(this.children[i].toNode()); + } + + return node; + } + /** + * Converts the math node into an HTML markup string. + */ + + + toMarkup() { + let markup = "<" + this.type; // Add the attributes + + for (const attr in this.attributes) { + if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { + markup += " " + attr + "=\""; + markup += utils.escape(this.attributes[attr]); + markup += "\""; + } + } + + markup += ">"; + + for (let i = 0; i < this.children.length; i++) { + markup += this.children[i].toMarkup(); + } + + markup += ""; + return markup; + } + /** + * Converts the math node into a string, similar to innerText, but escaped. + */ + + + toText() { + return this.children.map(child => child.toText()).join(""); + } + +} +/** + * This node represents a piece of text. + */ + +class TextNode { + constructor(text) { + this.text = void 0; + this.text = text; + } + /** + * Converts the text node into a DOM text node. + */ + + + toNode() { + return document.createTextNode(this.text); + } + /** + * Converts the text node into escaped HTML markup + * (representing the text itself). + */ + + + toMarkup() { + return utils.escape(this.toText()); + } + /** + * Converts the text node into a string + * (representing the text iteself). + */ + + + toText() { + return this.text; + } + +} +/** + * This node represents a space, but may render as or as text, + * depending on the width. + */ + +class SpaceNode { + /** + * Create a Space node with width given in CSS ems. + */ + constructor(width) { + this.width = void 0; + this.character = void 0; + this.width = width; // See https://www.w3.org/TR/2000/WD-MathML2-20000328/chapter6.html + // for a table of space-like characters. We use Unicode + // representations instead of &LongNames; as it's not clear how to + // make the latter via document.createTextNode. + + if (width >= 0.05555 && width <= 0.05556) { + this.character = "\u200a"; //   + } else if (width >= 0.1666 && width <= 0.1667) { + this.character = "\u2009"; //   + } else if (width >= 0.2222 && width <= 0.2223) { + this.character = "\u2005"; //   + } else if (width >= 0.2777 && width <= 0.2778) { + this.character = "\u2005\u200a"; //    + } else if (width >= -0.05556 && width <= -0.05555) { + this.character = "\u200a\u2063"; // ​ + } else if (width >= -0.1667 && width <= -0.1666) { + this.character = "\u2009\u2063"; // ​ + } else if (width >= -0.2223 && width <= -0.2222) { + this.character = "\u205f\u2063"; // ​ + } else if (width >= -0.2778 && width <= -0.2777) { + this.character = "\u2005\u2063"; // ​ + } else { + this.character = null; + } + } + /** + * Converts the math node into a MathML-namespaced DOM element. + */ + + + toNode() { + if (this.character) { + return document.createTextNode(this.character); + } else { + const node = document.createElementNS("http://www.w3.org/1998/Math/MathML", "mspace"); + node.setAttribute("width", this.width + "em"); + return node; + } + } + /** + * Converts the math node into an HTML markup string. + */ + + + toMarkup() { + if (this.character) { + return `${this.character}`; + } else { + return ``; + } + } + /** + * Converts the math node into a string, similar to innerText. + */ + + + toText() { + if (this.character) { + return this.character; + } else { + return " "; + } + } + +} + +var mathMLTree = { + MathNode, + TextNode, + SpaceNode, + newDocumentFragment +}; + +/** + * This file converts a parse tree into a cooresponding MathML tree. The main + * entry point is the `buildMathML` function, which takes a parse tree from the + * parser. + */ + +/** + * Takes a symbol and converts it into a MathML text node after performing + * optional replacement from symbols.js. + */ +const makeText = function makeText(text, mode, options) { + if (symbols[mode][text] && symbols[mode][text].replace && text.charCodeAt(0) !== 0xD835 && !(ligatures.hasOwnProperty(text) && options && (options.fontFamily && options.fontFamily.substr(4, 2) === "tt" || options.font && options.font.substr(4, 2) === "tt"))) { + text = symbols[mode][text].replace; + } + + return new mathMLTree.TextNode(text); +}; +/** + * Wrap the given array of nodes in an node if needed, i.e., + * unless the array has length 1. Always returns a single node. + */ + +const makeRow = function makeRow(body) { + if (body.length === 1) { + return body[0]; + } else { + return new mathMLTree.MathNode("mrow", body); + } +}; +/** + * Returns the math variant as a string or null if none is required. + */ + +const getVariant = function getVariant(group, options) { + // Handle \text... font specifiers as best we can. + // MathML has a limited list of allowable mathvariant specifiers; see + // https://www.w3.org/TR/MathML3/chapter3.html#presm.commatt + if (options.fontFamily === "texttt") { + return "monospace"; + } else if (options.fontFamily === "textsf") { + if (options.fontShape === "textit" && options.fontWeight === "textbf") { + return "sans-serif-bold-italic"; + } else if (options.fontShape === "textit") { + return "sans-serif-italic"; + } else if (options.fontWeight === "textbf") { + return "bold-sans-serif"; + } else { + return "sans-serif"; + } + } else if (options.fontShape === "textit" && options.fontWeight === "textbf") { + return "bold-italic"; + } else if (options.fontShape === "textit") { + return "italic"; + } else if (options.fontWeight === "textbf") { + return "bold"; + } + + const font = options.font; + + if (!font || font === "mathnormal") { + return null; + } + + const mode = group.mode; + + if (font === "mathit") { + return "italic"; + } else if (font === "boldsymbol") { + return "bold-italic"; + } else if (font === "mathbf") { + return "bold"; + } else if (font === "mathbb") { + return "double-struck"; + } else if (font === "mathfrak") { + return "fraktur"; + } else if (font === "mathscr" || font === "mathcal") { + // MathML makes no distinction between script and caligrahpic + return "script"; + } else if (font === "mathsf") { + return "sans-serif"; + } else if (font === "mathtt") { + return "monospace"; + } + + let text = group.text; + + if (utils.contains(["\\imath", "\\jmath"], text)) { + return null; + } + + if (symbols[mode][text] && symbols[mode][text].replace) { + text = symbols[mode][text].replace; + } + + const fontName = buildCommon.fontMap[font].fontName; + + if (getCharacterMetrics(text, fontName, mode)) { + return buildCommon.fontMap[font].variant; + } + + return null; +}; +/** + * Takes a list of nodes, builds them, and returns a list of the generated + * MathML nodes. Also combine consecutive outputs into a single + * tag. + */ + +const buildExpression$1 = function buildExpression(expression, options, isOrdgroup) { + if (expression.length === 1) { + const group = buildGroup$1(expression[0], options); + + if (isOrdgroup && group instanceof MathNode && group.type === "mo") { + // When TeX writers want to suppress spacing on an operator, + // they often put the operator by itself inside braces. + group.setAttribute("lspace", "0em"); + group.setAttribute("rspace", "0em"); + } + + return [group]; + } + + const groups = []; + let lastGroup; + + for (let i = 0; i < expression.length; i++) { + const group = buildGroup$1(expression[i], options); + + if (group instanceof MathNode && lastGroup instanceof MathNode) { + // Concatenate adjacent s + if (group.type === 'mtext' && lastGroup.type === 'mtext' && group.getAttribute('mathvariant') === lastGroup.getAttribute('mathvariant')) { + lastGroup.children.push(...group.children); + continue; // Concatenate adjacent s + } else if (group.type === 'mn' && lastGroup.type === 'mn') { + lastGroup.children.push(...group.children); + continue; // Concatenate ... followed by . + } else if (group.type === 'mi' && group.children.length === 1 && lastGroup.type === 'mn') { + const child = group.children[0]; + + if (child instanceof TextNode && child.text === '.') { + lastGroup.children.push(...group.children); + continue; + } + } else if (lastGroup.type === 'mi' && lastGroup.children.length === 1) { + const lastChild = lastGroup.children[0]; + + if (lastChild instanceof TextNode && lastChild.text === '\u0338' && (group.type === 'mo' || group.type === 'mi' || group.type === 'mn')) { + const child = group.children[0]; + + if (child instanceof TextNode && child.text.length > 0) { + // Overlay with combining character long solidus + child.text = child.text.slice(0, 1) + "\u0338" + child.text.slice(1); + groups.pop(); + } + } + } + } + + groups.push(group); + lastGroup = group; + } + + return groups; +}; +/** + * Equivalent to buildExpression, but wraps the elements in an + * if there's more than one. Returns a single node instead of an array. + */ + +const buildExpressionRow = function buildExpressionRow(expression, options, isOrdgroup) { + return makeRow(buildExpression$1(expression, options, isOrdgroup)); +}; +/** + * Takes a group from the parser and calls the appropriate groupBuilders function + * on it to produce a MathML node. + */ + +const buildGroup$1 = function buildGroup(group, options) { + if (!group) { + return new mathMLTree.MathNode("mrow"); + } + + if (_mathmlGroupBuilders[group.type]) { + // Call the groupBuilders function + const result = _mathmlGroupBuilders[group.type](group, options); + return result; + } else { + throw new ParseError("Got group of unknown type: '" + group.type + "'"); + } +}; +/** + * Takes a full parse tree and settings and builds a MathML representation of + * it. In particular, we put the elements from building the parse tree into a + * tag so we can also include that TeX source as an annotation. + * + * Note that we actually return a domTree element with a `` inside it so + * we can do appropriate styling. + */ + +function buildMathML(tree, texExpression, options, forMathmlOnly) { + const expression = buildExpression$1(tree, options); // Wrap up the expression in an mrow so it is presented in the semantics + // tag correctly, unless it's a single or . + + let wrapper; + + if (expression.length === 1 && expression[0] instanceof MathNode && utils.contains(["mrow", "mtable"], expression[0].type)) { + wrapper = expression[0]; + } else { + wrapper = new mathMLTree.MathNode("mrow", expression); + } // Build a TeX annotation of the source + + + const annotation = new mathMLTree.MathNode("annotation", [new mathMLTree.TextNode(texExpression)]); + annotation.setAttribute("encoding", "application/x-tex"); + const semantics = new mathMLTree.MathNode("semantics", [wrapper, annotation]); + const math = new mathMLTree.MathNode("math", [semantics]); + math.setAttribute("xmlns", "http://www.w3.org/1998/Math/MathML"); // You can't style nodes, so we wrap the node in a span. + // NOTE: The span class is not typed to have nodes as children, and + // we don't want to make the children type more generic since the children + // of span are expected to have more fields in `buildHtml` contexts. + + const wrapperClass = forMathmlOnly ? "katex" : "katex-mathml"; // $FlowFixMe + + return buildCommon.makeSpan([wrapperClass], [math]); +} + +const optionsFromSettings = function optionsFromSettings(settings) { + return new Options({ + style: settings.displayMode ? Style$1.DISPLAY : Style$1.TEXT, + maxSize: settings.maxSize, + minRuleThickness: settings.minRuleThickness + }); +}; + +const displayWrap = function displayWrap(node, settings) { + if (settings.displayMode) { + const classes = ["katex-display"]; + + if (settings.leqno) { + classes.push("leqno"); + } + + if (settings.fleqn) { + classes.push("fleqn"); + } + + node = buildCommon.makeSpan(classes, [node]); + } + + return node; +}; + +const buildTree = function buildTree(tree, expression, settings) { + const options = optionsFromSettings(settings); + let katexNode; + + if (settings.output === "mathml") { + return buildMathML(tree, expression, options, true); + } else if (settings.output === "html") { + const htmlNode = buildHTML(tree, options); + katexNode = buildCommon.makeSpan(["katex"], [htmlNode]); + } else { + const mathMLNode = buildMathML(tree, expression, options, false); + const htmlNode = buildHTML(tree, options); + katexNode = buildCommon.makeSpan(["katex"], [mathMLNode, htmlNode]); + } + + return displayWrap(katexNode, settings); +}; +const buildHTMLTree = function buildHTMLTree(tree, expression, settings) { + const options = optionsFromSettings(settings); + const htmlNode = buildHTML(tree, options); + const katexNode = buildCommon.makeSpan(["katex"], [htmlNode]); + return displayWrap(katexNode, settings); +}; + +/** + * This file provides support to buildMathML.js and buildHTML.js + * for stretchy wide elements rendered from SVG files + * and other CSS trickery. + */ +const stretchyCodePoint = { + widehat: "^", + widecheck: "ˇ", + widetilde: "~", + utilde: "~", + overleftarrow: "\u2190", + underleftarrow: "\u2190", + xleftarrow: "\u2190", + overrightarrow: "\u2192", + underrightarrow: "\u2192", + xrightarrow: "\u2192", + underbrace: "\u23df", + overbrace: "\u23de", + overgroup: "\u23e0", + undergroup: "\u23e1", + overleftrightarrow: "\u2194", + underleftrightarrow: "\u2194", + xleftrightarrow: "\u2194", + Overrightarrow: "\u21d2", + xRightarrow: "\u21d2", + overleftharpoon: "\u21bc", + xleftharpoonup: "\u21bc", + overrightharpoon: "\u21c0", + xrightharpoonup: "\u21c0", + xLeftarrow: "\u21d0", + xLeftrightarrow: "\u21d4", + xhookleftarrow: "\u21a9", + xhookrightarrow: "\u21aa", + xmapsto: "\u21a6", + xrightharpoondown: "\u21c1", + xleftharpoondown: "\u21bd", + xrightleftharpoons: "\u21cc", + xleftrightharpoons: "\u21cb", + xtwoheadleftarrow: "\u219e", + xtwoheadrightarrow: "\u21a0", + xlongequal: "=", + xtofrom: "\u21c4", + xrightleftarrows: "\u21c4", + xrightequilibrium: "\u21cc", + // Not a perfect match. + xleftequilibrium: "\u21cb" // None better available. + +}; + +const mathMLnode = function mathMLnode(label) { + const node = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(stretchyCodePoint[label.substr(1)])]); + node.setAttribute("stretchy", "true"); + return node; +}; // Many of the KaTeX SVG images have been adapted from glyphs in KaTeX fonts. +// Copyright (c) 2009-2010, Design Science, Inc. () +// Copyright (c) 2014-2017 Khan Academy () +// Licensed under the SIL Open Font License, Version 1.1. +// See \nhttp://scripts.sil.org/OFL +// Very Long SVGs +// Many of the KaTeX stretchy wide elements use a long SVG image and an +// overflow: hidden tactic to achieve a stretchy image while avoiding +// distortion of arrowheads or brace corners. +// The SVG typically contains a very long (400 em) arrow. +// The SVG is in a container span that has overflow: hidden, so the span +// acts like a window that exposes only part of the SVG. +// The SVG always has a longer, thinner aspect ratio than the container span. +// After the SVG fills 100% of the height of the container span, +// there is a long arrow shaft left over. That left-over shaft is not shown. +// Instead, it is sliced off because the span's CSS has overflow: hidden. +// Thus, the reader sees an arrow that matches the subject matter width +// without distortion. +// Some functions, such as \cancel, need to vary their aspect ratio. These +// functions do not get the overflow SVG treatment. +// Second Brush Stroke +// Low resolution monitors struggle to display images in fine detail. +// So browsers apply anti-aliasing. A long straight arrow shaft therefore +// will sometimes appear as if it has a blurred edge. +// To mitigate this, these SVG files contain a second "brush-stroke" on the +// arrow shafts. That is, a second long thin rectangular SVG path has been +// written directly on top of each arrow shaft. This reinforcement causes +// some of the screen pixels to display as black instead of the anti-aliased +// gray pixel that a single path would generate. So we get arrow shafts +// whose edges appear to be sharper. +// In the katexImagesData object just below, the dimensions all +// correspond to path geometry inside the relevant SVG. +// For example, \overrightarrow uses the same arrowhead as glyph U+2192 +// from the KaTeX Main font. The scaling factor is 1000. +// That is, inside the font, that arrowhead is 522 units tall, which +// corresponds to 0.522 em inside the document. + + +const katexImagesData = { + // path(s), minWidth, height, align + overrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"], + overleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"], + underrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"], + underleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"], + xrightarrow: [["rightarrow"], 1.469, 522, "xMaxYMin"], + xleftarrow: [["leftarrow"], 1.469, 522, "xMinYMin"], + Overrightarrow: [["doublerightarrow"], 0.888, 560, "xMaxYMin"], + xRightarrow: [["doublerightarrow"], 1.526, 560, "xMaxYMin"], + xLeftarrow: [["doubleleftarrow"], 1.526, 560, "xMinYMin"], + overleftharpoon: [["leftharpoon"], 0.888, 522, "xMinYMin"], + xleftharpoonup: [["leftharpoon"], 0.888, 522, "xMinYMin"], + xleftharpoondown: [["leftharpoondown"], 0.888, 522, "xMinYMin"], + overrightharpoon: [["rightharpoon"], 0.888, 522, "xMaxYMin"], + xrightharpoonup: [["rightharpoon"], 0.888, 522, "xMaxYMin"], + xrightharpoondown: [["rightharpoondown"], 0.888, 522, "xMaxYMin"], + xlongequal: [["longequal"], 0.888, 334, "xMinYMin"], + xtwoheadleftarrow: [["twoheadleftarrow"], 0.888, 334, "xMinYMin"], + xtwoheadrightarrow: [["twoheadrightarrow"], 0.888, 334, "xMaxYMin"], + overleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522], + overbrace: [["leftbrace", "midbrace", "rightbrace"], 1.6, 548], + underbrace: [["leftbraceunder", "midbraceunder", "rightbraceunder"], 1.6, 548], + underleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522], + xleftrightarrow: [["leftarrow", "rightarrow"], 1.75, 522], + xLeftrightarrow: [["doubleleftarrow", "doublerightarrow"], 1.75, 560], + xrightleftharpoons: [["leftharpoondownplus", "rightharpoonplus"], 1.75, 716], + xleftrightharpoons: [["leftharpoonplus", "rightharpoondownplus"], 1.75, 716], + xhookleftarrow: [["leftarrow", "righthook"], 1.08, 522], + xhookrightarrow: [["lefthook", "rightarrow"], 1.08, 522], + overlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522], + underlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522], + overgroup: [["leftgroup", "rightgroup"], 0.888, 342], + undergroup: [["leftgroupunder", "rightgroupunder"], 0.888, 342], + xmapsto: [["leftmapsto", "rightarrow"], 1.5, 522], + xtofrom: [["leftToFrom", "rightToFrom"], 1.75, 528], + // The next three arrows are from the mhchem package. + // In mhchem.sty, min-length is 2.0em. But these arrows might appear in the + // document as \xrightarrow or \xrightleftharpoons. Those have + // min-length = 1.75em, so we set min-length on these next three to match. + xrightleftarrows: [["baraboveleftarrow", "rightarrowabovebar"], 1.75, 901], + xrightequilibrium: [["baraboveshortleftharpoon", "rightharpoonaboveshortbar"], 1.75, 716], + xleftequilibrium: [["shortbaraboveleftharpoon", "shortrightharpoonabovebar"], 1.75, 716] +}; + +const groupLength = function groupLength(arg) { + if (arg.type === "ordgroup") { + return arg.body.length; + } else { + return 1; + } +}; + +const svgSpan = function svgSpan(group, options) { + // Create a span with inline SVG for the element. + function buildSvgSpan_() { + let viewBoxWidth = 400000; // default + + const label = group.label.substr(1); + + if (utils.contains(["widehat", "widecheck", "widetilde", "utilde"], label)) { + // Each type in the `if` statement corresponds to one of the ParseNode + // types below. This narrowing is required to access `grp.base`. + const grp = group; // There are four SVG images available for each function. + // Choose a taller image when there are more characters. + + const numChars = groupLength(grp.base); + let viewBoxHeight; + let pathName; + let height; + + if (numChars > 5) { + if (label === "widehat" || label === "widecheck") { + viewBoxHeight = 420; + viewBoxWidth = 2364; + height = 0.42; + pathName = label + "4"; + } else { + viewBoxHeight = 312; + viewBoxWidth = 2340; + height = 0.34; + pathName = "tilde4"; + } + } else { + const imgIndex = [1, 1, 2, 2, 3, 3][numChars]; + + if (label === "widehat" || label === "widecheck") { + viewBoxWidth = [0, 1062, 2364, 2364, 2364][imgIndex]; + viewBoxHeight = [0, 239, 300, 360, 420][imgIndex]; + height = [0, 0.24, 0.3, 0.3, 0.36, 0.42][imgIndex]; + pathName = label + imgIndex; + } else { + viewBoxWidth = [0, 600, 1033, 2339, 2340][imgIndex]; + viewBoxHeight = [0, 260, 286, 306, 312][imgIndex]; + height = [0, 0.26, 0.286, 0.3, 0.306, 0.34][imgIndex]; + pathName = "tilde" + imgIndex; + } + } + + const path = new PathNode(pathName); + const svgNode = new SvgNode([path], { + "width": "100%", + "height": height + "em", + "viewBox": `0 0 ${viewBoxWidth} ${viewBoxHeight}`, + "preserveAspectRatio": "none" + }); + return { + span: buildCommon.makeSvgSpan([], [svgNode], options), + minWidth: 0, + height + }; + } else { + const spans = []; + const data = katexImagesData[label]; + const paths = data[0], + minWidth = data[1], + viewBoxHeight = data[2]; + const height = viewBoxHeight / 1000; + const numSvgChildren = paths.length; + let widthClasses; + let aligns; + + if (numSvgChildren === 1) { + // $FlowFixMe: All these cases must be of the 4-tuple type. + const align1 = data[3]; + widthClasses = ["hide-tail"]; + aligns = [align1]; + } else if (numSvgChildren === 2) { + widthClasses = ["halfarrow-left", "halfarrow-right"]; + aligns = ["xMinYMin", "xMaxYMin"]; + } else if (numSvgChildren === 3) { + widthClasses = ["brace-left", "brace-center", "brace-right"]; + aligns = ["xMinYMin", "xMidYMin", "xMaxYMin"]; + } else { + throw new Error(`Correct katexImagesData or update code here to support + ${numSvgChildren} children.`); + } + + for (let i = 0; i < numSvgChildren; i++) { + const path = new PathNode(paths[i]); + const svgNode = new SvgNode([path], { + "width": "400em", + "height": height + "em", + "viewBox": `0 0 ${viewBoxWidth} ${viewBoxHeight}`, + "preserveAspectRatio": aligns[i] + " slice" + }); + const span = buildCommon.makeSvgSpan([widthClasses[i]], [svgNode], options); + + if (numSvgChildren === 1) { + return { + span, + minWidth, + height + }; + } else { + span.style.height = height + "em"; + spans.push(span); + } + } + + return { + span: buildCommon.makeSpan(["stretchy"], spans, options), + minWidth, + height + }; + } + } // buildSvgSpan_() + + + const _buildSvgSpan_ = buildSvgSpan_(), + span = _buildSvgSpan_.span, + minWidth = _buildSvgSpan_.minWidth, + height = _buildSvgSpan_.height; // Note that we are returning span.depth = 0. + // Any adjustments relative to the baseline must be done in buildHTML. + + + span.height = height; + span.style.height = height + "em"; + + if (minWidth > 0) { + span.style.minWidth = minWidth + "em"; + } + + return span; +}; + +const encloseSpan = function encloseSpan(inner, label, pad, options) { + // Return an image span for \cancel, \bcancel, \xcancel, or \fbox + let img; + const totalHeight = inner.height + inner.depth + 2 * pad; + + if (/fbox|color/.test(label)) { + img = buildCommon.makeSpan(["stretchy", label], [], options); + + if (label === "fbox") { + const color = options.color && options.getColor(); + + if (color) { + img.style.borderColor = color; + } + } + } else { + // \cancel, \bcancel, or \xcancel + // Since \cancel's SVG is inline and it omits the viewBox attribute, + // its stroke-width will not vary with span area. + const lines = []; + + if (/^[bx]cancel$/.test(label)) { + lines.push(new LineNode({ + "x1": "0", + "y1": "0", + "x2": "100%", + "y2": "100%", + "stroke-width": "0.046em" + })); + } + + if (/^x?cancel$/.test(label)) { + lines.push(new LineNode({ + "x1": "0", + "y1": "100%", + "x2": "100%", + "y2": "0", + "stroke-width": "0.046em" + })); + } + + const svgNode = new SvgNode(lines, { + "width": "100%", + "height": totalHeight + "em" + }); + img = buildCommon.makeSvgSpan([], [svgNode], options); + } + + img.height = totalHeight; + img.style.height = totalHeight + "em"; + return img; +}; + +var stretchy = { + encloseSpan, + mathMLnode, + svgSpan +}; + +// NOTE: Unlike most `htmlBuilder`s, this one handles not only "accent", but +const htmlBuilder = (grp, options) => { + // Accents are handled in the TeXbook pg. 443, rule 12. + let base; + let group; + const supSub = checkNodeType(grp, "supsub"); + let supSubGroup; + + if (supSub) { + // If our base is a character box, and we have superscripts and + // subscripts, the supsub will defer to us. In particular, we want + // to attach the superscripts and subscripts to the inner body (so + // that the position of the superscripts and subscripts won't be + // affected by the height of the accent). We accomplish this by + // sticking the base of the accent into the base of the supsub, and + // rendering that, while keeping track of where the accent is. + // The real accent group is the base of the supsub group + group = assertNodeType(supSub.base, "accent"); // The character box is the base of the accent group + + base = group.base; // Stick the character box into the base of the supsub group + + supSub.base = base; // Rerender the supsub group with its new base, and store that + // result. + + supSubGroup = assertSpan(buildGroup(supSub, options)); // reset original base + + supSub.base = group; + } else { + group = assertNodeType(grp, "accent"); + base = group.base; + } // Build the base group + + + const body = buildGroup(base, options.havingCrampedStyle()); // Does the accent need to shift for the skew of a character? + + const mustShift = group.isShifty && utils.isCharacterBox(base); // Calculate the skew of the accent. This is based on the line "If the + // nucleus is not a single character, let s = 0; otherwise set s to the + // kern amount for the nucleus followed by the \skewchar of its font." + // Note that our skew metrics are just the kern between each character + // and the skewchar. + + let skew = 0; + + if (mustShift) { + // If the base is a character box, then we want the skew of the + // innermost character. To do that, we find the innermost character: + const baseChar = utils.getBaseElem(base); // Then, we render its group to get the symbol inside it + + const baseGroup = buildGroup(baseChar, options.havingCrampedStyle()); // Finally, we pull the skew off of the symbol. + + skew = assertSymbolDomNode(baseGroup).skew; // Note that we now throw away baseGroup, because the layers we + // removed with getBaseElem might contain things like \color which + // we can't get rid of. + // TODO(emily): Find a better way to get the skew + } // calculate the amount of space between the body and the accent + + + let clearance = Math.min(body.height, options.fontMetrics().xHeight); // Build the accent + + let accentBody; + + if (!group.isStretchy) { + let accent; + let width; + + if (group.label === "\\vec") { + // Before version 0.9, \vec used the combining font glyph U+20D7. + // But browsers, especially Safari, are not consistent in how they + // render combining characters when not preceded by a character. + // So now we use an SVG. + // If Safari reforms, we should consider reverting to the glyph. + accent = buildCommon.staticSvg("vec", options); + width = buildCommon.svgData.vec[1]; + } else { + accent = buildCommon.makeOrd({ + mode: group.mode, + text: group.label + }, options, "textord"); + accent = assertSymbolDomNode(accent); // Remove the italic correction of the accent, because it only serves to + // shift the accent over to a place we don't want. + + accent.italic = 0; + width = accent.width; + } + + accentBody = buildCommon.makeSpan(["accent-body"], [accent]); // "Full" accents expand the width of the resulting symbol to be + // at least the width of the accent, and overlap directly onto the + // character without any vertical offset. + + const accentFull = group.label === "\\textcircled"; + + if (accentFull) { + accentBody.classes.push('accent-full'); + clearance = body.height; + } // Shift the accent over by the skew. + + + let left = skew; // CSS defines `.katex .accent .accent-body:not(.accent-full) { width: 0 }` + // so that the accent doesn't contribute to the bounding box. + // We need to shift the character by its width (effectively half + // its width) to compensate. + + if (!accentFull) { + left -= width / 2; + } + + accentBody.style.left = left + "em"; // \textcircled uses the \bigcirc glyph, so it needs some + // vertical adjustment to match LaTeX. + + if (group.label === "\\textcircled") { + accentBody.style.top = ".2em"; + } + + accentBody = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: body + }, { + type: "kern", + size: -clearance + }, { + type: "elem", + elem: accentBody + }] + }, options); + } else { + accentBody = stretchy.svgSpan(group, options); + accentBody = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: body + }, { + type: "elem", + elem: accentBody, + wrapperClasses: ["svg-align"], + wrapperStyle: skew > 0 ? { + width: `calc(100% - ${2 * skew}em)`, + marginLeft: `${2 * skew}em` + } : undefined + }] + }, options); + } + + const accentWrap = buildCommon.makeSpan(["mord", "accent"], [accentBody], options); + + if (supSubGroup) { + // Here, we replace the "base" child of the supsub with our newly + // generated accent. + supSubGroup.children[0] = accentWrap; // Since we don't rerun the height calculation after replacing the + // accent, we manually recalculate height. + + supSubGroup.height = Math.max(accentWrap.height, supSubGroup.height); // Accents should always be ords, even when their innards are not. + + supSubGroup.classes[0] = "mord"; + return supSubGroup; + } else { + return accentWrap; + } +}; + +const mathmlBuilder = (group, options) => { + const accentNode = group.isStretchy ? stretchy.mathMLnode(group.label) : new mathMLTree.MathNode("mo", [makeText(group.label, group.mode)]); + const node = new mathMLTree.MathNode("mover", [buildGroup$1(group.base, options), accentNode]); + node.setAttribute("accent", "true"); + return node; +}; + +const NON_STRETCHY_ACCENT_REGEX = new RegExp(["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring"].map(accent => `\\${accent}`).join("|")); // Accents + +defineFunction({ + type: "accent", + names: ["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring", "\\widecheck", "\\widehat", "\\widetilde", "\\overrightarrow", "\\overleftarrow", "\\Overrightarrow", "\\overleftrightarrow", "\\overgroup", "\\overlinesegment", "\\overleftharpoon", "\\overrightharpoon"], + props: { + numArgs: 1 + }, + handler: (context, args) => { + const base = args[0]; + const isStretchy = !NON_STRETCHY_ACCENT_REGEX.test(context.funcName); + const isShifty = !isStretchy || context.funcName === "\\widehat" || context.funcName === "\\widetilde" || context.funcName === "\\widecheck"; + return { + type: "accent", + mode: context.parser.mode, + label: context.funcName, + isStretchy: isStretchy, + isShifty: isShifty, + base: base + }; + }, + htmlBuilder, + mathmlBuilder +}); // Text-mode accents + +defineFunction({ + type: "accent", + names: ["\\'", "\\`", "\\^", "\\~", "\\=", "\\u", "\\.", '\\"', "\\r", "\\H", "\\v", "\\textcircled"], + props: { + numArgs: 1, + allowedInText: true, + allowedInMath: false + }, + handler: (context, args) => { + const base = args[0]; + return { + type: "accent", + mode: context.parser.mode, + label: context.funcName, + isStretchy: false, + isShifty: true, + base: base + }; + }, + htmlBuilder, + mathmlBuilder +}); + +// Horizontal overlap functions +defineFunction({ + type: "accentUnder", + names: ["\\underleftarrow", "\\underrightarrow", "\\underleftrightarrow", "\\undergroup", "\\underlinesegment", "\\utilde"], + props: { + numArgs: 1 + }, + handler: (_ref, args) => { + let parser = _ref.parser, + funcName = _ref.funcName; + const base = args[0]; + return { + type: "accentUnder", + mode: parser.mode, + label: funcName, + base: base + }; + }, + htmlBuilder: (group, options) => { + // Treat under accents much like underlines. + const innerGroup = buildGroup(group.base, options); + const accentBody = stretchy.svgSpan(group, options); + const kern = group.label === "\\utilde" ? 0.12 : 0; // Generate the vlist, with the appropriate kerns + + const vlist = buildCommon.makeVList({ + positionType: "bottom", + positionData: accentBody.height + kern, + children: [{ + type: "elem", + elem: accentBody, + wrapperClasses: ["svg-align"] + }, { + type: "kern", + size: kern + }, { + type: "elem", + elem: innerGroup + }] + }, options); + return buildCommon.makeSpan(["mord", "accentunder"], [vlist], options); + }, + mathmlBuilder: (group, options) => { + const accentNode = stretchy.mathMLnode(group.label); + const node = new mathMLTree.MathNode("munder", [buildGroup$1(group.base, options), accentNode]); + node.setAttribute("accentunder", "true"); + return node; + } +}); + +// Helper function +const paddedNode = group => { + const node = new mathMLTree.MathNode("mpadded", group ? [group] : []); + node.setAttribute("width", "+0.6em"); + node.setAttribute("lspace", "0.3em"); + return node; +}; // Stretchy arrows with an optional argument + + +defineFunction({ + type: "xArrow", + names: ["\\xleftarrow", "\\xrightarrow", "\\xLeftarrow", "\\xRightarrow", "\\xleftrightarrow", "\\xLeftrightarrow", "\\xhookleftarrow", "\\xhookrightarrow", "\\xmapsto", "\\xrightharpoondown", "\\xrightharpoonup", "\\xleftharpoondown", "\\xleftharpoonup", "\\xrightleftharpoons", "\\xleftrightharpoons", "\\xlongequal", "\\xtwoheadrightarrow", "\\xtwoheadleftarrow", "\\xtofrom", // The next 3 functions are here to support the mhchem extension. + // Direct use of these functions is discouraged and may break someday. + "\\xrightleftarrows", "\\xrightequilibrium", "\\xleftequilibrium"], + props: { + numArgs: 1, + numOptionalArgs: 1 + }, + + handler(_ref, args, optArgs) { + let parser = _ref.parser, + funcName = _ref.funcName; + return { + type: "xArrow", + mode: parser.mode, + label: funcName, + body: args[0], + below: optArgs[0] + }; + }, + + // Flow is unable to correctly infer the type of `group`, even though it's + // unamibiguously determined from the passed-in `type` above. + htmlBuilder(group, options) { + const style = options.style; // Build the argument groups in the appropriate style. + // Ref: amsmath.dtx: \hbox{$\scriptstyle\mkern#3mu{#6}\mkern#4mu$}% + // Some groups can return document fragments. Handle those by wrapping + // them in a span. + + let newOptions = options.havingStyle(style.sup()); + const upperGroup = buildCommon.wrapFragment(buildGroup(group.body, newOptions, options), options); + upperGroup.classes.push("x-arrow-pad"); + let lowerGroup; + + if (group.below) { + // Build the lower group + newOptions = options.havingStyle(style.sub()); + lowerGroup = buildCommon.wrapFragment(buildGroup(group.below, newOptions, options), options); + lowerGroup.classes.push("x-arrow-pad"); + } + + const arrowBody = stretchy.svgSpan(group, options); // Re shift: Note that stretchy.svgSpan returned arrowBody.depth = 0. + // The point we want on the math axis is at 0.5 * arrowBody.height. + + const arrowShift = -options.fontMetrics().axisHeight + 0.5 * arrowBody.height; // 2 mu kern. Ref: amsmath.dtx: #7\if0#2\else\mkern#2mu\fi + + let upperShift = -options.fontMetrics().axisHeight - 0.5 * arrowBody.height - 0.111; // 0.111 em = 2 mu + + if (upperGroup.depth > 0.25 || group.label === "\\xleftequilibrium") { + upperShift -= upperGroup.depth; // shift up if depth encroaches + } // Generate the vlist + + + let vlist; + + if (lowerGroup) { + const lowerShift = -options.fontMetrics().axisHeight + lowerGroup.height + 0.5 * arrowBody.height + 0.111; + vlist = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: upperGroup, + shift: upperShift + }, { + type: "elem", + elem: arrowBody, + shift: arrowShift + }, { + type: "elem", + elem: lowerGroup, + shift: lowerShift + }] + }, options); + } else { + vlist = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: upperGroup, + shift: upperShift + }, { + type: "elem", + elem: arrowBody, + shift: arrowShift + }] + }, options); + } // $FlowFixMe: Replace this with passing "svg-align" into makeVList. + + + vlist.children[0].children[0].children[1].classes.push("svg-align"); + return buildCommon.makeSpan(["mrel", "x-arrow"], [vlist], options); + }, + + mathmlBuilder(group, options) { + const arrowNode = stretchy.mathMLnode(group.label); + let node; + + if (group.body) { + const upperNode = paddedNode(buildGroup$1(group.body, options)); + + if (group.below) { + const lowerNode = paddedNode(buildGroup$1(group.below, options)); + node = new mathMLTree.MathNode("munderover", [arrowNode, lowerNode, upperNode]); + } else { + node = new mathMLTree.MathNode("mover", [arrowNode, upperNode]); + } + } else if (group.below) { + const lowerNode = paddedNode(buildGroup$1(group.below, options)); + node = new mathMLTree.MathNode("munder", [arrowNode, lowerNode]); + } else { + // This should never happen. + // Parser.js throws an error if there is no argument. + node = paddedNode(); + node = new mathMLTree.MathNode("mover", [arrowNode, node]); + } + + return node; + } + +}); + +// {123} and converts into symbol with code 123. It is used by the *macro* +// \char defined in macros.js. + +defineFunction({ + type: "textord", + names: ["\\@char"], + props: { + numArgs: 1, + allowedInText: true + }, + + handler(_ref, args) { + let parser = _ref.parser; + const arg = assertNodeType(args[0], "ordgroup"); + const group = arg.body; + let number = ""; + + for (let i = 0; i < group.length; i++) { + const node = assertNodeType(group[i], "textord"); + number += node.text; + } + + const code = parseInt(number); + + if (isNaN(code)) { + throw new ParseError(`\\@char has non-numeric argument ${number}`); + } + + return { + type: "textord", + mode: parser.mode, + text: String.fromCharCode(code) + }; + } + +}); + +const htmlBuilder$1 = (group, options) => { + const elements = buildExpression(group.body, options.withColor(group.color), false); // \color isn't supposed to affect the type of the elements it contains. + // To accomplish this, we wrap the results in a fragment, so the inner + // elements will be able to directly interact with their neighbors. For + // example, `\color{red}{2 +} 3` has the same spacing as `2 + 3` + + return buildCommon.makeFragment(elements); +}; + +const mathmlBuilder$1 = (group, options) => { + const inner = buildExpression$1(group.body, options.withColor(group.color)); + const node = new mathMLTree.MathNode("mstyle", inner); + node.setAttribute("mathcolor", group.color); + return node; +}; + +defineFunction({ + type: "color", + names: ["\\textcolor"], + props: { + numArgs: 2, + allowedInText: true, + greediness: 3, + argTypes: ["color", "original"] + }, + + handler(_ref, args) { + let parser = _ref.parser; + const color = assertNodeType(args[0], "color-token").color; + const body = args[1]; + return { + type: "color", + mode: parser.mode, + color, + body: ordargument(body) + }; + }, + + htmlBuilder: htmlBuilder$1, + mathmlBuilder: mathmlBuilder$1 +}); +defineFunction({ + type: "color", + names: ["\\color"], + props: { + numArgs: 1, + allowedInText: true, + greediness: 3, + argTypes: ["color"] + }, + + handler(_ref2, args) { + let parser = _ref2.parser, + breakOnTokenText = _ref2.breakOnTokenText; + const color = assertNodeType(args[0], "color-token").color; // Set macro \current@color in current namespace to store the current + // color, mimicking the behavior of color.sty. + // This is currently used just to correctly color a \right + // that follows a \color command. + + parser.gullet.macros.set("\\current@color", color); // Parse out the implicit body that should be colored. + + const body = parser.parseExpression(true, breakOnTokenText); + return { + type: "color", + mode: parser.mode, + color, + body + }; + }, + + htmlBuilder: htmlBuilder$1, + mathmlBuilder: mathmlBuilder$1 +}); + +// Row breaks within tabular environments, and line breaks at top level +// same signature, we implement them as one megafunction, with newRow +// indicating whether we're in the \cr case, and newLine indicating whether +// to break the line in the \newline case. + +defineFunction({ + type: "cr", + names: ["\\cr", "\\newline"], + props: { + numArgs: 0, + numOptionalArgs: 1, + argTypes: ["size"], + allowedInText: true + }, + + handler(_ref, args, optArgs) { + let parser = _ref.parser, + funcName = _ref.funcName; + const size = optArgs[0]; + const newRow = funcName === "\\cr"; + let newLine = false; + + if (!newRow) { + if (parser.settings.displayMode && parser.settings.useStrictBehavior("newLineInDisplayMode", "In LaTeX, \\\\ or \\newline " + "does nothing in display mode")) { + newLine = false; + } else { + newLine = true; + } + } + + return { + type: "cr", + mode: parser.mode, + newLine, + newRow, + size: size && assertNodeType(size, "size").value + }; + }, + + // The following builders are called only at the top level, + // not within tabular/array environments. + htmlBuilder(group, options) { + if (group.newRow) { + throw new ParseError("\\cr valid only within a tabular/array environment"); + } + + const span = buildCommon.makeSpan(["mspace"], [], options); + + if (group.newLine) { + span.classes.push("newline"); + + if (group.size) { + span.style.marginTop = calculateSize(group.size, options) + "em"; + } + } + + return span; + }, + + mathmlBuilder(group, options) { + const node = new mathMLTree.MathNode("mspace"); + + if (group.newLine) { + node.setAttribute("linebreak", "newline"); + + if (group.size) { + node.setAttribute("height", calculateSize(group.size, options) + "em"); + } + } + + return node; + } + +}); + +/** + * This file deals with creating delimiters of various sizes. The TeXbook + * discusses these routines on page 441-442, in the "Another subroutine sets box + * x to a specified variable delimiter" paragraph. + * + * There are three main routines here. `makeSmallDelim` makes a delimiter in the + * normal font, but in either text, script, or scriptscript style. + * `makeLargeDelim` makes a delimiter in textstyle, but in one of the Size1, + * Size2, Size3, or Size4 fonts. `makeStackedDelim` makes a delimiter out of + * smaller pieces that are stacked on top of one another. + * + * The functions take a parameter `center`, which determines if the delimiter + * should be centered around the axis. + * + * Then, there are three exposed functions. `sizedDelim` makes a delimiter in + * one of the given sizes. This is used for things like `\bigl`. + * `customSizedDelim` makes a delimiter with a given total height+depth. It is + * called in places like `\sqrt`. `leftRightDelim` makes an appropriate + * delimiter which surrounds an expression of a given height an depth. It is + * used in `\left` and `\right`. + */ + +/** + * Get the metrics for a given symbol and font, after transformation (i.e. + * after following replacement from symbols.js) + */ +const getMetrics = function getMetrics(symbol, font, mode) { + const replace = symbols.math[symbol] && symbols.math[symbol].replace; + const metrics = getCharacterMetrics(replace || symbol, font, mode); + + if (!metrics) { + throw new Error(`Unsupported symbol ${symbol} and font size ${font}.`); + } + + return metrics; +}; +/** + * Puts a delimiter span in a given style, and adds appropriate height, depth, + * and maxFontSizes. + */ + + +const styleWrap = function styleWrap(delim, toStyle, options, classes) { + const newOptions = options.havingBaseStyle(toStyle); + const span = buildCommon.makeSpan(classes.concat(newOptions.sizingClasses(options)), [delim], options); + const delimSizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier; + span.height *= delimSizeMultiplier; + span.depth *= delimSizeMultiplier; + span.maxFontSize = newOptions.sizeMultiplier; + return span; +}; + +const centerSpan = function centerSpan(span, options, style) { + const newOptions = options.havingBaseStyle(style); + const shift = (1 - options.sizeMultiplier / newOptions.sizeMultiplier) * options.fontMetrics().axisHeight; + span.classes.push("delimcenter"); + span.style.top = shift + "em"; + span.height -= shift; + span.depth += shift; +}; +/** + * Makes a small delimiter. This is a delimiter that comes in the Main-Regular + * font, but is restyled to either be in textstyle, scriptstyle, or + * scriptscriptstyle. + */ + + +const makeSmallDelim = function makeSmallDelim(delim, style, center, options, mode, classes) { + const text = buildCommon.makeSymbol(delim, "Main-Regular", mode, options); + const span = styleWrap(text, style, options, classes); + + if (center) { + centerSpan(span, options, style); + } + + return span; +}; +/** + * Builds a symbol in the given font size (note size is an integer) + */ + + +const mathrmSize = function mathrmSize(value, size, mode, options) { + return buildCommon.makeSymbol(value, "Size" + size + "-Regular", mode, options); +}; +/** + * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2, + * Size3, or Size4 fonts. It is always rendered in textstyle. + */ + + +const makeLargeDelim = function makeLargeDelim(delim, size, center, options, mode, classes) { + const inner = mathrmSize(delim, size, mode, options); + const span = styleWrap(buildCommon.makeSpan(["delimsizing", "size" + size], [inner], options), Style$1.TEXT, options, classes); + + if (center) { + centerSpan(span, options, Style$1.TEXT); + } + + return span; +}; +/** + * Make an inner span with the given offset and in the given font. This is used + * in `makeStackedDelim` to make the stacking pieces for the delimiter. + */ + + +const makeInner = function makeInner(symbol, font, mode) { + let sizeClass; // Apply the correct CSS class to choose the right font. + + if (font === "Size1-Regular") { + sizeClass = "delim-size1"; + } else + /* if (font === "Size4-Regular") */ + { + sizeClass = "delim-size4"; + } + + const inner = buildCommon.makeSpan(["delimsizinginner", sizeClass], [buildCommon.makeSpan([], [buildCommon.makeSymbol(symbol, font, mode)])]); // Since this will be passed into `makeVList` in the end, wrap the element + // in the appropriate tag that VList uses. + + return { + type: "elem", + elem: inner + }; +}; // Helper for makeStackedDelim + + +const lap = { + type: "kern", + size: -0.005 +}; +/** + * Make a stacked delimiter out of a given delimiter, with the total height at + * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook. + */ + +const makeStackedDelim = function makeStackedDelim(delim, heightTotal, center, options, mode, classes) { + // There are four parts, the top, an optional middle, a repeated part, and a + // bottom. + let top; + let middle; + let repeat; + let bottom; + top = repeat = bottom = delim; + middle = null; // Also keep track of what font the delimiters are in + + let font = "Size1-Regular"; // We set the parts and font based on the symbol. Note that we use + // '\u23d0' instead of '|' and '\u2016' instead of '\\|' for the + // repeats of the arrows + + if (delim === "\\uparrow") { + repeat = bottom = "\u23d0"; + } else if (delim === "\\Uparrow") { + repeat = bottom = "\u2016"; + } else if (delim === "\\downarrow") { + top = repeat = "\u23d0"; + } else if (delim === "\\Downarrow") { + top = repeat = "\u2016"; + } else if (delim === "\\updownarrow") { + top = "\\uparrow"; + repeat = "\u23d0"; + bottom = "\\downarrow"; + } else if (delim === "\\Updownarrow") { + top = "\\Uparrow"; + repeat = "\u2016"; + bottom = "\\Downarrow"; + } else if (delim === "[" || delim === "\\lbrack") { + top = "\u23a1"; + repeat = "\u23a2"; + bottom = "\u23a3"; + font = "Size4-Regular"; + } else if (delim === "]" || delim === "\\rbrack") { + top = "\u23a4"; + repeat = "\u23a5"; + bottom = "\u23a6"; + font = "Size4-Regular"; + } else if (delim === "\\lfloor" || delim === "\u230a") { + repeat = top = "\u23a2"; + bottom = "\u23a3"; + font = "Size4-Regular"; + } else if (delim === "\\lceil" || delim === "\u2308") { + top = "\u23a1"; + repeat = bottom = "\u23a2"; + font = "Size4-Regular"; + } else if (delim === "\\rfloor" || delim === "\u230b") { + repeat = top = "\u23a5"; + bottom = "\u23a6"; + font = "Size4-Regular"; + } else if (delim === "\\rceil" || delim === "\u2309") { + top = "\u23a4"; + repeat = bottom = "\u23a5"; + font = "Size4-Regular"; + } else if (delim === "(" || delim === "\\lparen") { + top = "\u239b"; + repeat = "\u239c"; + bottom = "\u239d"; + font = "Size4-Regular"; + } else if (delim === ")" || delim === "\\rparen") { + top = "\u239e"; + repeat = "\u239f"; + bottom = "\u23a0"; + font = "Size4-Regular"; + } else if (delim === "\\{" || delim === "\\lbrace") { + top = "\u23a7"; + middle = "\u23a8"; + bottom = "\u23a9"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\}" || delim === "\\rbrace") { + top = "\u23ab"; + middle = "\u23ac"; + bottom = "\u23ad"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\lgroup" || delim === "\u27ee") { + top = "\u23a7"; + bottom = "\u23a9"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\rgroup" || delim === "\u27ef") { + top = "\u23ab"; + bottom = "\u23ad"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\lmoustache" || delim === "\u23b0") { + top = "\u23a7"; + bottom = "\u23ad"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } else if (delim === "\\rmoustache" || delim === "\u23b1") { + top = "\u23ab"; + bottom = "\u23a9"; + repeat = "\u23aa"; + font = "Size4-Regular"; + } // Get the metrics of the four sections + + + const topMetrics = getMetrics(top, font, mode); + const topHeightTotal = topMetrics.height + topMetrics.depth; + const repeatMetrics = getMetrics(repeat, font, mode); + const repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth; + const bottomMetrics = getMetrics(bottom, font, mode); + const bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth; + let middleHeightTotal = 0; + let middleFactor = 1; + + if (middle !== null) { + const middleMetrics = getMetrics(middle, font, mode); + middleHeightTotal = middleMetrics.height + middleMetrics.depth; + middleFactor = 2; // repeat symmetrically above and below middle + } // Calcuate the minimal height that the delimiter can have. + // It is at least the size of the top, bottom, and optional middle combined. + + + const minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal; // Compute the number of copies of the repeat symbol we will need + + const repeatCount = Math.max(0, Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal))); // Compute the total height of the delimiter including all the symbols + + const realHeightTotal = minHeight + repeatCount * middleFactor * repeatHeightTotal; // The center of the delimiter is placed at the center of the axis. Note + // that in this context, "center" means that the delimiter should be + // centered around the axis in the current style, while normally it is + // centered around the axis in textstyle. + + let axisHeight = options.fontMetrics().axisHeight; + + if (center) { + axisHeight *= options.sizeMultiplier; + } // Calculate the depth + + + const depth = realHeightTotal / 2 - axisHeight; // This function differs from the TeX procedure in one way. + // We shift each repeat element downwards by 0.005em, to prevent a gap + // due to browser floating point rounding error. + // Then, at the last element-to element joint, we add one extra repeat + // element to cover the gap created by the shifts. + // Find the shift needed to align the upper end of the extra element at a point + // 0.005em above the lower end of the top element. + + const shiftOfExtraElement = (repeatCount + 1) * 0.005 - repeatHeightTotal; // Now, we start building the pieces that will go into the vlist + // Keep a list of the inner pieces + + const inners = []; // Add the bottom symbol + + inners.push(makeInner(bottom, font, mode)); + + if (middle === null) { + // Add that many symbols + for (let i = 0; i < repeatCount; i++) { + inners.push(lap); // overlap + + inners.push(makeInner(repeat, font, mode)); + } + } else { + // When there is a middle bit, we need the middle part and two repeated + // sections + for (let i = 0; i < repeatCount; i++) { + inners.push(lap); + inners.push(makeInner(repeat, font, mode)); + } // Insert one extra repeat element. + + + inners.push({ + type: "kern", + size: shiftOfExtraElement + }); + inners.push(makeInner(repeat, font, mode)); + inners.push(lap); // Now insert the middle of the brace. + + inners.push(makeInner(middle, font, mode)); + + for (let i = 0; i < repeatCount; i++) { + inners.push(lap); + inners.push(makeInner(repeat, font, mode)); + } + } // To cover the gap create by the overlaps, insert one more repeat element, + // at a position that juts 0.005 above the bottom of the top element. + + + inners.push({ + type: "kern", + size: shiftOfExtraElement + }); + inners.push(makeInner(repeat, font, mode)); + inners.push(lap); // Add the top symbol + + inners.push(makeInner(top, font, mode)); // Finally, build the vlist + + const newOptions = options.havingBaseStyle(Style$1.TEXT); + const inner = buildCommon.makeVList({ + positionType: "bottom", + positionData: depth, + children: inners + }, newOptions); + return styleWrap(buildCommon.makeSpan(["delimsizing", "mult"], [inner], newOptions), Style$1.TEXT, options, classes); +}; // All surds have 0.08em padding above the viniculum inside the SVG. +// That keeps browser span height rounding error from pinching the line. + + +const vbPad = 80; // padding above the surd, measured inside the viewBox. + +const emPad = 0.08; // padding, in ems, measured in the document. + +const sqrtSvg = function sqrtSvg(sqrtName, height, viewBoxHeight, extraViniculum, options) { + const path = sqrtPath(sqrtName, extraViniculum, viewBoxHeight); + const pathNode = new PathNode(sqrtName, path); + const svg = new SvgNode([pathNode], { + // Note: 1000:1 ratio of viewBox to document em width. + "width": "400em", + "height": height + "em", + "viewBox": "0 0 400000 " + viewBoxHeight, + "preserveAspectRatio": "xMinYMin slice" + }); + return buildCommon.makeSvgSpan(["hide-tail"], [svg], options); +}; +/** + * Make a sqrt image of the given height, + */ + + +const makeSqrtImage = function makeSqrtImage(height, options) { + // Define a newOptions that removes the effect of size changes such as \Huge. + // We don't pick different a height surd for \Huge. For it, we scale up. + const newOptions = options.havingBaseSizing(); // Pick the desired surd glyph from a sequence of surds. + + const delim = traverseSequence("\\surd", height * newOptions.sizeMultiplier, stackLargeDelimiterSequence, newOptions); + let sizeMultiplier = newOptions.sizeMultiplier; // default + // The standard sqrt SVGs each have a 0.04em thick viniculum. + // If Settings.minRuleThickness is larger than that, we add extraViniculum. + + const extraViniculum = Math.max(0, options.minRuleThickness - options.fontMetrics().sqrtRuleThickness); // Create a span containing an SVG image of a sqrt symbol. + + let span; + let spanHeight = 0; + let texHeight = 0; + let viewBoxHeight = 0; + let advanceWidth; // We create viewBoxes with 80 units of "padding" above each surd. + // Then browser rounding error on the parent span height will not + // encroach on the ink of the viniculum. But that padding is not + // included in the TeX-like `height` used for calculation of + // vertical alignment. So texHeight = span.height < span.style.height. + + if (delim.type === "small") { + // Get an SVG that is derived from glyph U+221A in font KaTeX-Main. + // 1000 unit normal glyph height. + viewBoxHeight = 1000 + 1000 * extraViniculum + vbPad; + + if (height < 1.0) { + sizeMultiplier = 1.0; // mimic a \textfont radical + } else if (height < 1.4) { + sizeMultiplier = 0.7; // mimic a \scriptfont radical + } + + spanHeight = (1.0 + extraViniculum + emPad) / sizeMultiplier; + texHeight = (1.00 + extraViniculum) / sizeMultiplier; + span = sqrtSvg("sqrtMain", spanHeight, viewBoxHeight, extraViniculum, options); + span.style.minWidth = "0.853em"; + advanceWidth = 0.833 / sizeMultiplier; // from the font. + } else if (delim.type === "large") { + // These SVGs come from fonts: KaTeX_Size1, _Size2, etc. + viewBoxHeight = (1000 + vbPad) * sizeToMaxHeight[delim.size]; + texHeight = (sizeToMaxHeight[delim.size] + extraViniculum) / sizeMultiplier; + spanHeight = (sizeToMaxHeight[delim.size] + extraViniculum + emPad) / sizeMultiplier; + span = sqrtSvg("sqrtSize" + delim.size, spanHeight, viewBoxHeight, extraViniculum, options); + span.style.minWidth = "1.02em"; + advanceWidth = 1.0 / sizeMultiplier; // 1.0 from the font. + } else { + // Tall sqrt. In TeX, this would be stacked using multiple glyphs. + // We'll use a single SVG to accomplish the same thing. + spanHeight = height + extraViniculum + emPad; + texHeight = height + extraViniculum; + viewBoxHeight = Math.floor(1000 * height + extraViniculum) + vbPad; + span = sqrtSvg("sqrtTall", spanHeight, viewBoxHeight, extraViniculum, options); + span.style.minWidth = "0.742em"; + advanceWidth = 1.056; + } + + span.height = texHeight; + span.style.height = spanHeight + "em"; + return { + span, + advanceWidth, + // Calculate the actual line width. + // This actually should depend on the chosen font -- e.g. \boldmath + // should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and + // have thicker rules. + ruleWidth: (options.fontMetrics().sqrtRuleThickness + extraViniculum) * sizeMultiplier + }; +}; // There are three kinds of delimiters, delimiters that stack when they become +// too large + + +const stackLargeDelimiters = ["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\u230a", "\u230b", "\\lceil", "\\rceil", "\u2308", "\u2309", "\\surd"]; // delimiters that always stack + +const stackAlwaysDelimiters = ["\\uparrow", "\\downarrow", "\\updownarrow", "\\Uparrow", "\\Downarrow", "\\Updownarrow", "|", "\\|", "\\vert", "\\Vert", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\u27ee", "\u27ef", "\\lmoustache", "\\rmoustache", "\u23b0", "\u23b1"]; // and delimiters that never stack + +const stackNeverDelimiters = ["<", ">", "\\langle", "\\rangle", "/", "\\backslash", "\\lt", "\\gt"]; // Metrics of the different sizes. Found by looking at TeX's output of +// $\bigl| // \Bigl| \biggl| \Biggl| \showlists$ +// Used to create stacked delimiters of appropriate sizes in makeSizedDelim. + +const sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0]; +/** + * Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4. + */ + +const makeSizedDelim = function makeSizedDelim(delim, size, options, mode, classes) { + // < and > turn into \langle and \rangle in delimiters + if (delim === "<" || delim === "\\lt" || delim === "\u27e8") { + delim = "\\langle"; + } else if (delim === ">" || delim === "\\gt" || delim === "\u27e9") { + delim = "\\rangle"; + } // Sized delimiters are never centered. + + + if (utils.contains(stackLargeDelimiters, delim) || utils.contains(stackNeverDelimiters, delim)) { + return makeLargeDelim(delim, size, false, options, mode, classes); + } else if (utils.contains(stackAlwaysDelimiters, delim)) { + return makeStackedDelim(delim, sizeToMaxHeight[size], false, options, mode, classes); + } else { + throw new ParseError("Illegal delimiter: '" + delim + "'"); + } +}; +/** + * There are three different sequences of delimiter sizes that the delimiters + * follow depending on the kind of delimiter. This is used when creating custom + * sized delimiters to decide whether to create a small, large, or stacked + * delimiter. + * + * In real TeX, these sequences aren't explicitly defined, but are instead + * defined inside the font metrics. Since there are only three sequences that + * are possible for the delimiters that TeX defines, it is easier to just encode + * them explicitly here. + */ + + +// Delimiters that never stack try small delimiters and large delimiters only +const stackNeverDelimiterSequence = [{ + type: "small", + style: Style$1.SCRIPTSCRIPT +}, { + type: "small", + style: Style$1.SCRIPT +}, { + type: "small", + style: Style$1.TEXT +}, { + type: "large", + size: 1 +}, { + type: "large", + size: 2 +}, { + type: "large", + size: 3 +}, { + type: "large", + size: 4 +}]; // Delimiters that always stack try the small delimiters first, then stack + +const stackAlwaysDelimiterSequence = [{ + type: "small", + style: Style$1.SCRIPTSCRIPT +}, { + type: "small", + style: Style$1.SCRIPT +}, { + type: "small", + style: Style$1.TEXT +}, { + type: "stack" +}]; // Delimiters that stack when large try the small and then large delimiters, and +// stack afterwards + +const stackLargeDelimiterSequence = [{ + type: "small", + style: Style$1.SCRIPTSCRIPT +}, { + type: "small", + style: Style$1.SCRIPT +}, { + type: "small", + style: Style$1.TEXT +}, { + type: "large", + size: 1 +}, { + type: "large", + size: 2 +}, { + type: "large", + size: 3 +}, { + type: "large", + size: 4 +}, { + type: "stack" +}]; +/** + * Get the font used in a delimiter based on what kind of delimiter it is. + * TODO(#963) Use more specific font family return type once that is introduced. + */ + +const delimTypeToFont = function delimTypeToFont(type) { + if (type.type === "small") { + return "Main-Regular"; + } else if (type.type === "large") { + return "Size" + type.size + "-Regular"; + } else if (type.type === "stack") { + return "Size4-Regular"; + } else { + throw new Error(`Add support for delim type '${type.type}' here.`); + } +}; +/** + * Traverse a sequence of types of delimiters to decide what kind of delimiter + * should be used to create a delimiter of the given height+depth. + */ + + +const traverseSequence = function traverseSequence(delim, height, sequence, options) { + // Here, we choose the index we should start at in the sequences. In smaller + // sizes (which correspond to larger numbers in style.size) we start earlier + // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts + // at index 3-2=1, text starts at 3-1=2, and display starts at min(2,3-0)=2 + const start = Math.min(2, 3 - options.style.size); + + for (let i = start; i < sequence.length; i++) { + if (sequence[i].type === "stack") { + // This is always the last delimiter, so we just break the loop now. + break; + } + + const metrics = getMetrics(delim, delimTypeToFont(sequence[i]), "math"); + let heightDepth = metrics.height + metrics.depth; // Small delimiters are scaled down versions of the same font, so we + // account for the style change size. + + if (sequence[i].type === "small") { + const newOptions = options.havingBaseStyle(sequence[i].style); + heightDepth *= newOptions.sizeMultiplier; + } // Check if the delimiter at this size works for the given height. + + + if (heightDepth > height) { + return sequence[i]; + } + } // If we reached the end of the sequence, return the last sequence element. + + + return sequence[sequence.length - 1]; +}; +/** + * Make a delimiter of a given height+depth, with optional centering. Here, we + * traverse the sequences, and create a delimiter that the sequence tells us to. + */ + + +const makeCustomSizedDelim = function makeCustomSizedDelim(delim, height, center, options, mode, classes) { + if (delim === "<" || delim === "\\lt" || delim === "\u27e8") { + delim = "\\langle"; + } else if (delim === ">" || delim === "\\gt" || delim === "\u27e9") { + delim = "\\rangle"; + } // Decide what sequence to use + + + let sequence; + + if (utils.contains(stackNeverDelimiters, delim)) { + sequence = stackNeverDelimiterSequence; + } else if (utils.contains(stackLargeDelimiters, delim)) { + sequence = stackLargeDelimiterSequence; + } else { + sequence = stackAlwaysDelimiterSequence; + } // Look through the sequence + + + const delimType = traverseSequence(delim, height, sequence, options); // Get the delimiter from font glyphs. + // Depending on the sequence element we decided on, call the + // appropriate function. + + if (delimType.type === "small") { + return makeSmallDelim(delim, delimType.style, center, options, mode, classes); + } else if (delimType.type === "large") { + return makeLargeDelim(delim, delimType.size, center, options, mode, classes); + } else + /* if (delimType.type === "stack") */ + { + return makeStackedDelim(delim, height, center, options, mode, classes); + } +}; +/** + * Make a delimiter for use with `\left` and `\right`, given a height and depth + * of an expression that the delimiters surround. + */ + + +const makeLeftRightDelim = function makeLeftRightDelim(delim, height, depth, options, mode, classes) { + // We always center \left/\right delimiters, so the axis is always shifted + const axisHeight = options.fontMetrics().axisHeight * options.sizeMultiplier; // Taken from TeX source, tex.web, function make_left_right + + const delimiterFactor = 901; + const delimiterExtend = 5.0 / options.fontMetrics().ptPerEm; + const maxDistFromAxis = Math.max(height - axisHeight, depth + axisHeight); + const totalHeight = Math.max( // In real TeX, calculations are done using integral values which are + // 65536 per pt, or 655360 per em. So, the division here truncates in + // TeX but doesn't here, producing different results. If we wanted to + // exactly match TeX's calculation, we could do + // Math.floor(655360 * maxDistFromAxis / 500) * + // delimiterFactor / 655360 + // (To see the difference, compare + // x^{x^{\left(\rule{0.1em}{0.68em}\right)}} + // in TeX and KaTeX) + maxDistFromAxis / 500 * delimiterFactor, 2 * maxDistFromAxis - delimiterExtend); // Finally, we defer to `makeCustomSizedDelim` with our calculated total + // height + + return makeCustomSizedDelim(delim, totalHeight, true, options, mode, classes); +}; + +var delimiter = { + sqrtImage: makeSqrtImage, + sizedDelim: makeSizedDelim, + customSizedDelim: makeCustomSizedDelim, + leftRightDelim: makeLeftRightDelim +}; + +// Extra data needed for the delimiter handler down below +const delimiterSizes = { + "\\bigl": { + mclass: "mopen", + size: 1 + }, + "\\Bigl": { + mclass: "mopen", + size: 2 + }, + "\\biggl": { + mclass: "mopen", + size: 3 + }, + "\\Biggl": { + mclass: "mopen", + size: 4 + }, + "\\bigr": { + mclass: "mclose", + size: 1 + }, + "\\Bigr": { + mclass: "mclose", + size: 2 + }, + "\\biggr": { + mclass: "mclose", + size: 3 + }, + "\\Biggr": { + mclass: "mclose", + size: 4 + }, + "\\bigm": { + mclass: "mrel", + size: 1 + }, + "\\Bigm": { + mclass: "mrel", + size: 2 + }, + "\\biggm": { + mclass: "mrel", + size: 3 + }, + "\\Biggm": { + mclass: "mrel", + size: 4 + }, + "\\big": { + mclass: "mord", + size: 1 + }, + "\\Big": { + mclass: "mord", + size: 2 + }, + "\\bigg": { + mclass: "mord", + size: 3 + }, + "\\Bigg": { + mclass: "mord", + size: 4 + } +}; +const delimiters = ["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\u230a", "\u230b", "\\lceil", "\\rceil", "\u2308", "\u2309", "<", ">", "\\langle", "\u27e8", "\\rangle", "\u27e9", "\\lt", "\\gt", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\u27ee", "\u27ef", "\\lmoustache", "\\rmoustache", "\u23b0", "\u23b1", "/", "\\backslash", "|", "\\vert", "\\|", "\\Vert", "\\uparrow", "\\Uparrow", "\\downarrow", "\\Downarrow", "\\updownarrow", "\\Updownarrow", "."]; + +// Delimiter functions +function checkDelimiter(delim, context) { + const symDelim = checkSymbolNodeType(delim); + + if (symDelim && utils.contains(delimiters, symDelim.text)) { + return symDelim; + } else { + throw new ParseError("Invalid delimiter: '" + (symDelim ? symDelim.text : JSON.stringify(delim)) + "' after '" + context.funcName + "'", delim); + } +} + +defineFunction({ + type: "delimsizing", + names: ["\\bigl", "\\Bigl", "\\biggl", "\\Biggl", "\\bigr", "\\Bigr", "\\biggr", "\\Biggr", "\\bigm", "\\Bigm", "\\biggm", "\\Biggm", "\\big", "\\Big", "\\bigg", "\\Bigg"], + props: { + numArgs: 1 + }, + handler: (context, args) => { + const delim = checkDelimiter(args[0], context); + return { + type: "delimsizing", + mode: context.parser.mode, + size: delimiterSizes[context.funcName].size, + mclass: delimiterSizes[context.funcName].mclass, + delim: delim.text + }; + }, + htmlBuilder: (group, options) => { + if (group.delim === ".") { + // Empty delimiters still count as elements, even though they don't + // show anything. + return buildCommon.makeSpan([group.mclass]); + } // Use delimiter.sizedDelim to generate the delimiter. + + + return delimiter.sizedDelim(group.delim, group.size, options, group.mode, [group.mclass]); + }, + mathmlBuilder: group => { + const children = []; + + if (group.delim !== ".") { + children.push(makeText(group.delim, group.mode)); + } + + const node = new mathMLTree.MathNode("mo", children); + + if (group.mclass === "mopen" || group.mclass === "mclose") { + // Only some of the delimsizing functions act as fences, and they + // return "mopen" or "mclose" mclass. + node.setAttribute("fence", "true"); + } else { + // Explicitly disable fencing if it's not a fence, to override the + // defaults. + node.setAttribute("fence", "false"); + } + + return node; + } +}); + +function assertParsed(group) { + if (!group.body) { + throw new Error("Bug: The leftright ParseNode wasn't fully parsed."); + } +} + +defineFunction({ + type: "leftright-right", + names: ["\\right"], + props: { + numArgs: 1 + }, + handler: (context, args) => { + // \left case below triggers parsing of \right in + // `const right = parser.parseFunction();` + // uses this return value. + const color = context.parser.gullet.macros.get("\\current@color"); + + if (color && typeof color !== "string") { + throw new ParseError("\\current@color set to non-string in \\right"); + } + + return { + type: "leftright-right", + mode: context.parser.mode, + delim: checkDelimiter(args[0], context).text, + color // undefined if not set via \color + + }; + } +}); +defineFunction({ + type: "leftright", + names: ["\\left"], + props: { + numArgs: 1 + }, + handler: (context, args) => { + const delim = checkDelimiter(args[0], context); + const parser = context.parser; // Parse out the implicit body + + ++parser.leftrightDepth; // parseExpression stops before '\\right' + + const body = parser.parseExpression(false); + --parser.leftrightDepth; // Check the next token + + parser.expect("\\right", false); + const right = assertNodeType(parser.parseFunction(), "leftright-right"); + return { + type: "leftright", + mode: parser.mode, + body, + left: delim.text, + right: right.delim, + rightColor: right.color + }; + }, + htmlBuilder: (group, options) => { + assertParsed(group); // Build the inner expression + + const inner = buildExpression(group.body, options, true, ["mopen", "mclose"]); + let innerHeight = 0; + let innerDepth = 0; + let hadMiddle = false; // Calculate its height and depth + + for (let i = 0; i < inner.length; i++) { + // Property `isMiddle` not defined on `span`. See comment in + // "middle"'s htmlBuilder. + // $FlowFixMe + if (inner[i].isMiddle) { + hadMiddle = true; + } else { + innerHeight = Math.max(inner[i].height, innerHeight); + innerDepth = Math.max(inner[i].depth, innerDepth); + } + } // The size of delimiters is the same, regardless of what style we are + // in. Thus, to correctly calculate the size of delimiter we need around + // a group, we scale down the inner size based on the size. + + + innerHeight *= options.sizeMultiplier; + innerDepth *= options.sizeMultiplier; + let leftDelim; + + if (group.left === ".") { + // Empty delimiters in \left and \right make null delimiter spaces. + leftDelim = makeNullDelimiter(options, ["mopen"]); + } else { + // Otherwise, use leftRightDelim to generate the correct sized + // delimiter. + leftDelim = delimiter.leftRightDelim(group.left, innerHeight, innerDepth, options, group.mode, ["mopen"]); + } // Add it to the beginning of the expression + + + inner.unshift(leftDelim); // Handle middle delimiters + + if (hadMiddle) { + for (let i = 1; i < inner.length; i++) { + const middleDelim = inner[i]; // Property `isMiddle` not defined on `span`. See comment in + // "middle"'s htmlBuilder. + // $FlowFixMe + + const isMiddle = middleDelim.isMiddle; + + if (isMiddle) { + // Apply the options that were active when \middle was called + inner[i] = delimiter.leftRightDelim(isMiddle.delim, innerHeight, innerDepth, isMiddle.options, group.mode, []); + } + } + } + + let rightDelim; // Same for the right delimiter, but using color specified by \color + + if (group.right === ".") { + rightDelim = makeNullDelimiter(options, ["mclose"]); + } else { + const colorOptions = group.rightColor ? options.withColor(group.rightColor) : options; + rightDelim = delimiter.leftRightDelim(group.right, innerHeight, innerDepth, colorOptions, group.mode, ["mclose"]); + } // Add it to the end of the expression. + + + inner.push(rightDelim); + return buildCommon.makeSpan(["minner"], inner, options); + }, + mathmlBuilder: (group, options) => { + assertParsed(group); + const inner = buildExpression$1(group.body, options); + + if (group.left !== ".") { + const leftNode = new mathMLTree.MathNode("mo", [makeText(group.left, group.mode)]); + leftNode.setAttribute("fence", "true"); + inner.unshift(leftNode); + } + + if (group.right !== ".") { + const rightNode = new mathMLTree.MathNode("mo", [makeText(group.right, group.mode)]); + rightNode.setAttribute("fence", "true"); + + if (group.rightColor) { + rightNode.setAttribute("mathcolor", group.rightColor); + } + + inner.push(rightNode); + } + + return makeRow(inner); + } +}); +defineFunction({ + type: "middle", + names: ["\\middle"], + props: { + numArgs: 1 + }, + handler: (context, args) => { + const delim = checkDelimiter(args[0], context); + + if (!context.parser.leftrightDepth) { + throw new ParseError("\\middle without preceding \\left", delim); + } + + return { + type: "middle", + mode: context.parser.mode, + delim: delim.text + }; + }, + htmlBuilder: (group, options) => { + let middleDelim; + + if (group.delim === ".") { + middleDelim = makeNullDelimiter(options, []); + } else { + middleDelim = delimiter.sizedDelim(group.delim, 1, options, group.mode, []); + const isMiddle = { + delim: group.delim, + options + }; // Property `isMiddle` not defined on `span`. It is only used in + // this file above. + // TODO: Fix this violation of the `span` type and possibly rename + // things since `isMiddle` sounds like a boolean, but is a struct. + // $FlowFixMe + + middleDelim.isMiddle = isMiddle; + } + + return middleDelim; + }, + mathmlBuilder: (group, options) => { + // A Firefox \middle will strech a character vertically only if it + // is in the fence part of the operator dictionary at: + // https://www.w3.org/TR/MathML3/appendixc.html. + // So we need to avoid U+2223 and use plain "|" instead. + const textNode = group.delim === "\\vert" || group.delim === "|" ? makeText("|", "text") : makeText(group.delim, group.mode); + const middleNode = new mathMLTree.MathNode("mo", [textNode]); + middleNode.setAttribute("fence", "true"); // MathML gives 5/18em spacing to each element. + // \middle should get delimiter spacing instead. + + middleNode.setAttribute("lspace", "0.05em"); + middleNode.setAttribute("rspace", "0.05em"); + return middleNode; + } +}); + +const htmlBuilder$2 = (group, options) => { + // \cancel, \bcancel, \xcancel, \sout, \fbox, \colorbox, \fcolorbox + // Some groups can return document fragments. Handle those by wrapping + // them in a span. + const inner = buildCommon.wrapFragment(buildGroup(group.body, options), options); + const label = group.label.substr(1); + const scale = options.sizeMultiplier; + let img; + let imgShift = 0; // In the LaTeX cancel package, line geometry is slightly different + // depending on whether the subject is wider than it is tall, or vice versa. + // We don't know the width of a group, so as a proxy, we test if + // the subject is a single character. This captures most of the + // subjects that should get the "tall" treatment. + + const isSingleChar = utils.isCharacterBox(group.body); + + if (label === "sout") { + img = buildCommon.makeSpan(["stretchy", "sout"]); + img.height = options.fontMetrics().defaultRuleThickness / scale; + imgShift = -0.5 * options.fontMetrics().xHeight; + } else { + // Add horizontal padding + if (/cancel/.test(label)) { + if (!isSingleChar) { + inner.classes.push("cancel-pad"); + } + } else { + inner.classes.push("boxpad"); + } // Add vertical padding + + + let vertPad = 0; + let ruleThickness = 0; // ref: cancel package: \advance\totalheight2\p@ % "+2" + + if (/box/.test(label)) { + ruleThickness = Math.max(options.fontMetrics().fboxrule, // default + options.minRuleThickness // User override. + ); + vertPad = options.fontMetrics().fboxsep + (label === "colorbox" ? 0 : ruleThickness); + } else { + vertPad = isSingleChar ? 0.2 : 0; + } + + img = stretchy.encloseSpan(inner, label, vertPad, options); + + if (/fbox|boxed|fcolorbox/.test(label)) { + img.style.borderStyle = "solid"; + img.style.borderWidth = `${ruleThickness}em`; + } + + imgShift = inner.depth + vertPad; + + if (group.backgroundColor) { + img.style.backgroundColor = group.backgroundColor; + + if (group.borderColor) { + img.style.borderColor = group.borderColor; + } + } + } + + let vlist; + + if (group.backgroundColor) { + vlist = buildCommon.makeVList({ + positionType: "individualShift", + children: [// Put the color background behind inner; + { + type: "elem", + elem: img, + shift: imgShift + }, { + type: "elem", + elem: inner, + shift: 0 + }] + }, options); + } else { + vlist = buildCommon.makeVList({ + positionType: "individualShift", + children: [// Write the \cancel stroke on top of inner. + { + type: "elem", + elem: inner, + shift: 0 + }, { + type: "elem", + elem: img, + shift: imgShift, + wrapperClasses: /cancel/.test(label) ? ["svg-align"] : [] + }] + }, options); + } + + if (/cancel/.test(label)) { + // The cancel package documentation says that cancel lines add their height + // to the expression, but tests show that isn't how it actually works. + vlist.height = inner.height; + vlist.depth = inner.depth; + } + + if (/cancel/.test(label) && !isSingleChar) { + // cancel does not create horiz space for its line extension. + return buildCommon.makeSpan(["mord", "cancel-lap"], [vlist], options); + } else { + return buildCommon.makeSpan(["mord"], [vlist], options); + } +}; + +const mathmlBuilder$2 = (group, options) => { + let fboxsep = 0; + const node = new mathMLTree.MathNode(group.label.indexOf("colorbox") > -1 ? "mpadded" : "menclose", [buildGroup$1(group.body, options)]); + + switch (group.label) { + case "\\cancel": + node.setAttribute("notation", "updiagonalstrike"); + break; + + case "\\bcancel": + node.setAttribute("notation", "downdiagonalstrike"); + break; + + case "\\sout": + node.setAttribute("notation", "horizontalstrike"); + break; + + case "\\fbox": + node.setAttribute("notation", "box"); + break; + + case "\\fcolorbox": + case "\\colorbox": + // doesn't have a good notation option. So use + // instead. Set some attributes that come included with . + fboxsep = options.fontMetrics().fboxsep * options.fontMetrics().ptPerEm; + node.setAttribute("width", `+${2 * fboxsep}pt`); + node.setAttribute("height", `+${2 * fboxsep}pt`); + node.setAttribute("lspace", `${fboxsep}pt`); // + + node.setAttribute("voffset", `${fboxsep}pt`); + + if (group.label === "\\fcolorbox") { + const thk = Math.max(options.fontMetrics().fboxrule, // default + options.minRuleThickness // user override + ); + node.setAttribute("style", "border: " + thk + "em solid " + String(group.borderColor)); + } + + break; + + case "\\xcancel": + node.setAttribute("notation", "updiagonalstrike downdiagonalstrike"); + break; + } + + if (group.backgroundColor) { + node.setAttribute("mathbackground", group.backgroundColor); + } + + return node; +}; + +defineFunction({ + type: "enclose", + names: ["\\colorbox"], + props: { + numArgs: 2, + allowedInText: true, + greediness: 3, + argTypes: ["color", "text"] + }, + + handler(_ref, args, optArgs) { + let parser = _ref.parser, + funcName = _ref.funcName; + const color = assertNodeType(args[0], "color-token").color; + const body = args[1]; + return { + type: "enclose", + mode: parser.mode, + label: funcName, + backgroundColor: color, + body + }; + }, + + htmlBuilder: htmlBuilder$2, + mathmlBuilder: mathmlBuilder$2 +}); +defineFunction({ + type: "enclose", + names: ["\\fcolorbox"], + props: { + numArgs: 3, + allowedInText: true, + greediness: 3, + argTypes: ["color", "color", "text"] + }, + + handler(_ref2, args, optArgs) { + let parser = _ref2.parser, + funcName = _ref2.funcName; + const borderColor = assertNodeType(args[0], "color-token").color; + const backgroundColor = assertNodeType(args[1], "color-token").color; + const body = args[2]; + return { + type: "enclose", + mode: parser.mode, + label: funcName, + backgroundColor, + borderColor, + body + }; + }, + + htmlBuilder: htmlBuilder$2, + mathmlBuilder: mathmlBuilder$2 +}); +defineFunction({ + type: "enclose", + names: ["\\fbox"], + props: { + numArgs: 1, + argTypes: ["hbox"], + allowedInText: true + }, + + handler(_ref3, args) { + let parser = _ref3.parser; + return { + type: "enclose", + mode: parser.mode, + label: "\\fbox", + body: args[0] + }; + } + +}); +defineFunction({ + type: "enclose", + names: ["\\cancel", "\\bcancel", "\\xcancel", "\\sout"], + props: { + numArgs: 1 + }, + + handler(_ref4, args, optArgs) { + let parser = _ref4.parser, + funcName = _ref4.funcName; + const body = args[0]; + return { + type: "enclose", + mode: parser.mode, + label: funcName, + body + }; + }, + + htmlBuilder: htmlBuilder$2, + mathmlBuilder: mathmlBuilder$2 +}); + +/** + * All registered environments. + * `environments.js` exports this same dictionary again and makes it public. + * `Parser.js` requires this dictionary via `environments.js`. + */ +const _environments = {}; +function defineEnvironment(_ref) { + let type = _ref.type, + names = _ref.names, + props = _ref.props, + handler = _ref.handler, + htmlBuilder = _ref.htmlBuilder, + mathmlBuilder = _ref.mathmlBuilder; + // Set default values of environments. + const data = { + type, + numArgs: props.numArgs || 0, + greediness: 1, + allowedInText: false, + numOptionalArgs: 0, + handler + }; + + for (let i = 0; i < names.length; ++i) { + // TODO: The value type of _environments should be a type union of all + // possible `EnvSpec<>` possibilities instead of `EnvSpec<*>`, which is + // an existential type. + // $FlowFixMe + _environments[names[i]] = data; + } + + if (htmlBuilder) { + _htmlGroupBuilders[type] = htmlBuilder; + } + + if (mathmlBuilder) { + _mathmlGroupBuilders[type] = mathmlBuilder; + } +} + +function getHLines(parser) { + // Return an array. The array length = number of hlines. + // Each element in the array tells if the line is dashed. + const hlineInfo = []; + parser.consumeSpaces(); + let nxt = parser.fetch().text; + + while (nxt === "\\hline" || nxt === "\\hdashline") { + parser.consume(); + hlineInfo.push(nxt === "\\hdashline"); + parser.consumeSpaces(); + nxt = parser.fetch().text; + } + + return hlineInfo; +} +/** + * Parse the body of the environment, with rows delimited by \\ and + * columns delimited by &, and create a nested list in row-major order + * with one group per cell. If given an optional argument style + * ("text", "display", etc.), then each cell is cast into that style. + */ + + +function parseArray(parser, _ref, style) { + let hskipBeforeAndAfter = _ref.hskipBeforeAndAfter, + addJot = _ref.addJot, + cols = _ref.cols, + arraystretch = _ref.arraystretch, + colSeparationType = _ref.colSeparationType; + // Parse body of array with \\ temporarily mapped to \cr + parser.gullet.beginGroup(); + parser.gullet.macros.set("\\\\", "\\cr"); // Get current arraystretch if it's not set by the environment + + if (!arraystretch) { + const stretch = parser.gullet.expandMacroAsText("\\arraystretch"); + + if (stretch == null) { + // Default \arraystretch from lttab.dtx + arraystretch = 1; + } else { + arraystretch = parseFloat(stretch); + + if (!arraystretch || arraystretch < 0) { + throw new ParseError(`Invalid \\arraystretch: ${stretch}`); + } + } + } // Start group for first cell + + + parser.gullet.beginGroup(); + let row = []; + const body = [row]; + const rowGaps = []; + const hLinesBeforeRow = []; // Test for \hline at the top of the array. + + hLinesBeforeRow.push(getHLines(parser)); + + while (true) { + // eslint-disable-line no-constant-condition + // Parse each cell in its own group (namespace) + let cell = parser.parseExpression(false, "\\cr"); + parser.gullet.endGroup(); + parser.gullet.beginGroup(); + cell = { + type: "ordgroup", + mode: parser.mode, + body: cell + }; + + if (style) { + cell = { + type: "styling", + mode: parser.mode, + style, + body: [cell] + }; + } + + row.push(cell); + const next = parser.fetch().text; + + if (next === "&") { + parser.consume(); + } else if (next === "\\end") { + // Arrays terminate newlines with `\crcr` which consumes a `\cr` if + // the last line is empty. + // NOTE: Currently, `cell` is the last item added into `row`. + if (row.length === 1 && cell.type === "styling" && cell.body[0].body.length === 0) { + body.pop(); + } + + if (hLinesBeforeRow.length < body.length + 1) { + hLinesBeforeRow.push([]); + } + + break; + } else if (next === "\\cr") { + const cr = assertNodeType(parser.parseFunction(), "cr"); + rowGaps.push(cr.size); // check for \hline(s) following the row separator + + hLinesBeforeRow.push(getHLines(parser)); + row = []; + body.push(row); + } else { + throw new ParseError("Expected & or \\\\ or \\cr or \\end", parser.nextToken); + } + } // End cell group + + + parser.gullet.endGroup(); // End array group defining \\ + + parser.gullet.endGroup(); + return { + type: "array", + mode: parser.mode, + addJot, + arraystretch, + body, + cols, + rowGaps, + hskipBeforeAndAfter, + hLinesBeforeRow, + colSeparationType + }; +} // Decides on a style for cells in an array according to whether the given +// environment name starts with the letter 'd'. + + +function dCellStyle(envName) { + if (envName.substr(0, 1) === "d") { + return "display"; + } else { + return "text"; + } +} + +const htmlBuilder$3 = function htmlBuilder(group, options) { + let r; + let c; + const nr = group.body.length; + const hLinesBeforeRow = group.hLinesBeforeRow; + let nc = 0; + let body = new Array(nr); + const hlines = []; + const ruleThickness = Math.max( // From LaTeX \showthe\arrayrulewidth. Equals 0.04 em. + options.fontMetrics().arrayRuleWidth, options.minRuleThickness // User override. + ); // Horizontal spacing + + const pt = 1 / options.fontMetrics().ptPerEm; + let arraycolsep = 5 * pt; // default value, i.e. \arraycolsep in article.cls + + if (group.colSeparationType && group.colSeparationType === "small") { + // We're in a {smallmatrix}. Default column space is \thickspace, + // i.e. 5/18em = 0.2778em, per amsmath.dtx for {smallmatrix}. + // But that needs adjustment because LaTeX applies \scriptstyle to the + // entire array, including the colspace, but this function applies + // \scriptstyle only inside each element. + const localMultiplier = options.havingStyle(Style$1.SCRIPT).sizeMultiplier; + arraycolsep = 0.2778 * (localMultiplier / options.sizeMultiplier); + } // Vertical spacing + + + const baselineskip = 12 * pt; // see size10.clo + // Default \jot from ltmath.dtx + // TODO(edemaine): allow overriding \jot via \setlength (#687) + + const jot = 3 * pt; + const arrayskip = group.arraystretch * baselineskip; + const arstrutHeight = 0.7 * arrayskip; // \strutbox in ltfsstrc.dtx and + + const arstrutDepth = 0.3 * arrayskip; // \@arstrutbox in lttab.dtx + + let totalHeight = 0; // Set a position for \hline(s) at the top of the array, if any. + + function setHLinePos(hlinesInGap) { + for (let i = 0; i < hlinesInGap.length; ++i) { + if (i > 0) { + totalHeight += 0.25; + } + + hlines.push({ + pos: totalHeight, + isDashed: hlinesInGap[i] + }); + } + } + + setHLinePos(hLinesBeforeRow[0]); + + for (r = 0; r < group.body.length; ++r) { + const inrow = group.body[r]; + let height = arstrutHeight; // \@array adds an \@arstrut + + let depth = arstrutDepth; // to each tow (via the template) + + if (nc < inrow.length) { + nc = inrow.length; + } + + const outrow = new Array(inrow.length); + + for (c = 0; c < inrow.length; ++c) { + const elt = buildGroup(inrow[c], options); + + if (depth < elt.depth) { + depth = elt.depth; + } + + if (height < elt.height) { + height = elt.height; + } + + outrow[c] = elt; + } + + const rowGap = group.rowGaps[r]; + let gap = 0; + + if (rowGap) { + gap = calculateSize(rowGap, options); + + if (gap > 0) { + // \@argarraycr + gap += arstrutDepth; + + if (depth < gap) { + depth = gap; // \@xargarraycr + } + + gap = 0; + } + } // In AMS multiline environments such as aligned and gathered, rows + // correspond to lines that have additional \jot added to the + // \baselineskip via \openup. + + + if (group.addJot) { + depth += jot; + } + + outrow.height = height; + outrow.depth = depth; + totalHeight += height; + outrow.pos = totalHeight; + totalHeight += depth + gap; // \@yargarraycr + + body[r] = outrow; // Set a position for \hline(s), if any. + + setHLinePos(hLinesBeforeRow[r + 1]); + } + + const offset = totalHeight / 2 + options.fontMetrics().axisHeight; + const colDescriptions = group.cols || []; + const cols = []; + let colSep; + let colDescrNum; + + for (c = 0, colDescrNum = 0; // Continue while either there are more columns or more column + // descriptions, so trailing separators don't get lost. + c < nc || colDescrNum < colDescriptions.length; ++c, ++colDescrNum) { + let colDescr = colDescriptions[colDescrNum] || {}; + let firstSeparator = true; + + while (colDescr.type === "separator") { + // If there is more than one separator in a row, add a space + // between them. + if (!firstSeparator) { + colSep = buildCommon.makeSpan(["arraycolsep"], []); + colSep.style.width = options.fontMetrics().doubleRuleSep + "em"; + cols.push(colSep); + } + + if (colDescr.separator === "|" || colDescr.separator === ":") { + const lineType = colDescr.separator === "|" ? "solid" : "dashed"; + const separator = buildCommon.makeSpan(["vertical-separator"], [], options); + separator.style.height = totalHeight + "em"; + separator.style.borderRightWidth = `${ruleThickness}em`; + separator.style.borderRightStyle = lineType; + separator.style.margin = `0 -${ruleThickness / 2}em`; + separator.style.verticalAlign = -(totalHeight - offset) + "em"; + cols.push(separator); + } else { + throw new ParseError("Invalid separator type: " + colDescr.separator); + } + + colDescrNum++; + colDescr = colDescriptions[colDescrNum] || {}; + firstSeparator = false; + } + + if (c >= nc) { + continue; + } + + let sepwidth; + + if (c > 0 || group.hskipBeforeAndAfter) { + sepwidth = utils.deflt(colDescr.pregap, arraycolsep); + + if (sepwidth !== 0) { + colSep = buildCommon.makeSpan(["arraycolsep"], []); + colSep.style.width = sepwidth + "em"; + cols.push(colSep); + } + } + + let col = []; + + for (r = 0; r < nr; ++r) { + const row = body[r]; + const elem = row[c]; + + if (!elem) { + continue; + } + + const shift = row.pos - offset; + elem.depth = row.depth; + elem.height = row.height; + col.push({ + type: "elem", + elem: elem, + shift: shift + }); + } + + col = buildCommon.makeVList({ + positionType: "individualShift", + children: col + }, options); + col = buildCommon.makeSpan(["col-align-" + (colDescr.align || "c")], [col]); + cols.push(col); + + if (c < nc - 1 || group.hskipBeforeAndAfter) { + sepwidth = utils.deflt(colDescr.postgap, arraycolsep); + + if (sepwidth !== 0) { + colSep = buildCommon.makeSpan(["arraycolsep"], []); + colSep.style.width = sepwidth + "em"; + cols.push(colSep); + } + } + } + + body = buildCommon.makeSpan(["mtable"], cols); // Add \hline(s), if any. + + if (hlines.length > 0) { + const line = buildCommon.makeLineSpan("hline", options, ruleThickness); + const dashes = buildCommon.makeLineSpan("hdashline", options, ruleThickness); + const vListElems = [{ + type: "elem", + elem: body, + shift: 0 + }]; + + while (hlines.length > 0) { + const hline = hlines.pop(); + const lineShift = hline.pos - offset; + + if (hline.isDashed) { + vListElems.push({ + type: "elem", + elem: dashes, + shift: lineShift + }); + } else { + vListElems.push({ + type: "elem", + elem: line, + shift: lineShift + }); + } + } + + body = buildCommon.makeVList({ + positionType: "individualShift", + children: vListElems + }, options); + } + + return buildCommon.makeSpan(["mord"], [body], options); +}; + +const alignMap = { + c: "center ", + l: "left ", + r: "right " +}; + +const mathmlBuilder$3 = function mathmlBuilder(group, options) { + let table = new mathMLTree.MathNode("mtable", group.body.map(function (row) { + return new mathMLTree.MathNode("mtr", row.map(function (cell) { + return new mathMLTree.MathNode("mtd", [buildGroup$1(cell, options)]); + })); + })); // Set column alignment, row spacing, column spacing, and + // array lines by setting attributes on the table element. + // Set the row spacing. In MathML, we specify a gap distance. + // We do not use rowGap[] because MathML automatically increases + // cell height with the height/depth of the element content. + // LaTeX \arraystretch multiplies the row baseline-to-baseline distance. + // We simulate this by adding (arraystretch - 1)em to the gap. This + // does a reasonable job of adjusting arrays containing 1 em tall content. + // The 0.16 and 0.09 values are found emprically. They produce an array + // similar to LaTeX and in which content does not interfere with \hines. + + const gap = group.arraystretch === 0.5 ? 0.1 // {smallmatrix}, {subarray} + : 0.16 + group.arraystretch - 1 + (group.addJot ? 0.09 : 0); + table.setAttribute("rowspacing", gap + "em"); // MathML table lines go only between cells. + // To place a line on an edge we'll use , if necessary. + + let menclose = ""; + let align = ""; + + if (group.cols) { + // Find column alignment, column spacing, and vertical lines. + const cols = group.cols; + let columnLines = ""; + let prevTypeWasAlign = false; + let iStart = 0; + let iEnd = cols.length; + + if (cols[0].type === "separator") { + menclose += "top "; + iStart = 1; + } + + if (cols[cols.length - 1].type === "separator") { + menclose += "bottom "; + iEnd -= 1; + } + + for (let i = iStart; i < iEnd; i++) { + if (cols[i].type === "align") { + align += alignMap[cols[i].align]; + + if (prevTypeWasAlign) { + columnLines += "none "; + } + + prevTypeWasAlign = true; + } else if (cols[i].type === "separator") { + // MathML accepts only single lines between cells. + // So we read only the first of consecutive separators. + if (prevTypeWasAlign) { + columnLines += cols[i].separator === "|" ? "solid " : "dashed "; + prevTypeWasAlign = false; + } + } + } + + table.setAttribute("columnalign", align.trim()); + + if (/[sd]/.test(columnLines)) { + table.setAttribute("columnlines", columnLines.trim()); + } + } // Set column spacing. + + + if (group.colSeparationType === "align") { + const cols = group.cols || []; + let spacing = ""; + + for (let i = 1; i < cols.length; i++) { + spacing += i % 2 ? "0em " : "1em "; + } + + table.setAttribute("columnspacing", spacing.trim()); + } else if (group.colSeparationType === "alignat") { + table.setAttribute("columnspacing", "0em"); + } else if (group.colSeparationType === "small") { + table.setAttribute("columnspacing", "0.2778em"); + } else { + table.setAttribute("columnspacing", "1em"); + } // Address \hline and \hdashline + + + let rowLines = ""; + const hlines = group.hLinesBeforeRow; + menclose += hlines[0].length > 0 ? "left " : ""; + menclose += hlines[hlines.length - 1].length > 0 ? "right " : ""; + + for (let i = 1; i < hlines.length - 1; i++) { + rowLines += hlines[i].length === 0 ? "none " // MathML accepts only a single line between rows. Read one element. + : hlines[i][0] ? "dashed " : "solid "; + } + + if (/[sd]/.test(rowLines)) { + table.setAttribute("rowlines", rowLines.trim()); + } + + if (menclose !== "") { + table = new mathMLTree.MathNode("menclose", [table]); + table.setAttribute("notation", menclose.trim()); + } + + if (group.arraystretch && group.arraystretch < 1) { + // A small array. Wrap in scriptstyle so row gap is not too large. + table = new mathMLTree.MathNode("mstyle", [table]); + table.setAttribute("scriptlevel", "1"); + } + + return table; +}; // Convenience function for aligned and alignedat environments. + + +const alignedHandler = function alignedHandler(context, args) { + const cols = []; + const res = parseArray(context.parser, { + cols, + addJot: true + }, "display"); // Determining number of columns. + // 1. If the first argument is given, we use it as a number of columns, + // and makes sure that each row doesn't exceed that number. + // 2. Otherwise, just count number of columns = maximum number + // of cells in each row ("aligned" mode -- isAligned will be true). + // + // At the same time, prepend empty group {} at beginning of every second + // cell in each row (starting with second cell) so that operators become + // binary. This behavior is implemented in amsmath's \start@aligned. + + let numMaths; + let numCols = 0; + const emptyGroup = { + type: "ordgroup", + mode: context.mode, + body: [] + }; + const ordgroup = checkNodeType(args[0], "ordgroup"); + + if (ordgroup) { + let arg0 = ""; + + for (let i = 0; i < ordgroup.body.length; i++) { + const textord = assertNodeType(ordgroup.body[i], "textord"); + arg0 += textord.text; + } + + numMaths = Number(arg0); + numCols = numMaths * 2; + } + + const isAligned = !numCols; + res.body.forEach(function (row) { + for (let i = 1; i < row.length; i += 2) { + // Modify ordgroup node within styling node + const styling = assertNodeType(row[i], "styling"); + const ordgroup = assertNodeType(styling.body[0], "ordgroup"); + ordgroup.body.unshift(emptyGroup); + } + + if (!isAligned) { + // Case 1 + const curMaths = row.length / 2; + + if (numMaths < curMaths) { + throw new ParseError("Too many math in a row: " + `expected ${numMaths}, but got ${curMaths}`, row[0]); + } + } else if (numCols < row.length) { + // Case 2 + numCols = row.length; + } + }); // Adjusting alignment. + // In aligned mode, we add one \qquad between columns; + // otherwise we add nothing. + + for (let i = 0; i < numCols; ++i) { + let align = "r"; + let pregap = 0; + + if (i % 2 === 1) { + align = "l"; + } else if (i > 0 && isAligned) { + // "aligned" mode. + pregap = 1; // add one \quad + } + + cols[i] = { + type: "align", + align: align, + pregap: pregap, + postgap: 0 + }; + } + + res.colSeparationType = isAligned ? "align" : "alignat"; + return res; +}; // Arrays are part of LaTeX, defined in lttab.dtx so its documentation +// is part of the source2e.pdf file of LaTeX2e source documentation. +// {darray} is an {array} environment where cells are set in \displaystyle, +// as defined in nccmath.sty. + + +defineEnvironment({ + type: "array", + names: ["array", "darray"], + props: { + numArgs: 1 + }, + + handler(context, args) { + // Since no types are specified above, the two possibilities are + // - The argument is wrapped in {} or [], in which case Parser's + // parseGroup() returns an "ordgroup" wrapping some symbol node. + // - The argument is a bare symbol node. + const symNode = checkSymbolNodeType(args[0]); + const colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body; + const cols = colalign.map(function (nde) { + const node = assertSymbolNodeType(nde); + const ca = node.text; + + if ("lcr".indexOf(ca) !== -1) { + return { + type: "align", + align: ca + }; + } else if (ca === "|") { + return { + type: "separator", + separator: "|" + }; + } else if (ca === ":") { + return { + type: "separator", + separator: ":" + }; + } + + throw new ParseError("Unknown column alignment: " + ca, nde); + }); + const res = { + cols, + hskipBeforeAndAfter: true // \@preamble in lttab.dtx + + }; + return parseArray(context.parser, res, dCellStyle(context.envName)); + }, + + htmlBuilder: htmlBuilder$3, + mathmlBuilder: mathmlBuilder$3 +}); // The matrix environments of amsmath builds on the array environment +// of LaTeX, which is discussed above. + +defineEnvironment({ + type: "array", + names: ["matrix", "pmatrix", "bmatrix", "Bmatrix", "vmatrix", "Vmatrix"], + props: { + numArgs: 0 + }, + + handler(context) { + const delimiters = { + "matrix": null, + "pmatrix": ["(", ")"], + "bmatrix": ["[", "]"], + "Bmatrix": ["\\{", "\\}"], + "vmatrix": ["|", "|"], + "Vmatrix": ["\\Vert", "\\Vert"] + }[context.envName]; // \hskip -\arraycolsep in amsmath + + const payload = { + hskipBeforeAndAfter: false + }; + const res = parseArray(context.parser, payload, dCellStyle(context.envName)); + return delimiters ? { + type: "leftright", + mode: context.mode, + body: [res], + left: delimiters[0], + right: delimiters[1], + rightColor: undefined // \right uninfluenced by \color in array + + } : res; + }, + + htmlBuilder: htmlBuilder$3, + mathmlBuilder: mathmlBuilder$3 +}); +defineEnvironment({ + type: "array", + names: ["smallmatrix"], + props: { + numArgs: 0 + }, + + handler(context) { + const payload = { + arraystretch: 0.5 + }; + const res = parseArray(context.parser, payload, "script"); + res.colSeparationType = "small"; + return res; + }, + + htmlBuilder: htmlBuilder$3, + mathmlBuilder: mathmlBuilder$3 +}); +defineEnvironment({ + type: "array", + names: ["subarray"], + props: { + numArgs: 1 + }, + + handler(context, args) { + // Parsing of {subarray} is similar to {array} + const symNode = checkSymbolNodeType(args[0]); + const colalign = symNode ? [args[0]] : assertNodeType(args[0], "ordgroup").body; + const cols = colalign.map(function (nde) { + const node = assertSymbolNodeType(nde); + const ca = node.text; // {subarray} only recognizes "l" & "c" + + if ("lc".indexOf(ca) !== -1) { + return { + type: "align", + align: ca + }; + } + + throw new ParseError("Unknown column alignment: " + ca, nde); + }); + + if (cols.length > 1) { + throw new ParseError("{subarray} can contain only one column"); + } + + let res = { + cols, + hskipBeforeAndAfter: false, + arraystretch: 0.5 + }; + res = parseArray(context.parser, res, "script"); + + if (res.body[0].length > 1) { + throw new ParseError("{subarray} can contain only one column"); + } + + return res; + }, + + htmlBuilder: htmlBuilder$3, + mathmlBuilder: mathmlBuilder$3 +}); // A cases environment (in amsmath.sty) is almost equivalent to +// \def\arraystretch{1.2}% +// \left\{\begin{array}{@{}l@{\quad}l@{}} … \end{array}\right. +// {dcases} is a {cases} environment where cells are set in \displaystyle, +// as defined in mathtools.sty. + +defineEnvironment({ + type: "array", + names: ["cases", "dcases"], + props: { + numArgs: 0 + }, + + handler(context) { + const payload = { + arraystretch: 1.2, + cols: [{ + type: "align", + align: "l", + pregap: 0, + // TODO(kevinb) get the current style. + // For now we use the metrics for TEXT style which is what we were + // doing before. Before attempting to get the current style we + // should look at TeX's behavior especially for \over and matrices. + postgap: 1.0 + /* 1em quad */ + + }, { + type: "align", + align: "l", + pregap: 0, + postgap: 0 + }] + }; + const res = parseArray(context.parser, payload, dCellStyle(context.envName)); + return { + type: "leftright", + mode: context.mode, + body: [res], + left: "\\{", + right: ".", + rightColor: undefined + }; + }, + + htmlBuilder: htmlBuilder$3, + mathmlBuilder: mathmlBuilder$3 +}); // An aligned environment is like the align* environment +// except it operates within math mode. +// Note that we assume \nomallineskiplimit to be zero, +// so that \strut@ is the same as \strut. + +defineEnvironment({ + type: "array", + names: ["aligned"], + props: { + numArgs: 0 + }, + handler: alignedHandler, + htmlBuilder: htmlBuilder$3, + mathmlBuilder: mathmlBuilder$3 +}); // A gathered environment is like an array environment with one centered +// column, but where rows are considered lines so get \jot line spacing +// and contents are set in \displaystyle. + +defineEnvironment({ + type: "array", + names: ["gathered"], + props: { + numArgs: 0 + }, + + handler(context) { + const res = { + cols: [{ + type: "align", + align: "c" + }], + addJot: true + }; + return parseArray(context.parser, res, "display"); + }, + + htmlBuilder: htmlBuilder$3, + mathmlBuilder: mathmlBuilder$3 +}); // alignat environment is like an align environment, but one must explicitly +// specify maximum number of columns in each row, and can adjust spacing between +// each columns. + +defineEnvironment({ + type: "array", + names: ["alignedat"], + // One for numbered and for unnumbered; + // but, KaTeX doesn't supports math numbering yet, + // they make no difference for now. + props: { + numArgs: 1 + }, + handler: alignedHandler, + htmlBuilder: htmlBuilder$3, + mathmlBuilder: mathmlBuilder$3 +}); // Catch \hline outside array environment + +defineFunction({ + type: "text", + // Doesn't matter what this is. + names: ["\\hline", "\\hdashline"], + props: { + numArgs: 0, + allowedInText: true, + allowedInMath: true + }, + + handler(context, args) { + throw new ParseError(`${context.funcName} valid only within array environment`); + } + +}); + +const environments = _environments; + +// defineEnvironment definitions. +// $FlowFixMe, "environment" handler returns an environment ParseNode + +defineFunction({ + type: "environment", + names: ["\\begin", "\\end"], + props: { + numArgs: 1, + argTypes: ["text"] + }, + + handler(_ref, args) { + let parser = _ref.parser, + funcName = _ref.funcName; + const nameGroup = args[0]; + + if (nameGroup.type !== "ordgroup") { + throw new ParseError("Invalid environment name", nameGroup); + } + + let envName = ""; + + for (let i = 0; i < nameGroup.body.length; ++i) { + envName += assertNodeType(nameGroup.body[i], "textord").text; + } + + if (funcName === "\\begin") { + // begin...end is similar to left...right + if (!environments.hasOwnProperty(envName)) { + throw new ParseError("No such environment: " + envName, nameGroup); + } // Build the environment object. Arguments and other information will + // be made available to the begin and end methods using properties. + + + const env = environments[envName]; + + const _parser$parseArgument = parser.parseArguments("\\begin{" + envName + "}", env), + args = _parser$parseArgument.args, + optArgs = _parser$parseArgument.optArgs; + + const context = { + mode: parser.mode, + envName, + parser + }; + const result = env.handler(context, args, optArgs); + parser.expect("\\end", false); + const endNameToken = parser.nextToken; + const end = assertNodeType(parser.parseFunction(), "environment"); + + if (end.name !== envName) { + throw new ParseError(`Mismatch: \\begin{${envName}} matched by \\end{${end.name}}`, endNameToken); + } + + return result; + } + + return { + type: "environment", + mode: parser.mode, + name: envName, + nameGroup + }; + } + +}); + +const makeSpan$2 = buildCommon.makeSpan; + +function htmlBuilder$4(group, options) { + const elements = buildExpression(group.body, options, true); + return makeSpan$2([group.mclass], elements, options); +} + +function mathmlBuilder$4(group, options) { + let node; + const inner = buildExpression$1(group.body, options); + + if (group.mclass === "minner") { + return mathMLTree.newDocumentFragment(inner); + } else if (group.mclass === "mord") { + if (group.isCharacterBox) { + node = inner[0]; + node.type = "mi"; + } else { + node = new mathMLTree.MathNode("mi", inner); + } + } else { + if (group.isCharacterBox) { + node = inner[0]; + node.type = "mo"; + } else { + node = new mathMLTree.MathNode("mo", inner); + } // Set spacing based on what is the most likely adjacent atom type. + // See TeXbook p170. + + + if (group.mclass === "mbin") { + node.attributes.lspace = "0.22em"; // medium space + + node.attributes.rspace = "0.22em"; + } else if (group.mclass === "mpunct") { + node.attributes.lspace = "0em"; + node.attributes.rspace = "0.17em"; // thinspace + } else if (group.mclass === "mopen" || group.mclass === "mclose") { + node.attributes.lspace = "0em"; + node.attributes.rspace = "0em"; + } // MathML default space is 5/18 em, so needs no action. + // Ref: https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mo + + } + + return node; +} // Math class commands except \mathop + + +defineFunction({ + type: "mclass", + names: ["\\mathord", "\\mathbin", "\\mathrel", "\\mathopen", "\\mathclose", "\\mathpunct", "\\mathinner"], + props: { + numArgs: 1 + }, + + handler(_ref, args) { + let parser = _ref.parser, + funcName = _ref.funcName; + const body = args[0]; + return { + type: "mclass", + mode: parser.mode, + mclass: "m" + funcName.substr(5), + // TODO(kevinb): don't prefix with 'm' + body: ordargument(body), + isCharacterBox: utils.isCharacterBox(body) + }; + }, + + htmlBuilder: htmlBuilder$4, + mathmlBuilder: mathmlBuilder$4 +}); +const binrelClass = arg => { + // \binrel@ spacing varies with (bin|rel|ord) of the atom in the argument. + // (by rendering separately and with {}s before and after, and measuring + // the change in spacing). We'll do roughly the same by detecting the + // atom type directly. + const atom = arg.type === "ordgroup" && arg.body.length ? arg.body[0] : arg; + + if (atom.type === "atom" && (atom.family === "bin" || atom.family === "rel")) { + return "m" + atom.family; + } else { + return "mord"; + } +}; // \@binrel{x}{y} renders like y but as mbin/mrel/mord if x is mbin/mrel/mord. +// This is equivalent to \binrel@{x}\binrel@@{y} in AMSTeX. + +defineFunction({ + type: "mclass", + names: ["\\@binrel"], + props: { + numArgs: 2 + }, + + handler(_ref2, args) { + let parser = _ref2.parser; + return { + type: "mclass", + mode: parser.mode, + mclass: binrelClass(args[0]), + body: [args[1]], + isCharacterBox: utils.isCharacterBox(args[1]) + }; + } + +}); // Build a relation or stacked op by placing one symbol on top of another + +defineFunction({ + type: "mclass", + names: ["\\stackrel", "\\overset", "\\underset"], + props: { + numArgs: 2 + }, + + handler(_ref3, args) { + let parser = _ref3.parser, + funcName = _ref3.funcName; + const baseArg = args[1]; + const shiftedArg = args[0]; + let mclass; + + if (funcName !== "\\stackrel") { + // LaTeX applies \binrel spacing to \overset and \underset. + mclass = binrelClass(baseArg); + } else { + mclass = "mrel"; // for \stackrel + } + + const baseOp = { + type: "op", + mode: baseArg.mode, + limits: true, + alwaysHandleSupSub: true, + parentIsSupSub: false, + symbol: false, + suppressBaseShift: funcName !== "\\stackrel", + body: ordargument(baseArg) + }; + const supsub = { + type: "supsub", + mode: shiftedArg.mode, + base: baseOp, + sup: funcName === "\\underset" ? null : shiftedArg, + sub: funcName === "\\underset" ? shiftedArg : null + }; + return { + type: "mclass", + mode: parser.mode, + mclass, + body: [supsub], + isCharacterBox: utils.isCharacterBox(supsub) + }; + }, + + htmlBuilder: htmlBuilder$4, + mathmlBuilder: mathmlBuilder$4 +}); + +// TODO(kevinb): implement \\sl and \\sc + +const htmlBuilder$5 = (group, options) => { + const font = group.font; + const newOptions = options.withFont(font); + return buildGroup(group.body, newOptions); +}; + +const mathmlBuilder$5 = (group, options) => { + const font = group.font; + const newOptions = options.withFont(font); + return buildGroup$1(group.body, newOptions); +}; + +const fontAliases = { + "\\Bbb": "\\mathbb", + "\\bold": "\\mathbf", + "\\frak": "\\mathfrak", + "\\bm": "\\boldsymbol" +}; +defineFunction({ + type: "font", + names: [// styles, except \boldsymbol defined below + "\\mathrm", "\\mathit", "\\mathbf", "\\mathnormal", // families + "\\mathbb", "\\mathcal", "\\mathfrak", "\\mathscr", "\\mathsf", "\\mathtt", // aliases, except \bm defined below + "\\Bbb", "\\bold", "\\frak"], + props: { + numArgs: 1, + greediness: 2 + }, + handler: (_ref, args) => { + let parser = _ref.parser, + funcName = _ref.funcName; + const body = args[0]; + let func = funcName; + + if (func in fontAliases) { + func = fontAliases[func]; + } + + return { + type: "font", + mode: parser.mode, + font: func.slice(1), + body + }; + }, + htmlBuilder: htmlBuilder$5, + mathmlBuilder: mathmlBuilder$5 +}); +defineFunction({ + type: "mclass", + names: ["\\boldsymbol", "\\bm"], + props: { + numArgs: 1, + greediness: 2 + }, + handler: (_ref2, args) => { + let parser = _ref2.parser; + const body = args[0]; + const isCharacterBox = utils.isCharacterBox(body); // amsbsy.sty's \boldsymbol uses \binrel spacing to inherit the + // argument's bin|rel|ord status + + return { + type: "mclass", + mode: parser.mode, + mclass: binrelClass(body), + body: [{ + type: "font", + mode: parser.mode, + font: "boldsymbol", + body + }], + isCharacterBox: isCharacterBox + }; + } +}); // Old font changing functions + +defineFunction({ + type: "font", + names: ["\\rm", "\\sf", "\\tt", "\\bf", "\\it"], + props: { + numArgs: 0, + allowedInText: true + }, + handler: (_ref3, args) => { + let parser = _ref3.parser, + funcName = _ref3.funcName, + breakOnTokenText = _ref3.breakOnTokenText; + const mode = parser.mode; + const body = parser.parseExpression(true, breakOnTokenText); + const style = `math${funcName.slice(1)}`; + return { + type: "font", + mode: mode, + font: style, + body: { + type: "ordgroup", + mode: parser.mode, + body + } + }; + }, + htmlBuilder: htmlBuilder$5, + mathmlBuilder: mathmlBuilder$5 +}); + +const adjustStyle = (size, originalStyle) => { + // Figure out what style this fraction should be in based on the + // function used + let style = originalStyle; + + if (size === "display") { + // Get display style as a default. + // If incoming style is sub/sup, use style.text() to get correct size. + style = style.id >= Style$1.SCRIPT.id ? style.text() : Style$1.DISPLAY; + } else if (size === "text" && style.size === Style$1.DISPLAY.size) { + // We're in a \tfrac but incoming style is displaystyle, so: + style = Style$1.TEXT; + } else if (size === "script") { + style = Style$1.SCRIPT; + } else if (size === "scriptscript") { + style = Style$1.SCRIPTSCRIPT; + } + + return style; +}; + +const htmlBuilder$6 = (group, options) => { + // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e). + const style = adjustStyle(group.size, options.style); + const nstyle = style.fracNum(); + const dstyle = style.fracDen(); + let newOptions; + newOptions = options.havingStyle(nstyle); + const numerm = buildGroup(group.numer, newOptions, options); + + if (group.continued) { + // \cfrac inserts a \strut into the numerator. + // Get \strut dimensions from TeXbook page 353. + const hStrut = 8.5 / options.fontMetrics().ptPerEm; + const dStrut = 3.5 / options.fontMetrics().ptPerEm; + numerm.height = numerm.height < hStrut ? hStrut : numerm.height; + numerm.depth = numerm.depth < dStrut ? dStrut : numerm.depth; + } + + newOptions = options.havingStyle(dstyle); + const denomm = buildGroup(group.denom, newOptions, options); + let rule; + let ruleWidth; + let ruleSpacing; + + if (group.hasBarLine) { + if (group.barSize) { + ruleWidth = calculateSize(group.barSize, options); + rule = buildCommon.makeLineSpan("frac-line", options, ruleWidth); + } else { + rule = buildCommon.makeLineSpan("frac-line", options); + } + + ruleWidth = rule.height; + ruleSpacing = rule.height; + } else { + rule = null; + ruleWidth = 0; + ruleSpacing = options.fontMetrics().defaultRuleThickness; + } // Rule 15b + + + let numShift; + let clearance; + let denomShift; + + if (style.size === Style$1.DISPLAY.size || group.size === "display") { + numShift = options.fontMetrics().num1; + + if (ruleWidth > 0) { + clearance = 3 * ruleSpacing; + } else { + clearance = 7 * ruleSpacing; + } + + denomShift = options.fontMetrics().denom1; + } else { + if (ruleWidth > 0) { + numShift = options.fontMetrics().num2; + clearance = ruleSpacing; + } else { + numShift = options.fontMetrics().num3; + clearance = 3 * ruleSpacing; + } + + denomShift = options.fontMetrics().denom2; + } + + let frac; + + if (!rule) { + // Rule 15c + const candidateClearance = numShift - numerm.depth - (denomm.height - denomShift); + + if (candidateClearance < clearance) { + numShift += 0.5 * (clearance - candidateClearance); + denomShift += 0.5 * (clearance - candidateClearance); + } + + frac = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: denomm, + shift: denomShift + }, { + type: "elem", + elem: numerm, + shift: -numShift + }] + }, options); + } else { + // Rule 15d + const axisHeight = options.fontMetrics().axisHeight; + + if (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth) < clearance) { + numShift += clearance - (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth)); + } + + if (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift) < clearance) { + denomShift += clearance - (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift)); + } + + const midShift = -(axisHeight - 0.5 * ruleWidth); + frac = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: denomm, + shift: denomShift + }, { + type: "elem", + elem: rule, + shift: midShift + }, { + type: "elem", + elem: numerm, + shift: -numShift + }] + }, options); + } // Since we manually change the style sometimes (with \dfrac or \tfrac), + // account for the possible size change here. + + + newOptions = options.havingStyle(style); + frac.height *= newOptions.sizeMultiplier / options.sizeMultiplier; + frac.depth *= newOptions.sizeMultiplier / options.sizeMultiplier; // Rule 15e + + let delimSize; + + if (style.size === Style$1.DISPLAY.size) { + delimSize = options.fontMetrics().delim1; + } else { + delimSize = options.fontMetrics().delim2; + } + + let leftDelim; + let rightDelim; + + if (group.leftDelim == null) { + leftDelim = makeNullDelimiter(options, ["mopen"]); + } else { + leftDelim = delimiter.customSizedDelim(group.leftDelim, delimSize, true, options.havingStyle(style), group.mode, ["mopen"]); + } + + if (group.continued) { + rightDelim = buildCommon.makeSpan([]); // zero width for \cfrac + } else if (group.rightDelim == null) { + rightDelim = makeNullDelimiter(options, ["mclose"]); + } else { + rightDelim = delimiter.customSizedDelim(group.rightDelim, delimSize, true, options.havingStyle(style), group.mode, ["mclose"]); + } + + return buildCommon.makeSpan(["mord"].concat(newOptions.sizingClasses(options)), [leftDelim, buildCommon.makeSpan(["mfrac"], [frac]), rightDelim], options); +}; + +const mathmlBuilder$6 = (group, options) => { + let node = new mathMLTree.MathNode("mfrac", [buildGroup$1(group.numer, options), buildGroup$1(group.denom, options)]); + + if (!group.hasBarLine) { + node.setAttribute("linethickness", "0px"); + } else if (group.barSize) { + const ruleWidth = calculateSize(group.barSize, options); + node.setAttribute("linethickness", ruleWidth + "em"); + } + + const style = adjustStyle(group.size, options.style); + + if (style.size !== options.style.size) { + node = new mathMLTree.MathNode("mstyle", [node]); + const isDisplay = style.size === Style$1.DISPLAY.size ? "true" : "false"; + node.setAttribute("displaystyle", isDisplay); + node.setAttribute("scriptlevel", "0"); + } + + if (group.leftDelim != null || group.rightDelim != null) { + const withDelims = []; + + if (group.leftDelim != null) { + const leftOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group.leftDelim.replace("\\", ""))]); + leftOp.setAttribute("fence", "true"); + withDelims.push(leftOp); + } + + withDelims.push(node); + + if (group.rightDelim != null) { + const rightOp = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(group.rightDelim.replace("\\", ""))]); + rightOp.setAttribute("fence", "true"); + withDelims.push(rightOp); + } + + return makeRow(withDelims); + } + + return node; +}; + +defineFunction({ + type: "genfrac", + names: ["\\cfrac", "\\dfrac", "\\frac", "\\tfrac", "\\dbinom", "\\binom", "\\tbinom", "\\\\atopfrac", // can’t be entered directly + "\\\\bracefrac", "\\\\brackfrac"], + props: { + numArgs: 2, + greediness: 2 + }, + handler: (_ref, args) => { + let parser = _ref.parser, + funcName = _ref.funcName; + const numer = args[0]; + const denom = args[1]; + let hasBarLine; + let leftDelim = null; + let rightDelim = null; + let size = "auto"; + + switch (funcName) { + case "\\cfrac": + case "\\dfrac": + case "\\frac": + case "\\tfrac": + hasBarLine = true; + break; + + case "\\\\atopfrac": + hasBarLine = false; + break; + + case "\\dbinom": + case "\\binom": + case "\\tbinom": + hasBarLine = false; + leftDelim = "("; + rightDelim = ")"; + break; + + case "\\\\bracefrac": + hasBarLine = false; + leftDelim = "\\{"; + rightDelim = "\\}"; + break; + + case "\\\\brackfrac": + hasBarLine = false; + leftDelim = "["; + rightDelim = "]"; + break; + + default: + throw new Error("Unrecognized genfrac command"); + } + + switch (funcName) { + case "\\cfrac": + case "\\dfrac": + case "\\dbinom": + size = "display"; + break; + + case "\\tfrac": + case "\\tbinom": + size = "text"; + break; + } + + return { + type: "genfrac", + mode: parser.mode, + continued: funcName === "\\cfrac", + numer, + denom, + hasBarLine, + leftDelim, + rightDelim, + size, + barSize: null + }; + }, + htmlBuilder: htmlBuilder$6, + mathmlBuilder: mathmlBuilder$6 +}); // Infix generalized fractions -- these are not rendered directly, but replaced +// immediately by one of the variants above. + +defineFunction({ + type: "infix", + names: ["\\over", "\\choose", "\\atop", "\\brace", "\\brack"], + props: { + numArgs: 0, + infix: true + }, + + handler(_ref2) { + let parser = _ref2.parser, + funcName = _ref2.funcName, + token = _ref2.token; + let replaceWith; + + switch (funcName) { + case "\\over": + replaceWith = "\\frac"; + break; + + case "\\choose": + replaceWith = "\\binom"; + break; + + case "\\atop": + replaceWith = "\\\\atopfrac"; + break; + + case "\\brace": + replaceWith = "\\\\bracefrac"; + break; + + case "\\brack": + replaceWith = "\\\\brackfrac"; + break; + + default: + throw new Error("Unrecognized infix genfrac command"); + } + + return { + type: "infix", + mode: parser.mode, + replaceWith, + token + }; + } + +}); +const stylArray = ["display", "text", "script", "scriptscript"]; + +const delimFromValue = function delimFromValue(delimString) { + let delim = null; + + if (delimString.length > 0) { + delim = delimString; + delim = delim === "." ? null : delim; + } + + return delim; +}; + +defineFunction({ + type: "genfrac", + names: ["\\genfrac"], + props: { + numArgs: 6, + greediness: 6, + argTypes: ["math", "math", "size", "text", "math", "math"] + }, + + handler(_ref3, args) { + let parser = _ref3.parser; + const numer = args[4]; + const denom = args[5]; // Look into the parse nodes to get the desired delimiters. + + let leftNode = checkNodeType(args[0], "atom"); + + if (leftNode) { + leftNode = assertAtomFamily(args[0], "open"); + } + + const leftDelim = leftNode ? delimFromValue(leftNode.text) : null; + let rightNode = checkNodeType(args[1], "atom"); + + if (rightNode) { + rightNode = assertAtomFamily(args[1], "close"); + } + + const rightDelim = rightNode ? delimFromValue(rightNode.text) : null; + const barNode = assertNodeType(args[2], "size"); + let hasBarLine; + let barSize = null; + + if (barNode.isBlank) { + // \genfrac acts differently than \above. + // \genfrac treats an empty size group as a signal to use a + // standard bar size. \above would see size = 0 and omit the bar. + hasBarLine = true; + } else { + barSize = barNode.value; + hasBarLine = barSize.number > 0; + } // Find out if we want displaystyle, textstyle, etc. + + + let size = "auto"; + let styl = checkNodeType(args[3], "ordgroup"); + + if (styl) { + if (styl.body.length > 0) { + const textOrd = assertNodeType(styl.body[0], "textord"); + size = stylArray[Number(textOrd.text)]; + } + } else { + styl = assertNodeType(args[3], "textord"); + size = stylArray[Number(styl.text)]; + } + + return { + type: "genfrac", + mode: parser.mode, + numer, + denom, + continued: false, + hasBarLine, + barSize, + leftDelim, + rightDelim, + size + }; + }, + + htmlBuilder: htmlBuilder$6, + mathmlBuilder: mathmlBuilder$6 +}); // \above is an infix fraction that also defines a fraction bar size. + +defineFunction({ + type: "infix", + names: ["\\above"], + props: { + numArgs: 1, + argTypes: ["size"], + infix: true + }, + + handler(_ref4, args) { + let parser = _ref4.parser, + funcName = _ref4.funcName, + token = _ref4.token; + return { + type: "infix", + mode: parser.mode, + replaceWith: "\\\\abovefrac", + size: assertNodeType(args[0], "size").value, + token + }; + } + +}); +defineFunction({ + type: "genfrac", + names: ["\\\\abovefrac"], + props: { + numArgs: 3, + argTypes: ["math", "size", "math"] + }, + handler: (_ref5, args) => { + let parser = _ref5.parser, + funcName = _ref5.funcName; + const numer = args[0]; + const barSize = assert(assertNodeType(args[1], "infix").size); + const denom = args[2]; + const hasBarLine = barSize.number > 0; + return { + type: "genfrac", + mode: parser.mode, + numer, + denom, + continued: false, + hasBarLine, + barSize, + leftDelim: null, + rightDelim: null, + size: "auto" + }; + }, + htmlBuilder: htmlBuilder$6, + mathmlBuilder: mathmlBuilder$6 +}); + +// NOTE: Unlike most `htmlBuilder`s, this one handles not only "horizBrace", but +const htmlBuilder$7 = (grp, options) => { + const style = options.style; // Pull out the `ParseNode<"horizBrace">` if `grp` is a "supsub" node. + + let supSubGroup; + let group; + const supSub = checkNodeType(grp, "supsub"); + + if (supSub) { + // Ref: LaTeX source2e: }}}}\limits} + // i.e. LaTeX treats the brace similar to an op and passes it + // with \limits, so we need to assign supsub style. + supSubGroup = supSub.sup ? buildGroup(supSub.sup, options.havingStyle(style.sup()), options) : buildGroup(supSub.sub, options.havingStyle(style.sub()), options); + group = assertNodeType(supSub.base, "horizBrace"); + } else { + group = assertNodeType(grp, "horizBrace"); + } // Build the base group + + + const body = buildGroup(group.base, options.havingBaseStyle(Style$1.DISPLAY)); // Create the stretchy element + + const braceBody = stretchy.svgSpan(group, options); // Generate the vlist, with the appropriate kerns ┏━━━━━━━━┓ + // This first vlist contains the content and the brace: equation + + let vlist; + + if (group.isOver) { + vlist = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: body + }, { + type: "kern", + size: 0.1 + }, { + type: "elem", + elem: braceBody + }] + }, options); // $FlowFixMe: Replace this with passing "svg-align" into makeVList. + + vlist.children[0].children[0].children[1].classes.push("svg-align"); + } else { + vlist = buildCommon.makeVList({ + positionType: "bottom", + positionData: body.depth + 0.1 + braceBody.height, + children: [{ + type: "elem", + elem: braceBody + }, { + type: "kern", + size: 0.1 + }, { + type: "elem", + elem: body + }] + }, options); // $FlowFixMe: Replace this with passing "svg-align" into makeVList. + + vlist.children[0].children[0].children[0].classes.push("svg-align"); + } + + if (supSubGroup) { + // To write the supsub, wrap the first vlist in another vlist: + // They can't all go in the same vlist, because the note might be + // wider than the equation. We want the equation to control the + // brace width. + // note long note long note + // ┏━━━━━━━━┓ or ┏━━━┓ not ┏━━━━━━━━━┓ + // equation eqn eqn + const vSpan = buildCommon.makeSpan(["mord", group.isOver ? "mover" : "munder"], [vlist], options); + + if (group.isOver) { + vlist = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: vSpan + }, { + type: "kern", + size: 0.2 + }, { + type: "elem", + elem: supSubGroup + }] + }, options); + } else { + vlist = buildCommon.makeVList({ + positionType: "bottom", + positionData: vSpan.depth + 0.2 + supSubGroup.height + supSubGroup.depth, + children: [{ + type: "elem", + elem: supSubGroup + }, { + type: "kern", + size: 0.2 + }, { + type: "elem", + elem: vSpan + }] + }, options); + } + } + + return buildCommon.makeSpan(["mord", group.isOver ? "mover" : "munder"], [vlist], options); +}; + +const mathmlBuilder$7 = (group, options) => { + const accentNode = stretchy.mathMLnode(group.label); + return new mathMLTree.MathNode(group.isOver ? "mover" : "munder", [buildGroup$1(group.base, options), accentNode]); +}; // Horizontal stretchy braces + + +defineFunction({ + type: "horizBrace", + names: ["\\overbrace", "\\underbrace"], + props: { + numArgs: 1 + }, + + handler(_ref, args) { + let parser = _ref.parser, + funcName = _ref.funcName; + return { + type: "horizBrace", + mode: parser.mode, + label: funcName, + isOver: /^\\over/.test(funcName), + base: args[0] + }; + }, + + htmlBuilder: htmlBuilder$7, + mathmlBuilder: mathmlBuilder$7 +}); + +defineFunction({ + type: "href", + names: ["\\href"], + props: { + numArgs: 2, + argTypes: ["url", "original"], + allowedInText: true + }, + handler: (_ref, args) => { + let parser = _ref.parser; + const body = args[1]; + const href = assertNodeType(args[0], "url").url; + + if (!parser.settings.isTrusted({ + command: "\\href", + url: href + })) { + return parser.formatUnsupportedCmd("\\href"); + } + + return { + type: "href", + mode: parser.mode, + href, + body: ordargument(body) + }; + }, + htmlBuilder: (group, options) => { + const elements = buildExpression(group.body, options, false); + return buildCommon.makeAnchor(group.href, [], elements, options); + }, + mathmlBuilder: (group, options) => { + let math = buildExpressionRow(group.body, options); + + if (!(math instanceof MathNode)) { + math = new MathNode("mrow", [math]); + } + + math.setAttribute("href", group.href); + return math; + } +}); +defineFunction({ + type: "href", + names: ["\\url"], + props: { + numArgs: 1, + argTypes: ["url"], + allowedInText: true + }, + handler: (_ref2, args) => { + let parser = _ref2.parser; + const href = assertNodeType(args[0], "url").url; + + if (!parser.settings.isTrusted({ + command: "\\url", + url: href + })) { + return parser.formatUnsupportedCmd("\\url"); + } + + const chars = []; + + for (let i = 0; i < href.length; i++) { + let c = href[i]; + + if (c === "~") { + c = "\\textasciitilde"; + } + + chars.push({ + type: "textord", + mode: "text", + text: c + }); + } + + const body = { + type: "text", + mode: parser.mode, + font: "\\texttt", + body: chars + }; + return { + type: "href", + mode: parser.mode, + href, + body: ordargument(body) + }; + } +}); + +defineFunction({ + type: "htmlmathml", + names: ["\\html@mathml"], + props: { + numArgs: 2, + allowedInText: true + }, + handler: (_ref, args) => { + let parser = _ref.parser; + return { + type: "htmlmathml", + mode: parser.mode, + html: ordargument(args[0]), + mathml: ordargument(args[1]) + }; + }, + htmlBuilder: (group, options) => { + const elements = buildExpression(group.html, options, false); + return buildCommon.makeFragment(elements); + }, + mathmlBuilder: (group, options) => { + return buildExpressionRow(group.mathml, options); + } +}); + +const sizeData = function sizeData(str) { + if (/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(str)) { + // str is a number with no unit specified. + // default unit is bp, per graphix package. + return { + number: +str, + unit: "bp" + }; + } else { + const match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(str); + + if (!match) { + throw new ParseError("Invalid size: '" + str + "' in \\includegraphics"); + } + + const data = { + number: +(match[1] + match[2]), + // sign + magnitude, cast to number + unit: match[3] + }; + + if (!validUnit(data)) { + throw new ParseError("Invalid unit: '" + data.unit + "' in \\includegraphics."); + } + + return data; + } +}; + +defineFunction({ + type: "includegraphics", + names: ["\\includegraphics"], + props: { + numArgs: 1, + numOptionalArgs: 1, + argTypes: ["raw", "url"], + allowedInText: false + }, + handler: (_ref, args, optArgs) => { + let parser = _ref.parser; + let width = { + number: 0, + unit: "em" + }; + let height = { + number: 0.9, + unit: "em" + }; // sorta character sized. + + let totalheight = { + number: 0, + unit: "em" + }; + let alt = ""; + + if (optArgs[0]) { + const attributeStr = assertNodeType(optArgs[0], "raw").string; // Parser.js does not parse key/value pairs. We get a string. + + const attributes = attributeStr.split(","); + + for (let i = 0; i < attributes.length; i++) { + const keyVal = attributes[i].split("="); + + if (keyVal.length === 2) { + const str = keyVal[1].trim(); + + switch (keyVal[0].trim()) { + case "alt": + alt = str; + break; + + case "width": + width = sizeData(str); + break; + + case "height": + height = sizeData(str); + break; + + case "totalheight": + totalheight = sizeData(str); + break; + + default: + throw new ParseError("Invalid key: '" + keyVal[0] + "' in \\includegraphics."); + } + } + } + } + + const src = assertNodeType(args[0], "url").url; + + if (alt === "") { + // No alt given. Use the file name. Strip away the path. + alt = src; + alt = alt.replace(/^.*[\\/]/, ''); + alt = alt.substring(0, alt.lastIndexOf('.')); + } + + if (!parser.settings.isTrusted({ + command: "\\includegraphics", + url: src + })) { + return parser.formatUnsupportedCmd("\\includegraphics"); + } + + return { + type: "includegraphics", + mode: parser.mode, + alt: alt, + width: width, + height: height, + totalheight: totalheight, + src: src + }; + }, + htmlBuilder: (group, options) => { + const height = calculateSize(group.height, options); + let depth = 0; + + if (group.totalheight.number > 0) { + depth = calculateSize(group.totalheight, options) - height; + depth = Number(depth.toFixed(2)); + } + + let width = 0; + + if (group.width.number > 0) { + width = calculateSize(group.width, options); + } + + const style = { + height: height + depth + "em" + }; + + if (width > 0) { + style.width = width + "em"; + } + + if (depth > 0) { + style.verticalAlign = -depth + "em"; + } + + const node = new Img(group.src, group.alt, style); + node.height = height; + node.depth = depth; + return node; + }, + mathmlBuilder: (group, options) => { + const node = new mathMLTree.MathNode("mglyph", []); + node.setAttribute("alt", group.alt); + const height = calculateSize(group.height, options); + let depth = 0; + + if (group.totalheight.number > 0) { + depth = calculateSize(group.totalheight, options) - height; + depth = depth.toFixed(2); + node.setAttribute("valign", "-" + depth + "em"); + } + + node.setAttribute("height", height + depth + "em"); + + if (group.width.number > 0) { + const width = calculateSize(group.width, options); + node.setAttribute("width", width + "em"); + } + + node.setAttribute("src", group.src); + return node; + } +}); + +// Horizontal spacing commands + +defineFunction({ + type: "kern", + names: ["\\kern", "\\mkern", "\\hskip", "\\mskip"], + props: { + numArgs: 1, + argTypes: ["size"], + allowedInText: true + }, + + handler(_ref, args) { + let parser = _ref.parser, + funcName = _ref.funcName; + const size = assertNodeType(args[0], "size"); + + if (parser.settings.strict) { + const mathFunction = funcName[1] === 'm'; // \mkern, \mskip + + const muUnit = size.value.unit === 'mu'; + + if (mathFunction) { + if (!muUnit) { + parser.settings.reportNonstrict("mathVsTextUnits", `LaTeX's ${funcName} supports only mu units, ` + `not ${size.value.unit} units`); + } + + if (parser.mode !== "math") { + parser.settings.reportNonstrict("mathVsTextUnits", `LaTeX's ${funcName} works only in math mode`); + } + } else { + // !mathFunction + if (muUnit) { + parser.settings.reportNonstrict("mathVsTextUnits", `LaTeX's ${funcName} doesn't support mu units`); + } + } + } + + return { + type: "kern", + mode: parser.mode, + dimension: size.value + }; + }, + + htmlBuilder(group, options) { + return buildCommon.makeGlue(group.dimension, options); + }, + + mathmlBuilder(group, options) { + const dimension = calculateSize(group.dimension, options); + return new mathMLTree.SpaceNode(dimension); + } + +}); + +// Horizontal overlap functions +defineFunction({ + type: "lap", + names: ["\\mathllap", "\\mathrlap", "\\mathclap"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: (_ref, args) => { + let parser = _ref.parser, + funcName = _ref.funcName; + const body = args[0]; + return { + type: "lap", + mode: parser.mode, + alignment: funcName.slice(5), + body + }; + }, + htmlBuilder: (group, options) => { + // mathllap, mathrlap, mathclap + let inner; + + if (group.alignment === "clap") { + // ref: https://www.math.lsu.edu/~aperlis/publications/mathclap/ + inner = buildCommon.makeSpan([], [buildGroup(group.body, options)]); // wrap, since CSS will center a .clap > .inner > span + + inner = buildCommon.makeSpan(["inner"], [inner], options); + } else { + inner = buildCommon.makeSpan(["inner"], [buildGroup(group.body, options)]); + } + + const fix = buildCommon.makeSpan(["fix"], []); + let node = buildCommon.makeSpan([group.alignment], [inner, fix], options); // At this point, we have correctly set horizontal alignment of the + // two items involved in the lap. + // Next, use a strut to set the height of the HTML bounding box. + // Otherwise, a tall argument may be misplaced. + + const strut = buildCommon.makeSpan(["strut"]); + strut.style.height = node.height + node.depth + "em"; + strut.style.verticalAlign = -node.depth + "em"; + node.children.unshift(strut); // Next, prevent vertical misplacement when next to something tall. + + node = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: node + }] + }, options); // Get the horizontal spacing correct relative to adjacent items. + + return buildCommon.makeSpan(["mord"], [node], options); + }, + mathmlBuilder: (group, options) => { + // mathllap, mathrlap, mathclap + const node = new mathMLTree.MathNode("mpadded", [buildGroup$1(group.body, options)]); + + if (group.alignment !== "rlap") { + const offset = group.alignment === "llap" ? "-1" : "-0.5"; + node.setAttribute("lspace", offset + "width"); + } + + node.setAttribute("width", "0px"); + return node; + } +}); + +defineFunction({ + type: "styling", + names: ["\\(", "$"], + props: { + numArgs: 0, + allowedInText: true, + allowedInMath: false + }, + + handler(_ref, args) { + let funcName = _ref.funcName, + parser = _ref.parser; + const outerMode = parser.mode; + parser.switchMode("math"); + const close = funcName === "\\(" ? "\\)" : "$"; + const body = parser.parseExpression(false, close); + parser.expect(close); + parser.switchMode(outerMode); + return { + type: "styling", + mode: parser.mode, + style: "text", + body + }; + } + +}); // Check for extra closing math delimiters + +defineFunction({ + type: "text", + // Doesn't matter what this is. + names: ["\\)", "\\]"], + props: { + numArgs: 0, + allowedInText: true, + allowedInMath: false + }, + + handler(context, args) { + throw new ParseError(`Mismatched ${context.funcName}`); + } + +}); + +const chooseMathStyle = (group, options) => { + switch (options.style.size) { + case Style$1.DISPLAY.size: + return group.display; + + case Style$1.TEXT.size: + return group.text; + + case Style$1.SCRIPT.size: + return group.script; + + case Style$1.SCRIPTSCRIPT.size: + return group.scriptscript; + + default: + return group.text; + } +}; + +defineFunction({ + type: "mathchoice", + names: ["\\mathchoice"], + props: { + numArgs: 4 + }, + handler: (_ref, args) => { + let parser = _ref.parser; + return { + type: "mathchoice", + mode: parser.mode, + display: ordargument(args[0]), + text: ordargument(args[1]), + script: ordargument(args[2]), + scriptscript: ordargument(args[3]) + }; + }, + htmlBuilder: (group, options) => { + const body = chooseMathStyle(group, options); + const elements = buildExpression(body, options, false); + return buildCommon.makeFragment(elements); + }, + mathmlBuilder: (group, options) => { + const body = chooseMathStyle(group, options); + return buildExpressionRow(body, options); + } +}); + +// For an operator with limits, assemble the base, sup, and sub into a span. +const assembleSupSub = (base, supGroup, subGroup, options, style, slant, baseShift) => { + // IE 8 clips \int if it is in a display: inline-block. We wrap it + // in a new span so it is an inline, and works. + base = buildCommon.makeSpan([], [base]); + let sub; + let sup; // We manually have to handle the superscripts and subscripts. This, + // aside from the kern calculations, is copied from supsub. + + if (supGroup) { + const elem = buildGroup(supGroup, options.havingStyle(style.sup()), options); + sup = { + elem, + kern: Math.max(options.fontMetrics().bigOpSpacing1, options.fontMetrics().bigOpSpacing3 - elem.depth) + }; + } + + if (subGroup) { + const elem = buildGroup(subGroup, options.havingStyle(style.sub()), options); + sub = { + elem, + kern: Math.max(options.fontMetrics().bigOpSpacing2, options.fontMetrics().bigOpSpacing4 - elem.height) + }; + } // Build the final group as a vlist of the possible subscript, base, + // and possible superscript. + + + let finalGroup; + + if (sup && sub) { + const bottom = options.fontMetrics().bigOpSpacing5 + sub.elem.height + sub.elem.depth + sub.kern + base.depth + baseShift; + finalGroup = buildCommon.makeVList({ + positionType: "bottom", + positionData: bottom, + children: [{ + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }, { + type: "elem", + elem: sub.elem, + marginLeft: -slant + "em" + }, { + type: "kern", + size: sub.kern + }, { + type: "elem", + elem: base + }, { + type: "kern", + size: sup.kern + }, { + type: "elem", + elem: sup.elem, + marginLeft: slant + "em" + }, { + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }] + }, options); + } else if (sub) { + const top = base.height - baseShift; // Shift the limits by the slant of the symbol. Note + // that we are supposed to shift the limits by 1/2 of the slant, + // but since we are centering the limits adding a full slant of + // margin will shift by 1/2 that. + + finalGroup = buildCommon.makeVList({ + positionType: "top", + positionData: top, + children: [{ + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }, { + type: "elem", + elem: sub.elem, + marginLeft: -slant + "em" + }, { + type: "kern", + size: sub.kern + }, { + type: "elem", + elem: base + }] + }, options); + } else if (sup) { + const bottom = base.depth + baseShift; + finalGroup = buildCommon.makeVList({ + positionType: "bottom", + positionData: bottom, + children: [{ + type: "elem", + elem: base + }, { + type: "kern", + size: sup.kern + }, { + type: "elem", + elem: sup.elem, + marginLeft: slant + "em" + }, { + type: "kern", + size: options.fontMetrics().bigOpSpacing5 + }] + }, options); + } else { + // This case probably shouldn't occur (this would mean the + // supsub was sending us a group with no superscript or + // subscript) but be safe. + return base; + } + + return buildCommon.makeSpan(["mop", "op-limits"], [finalGroup], options); +}; + +// Limits, symbols +// Most operators have a large successor symbol, but these don't. +const noSuccessor = ["\\smallint"]; // NOTE: Unlike most `htmlBuilder`s, this one handles not only "op", but also +// "supsub" since some of them (like \int) can affect super/subscripting. + +const htmlBuilder$8 = (grp, options) => { + // Operators are handled in the TeXbook pg. 443-444, rule 13(a). + let supGroup; + let subGroup; + let hasLimits = false; + let group; + const supSub = checkNodeType(grp, "supsub"); + + if (supSub) { + // If we have limits, supsub will pass us its group to handle. Pull + // out the superscript and subscript and set the group to the op in + // its base. + supGroup = supSub.sup; + subGroup = supSub.sub; + group = assertNodeType(supSub.base, "op"); + hasLimits = true; + } else { + group = assertNodeType(grp, "op"); + } + + const style = options.style; + let large = false; + + if (style.size === Style$1.DISPLAY.size && group.symbol && !utils.contains(noSuccessor, group.name)) { + // Most symbol operators get larger in displaystyle (rule 13) + large = true; + } + + let base; + + if (group.symbol) { + // If this is a symbol, create the symbol. + const fontName = large ? "Size2-Regular" : "Size1-Regular"; + let stash = ""; + + if (group.name === "\\oiint" || group.name === "\\oiiint") { + // No font glyphs yet, so use a glyph w/o the oval. + // TODO: When font glyphs are available, delete this code. + stash = group.name.substr(1); // $FlowFixMe + + group.name = stash === "oiint" ? "\\iint" : "\\iiint"; + } + + base = buildCommon.makeSymbol(group.name, fontName, "math", options, ["mop", "op-symbol", large ? "large-op" : "small-op"]); + + if (stash.length > 0) { + // We're in \oiint or \oiiint. Overlay the oval. + // TODO: When font glyphs are available, delete this code. + const italic = base.italic; + const oval = buildCommon.staticSvg(stash + "Size" + (large ? "2" : "1"), options); + base = buildCommon.makeVList({ + positionType: "individualShift", + children: [{ + type: "elem", + elem: base, + shift: 0 + }, { + type: "elem", + elem: oval, + shift: large ? 0.08 : 0 + }] + }, options); // $FlowFixMe + + group.name = "\\" + stash; + base.classes.unshift("mop"); // $FlowFixMe + + base.italic = italic; + } + } else if (group.body) { + // If this is a list, compose that list. + const inner = buildExpression(group.body, options, true); + + if (inner.length === 1 && inner[0] instanceof SymbolNode) { + base = inner[0]; + base.classes[0] = "mop"; // replace old mclass + } else { + base = buildCommon.makeSpan(["mop"], buildCommon.tryCombineChars(inner), options); + } + } else { + // Otherwise, this is a text operator. Build the text from the + // operator's name. + // TODO(emily): Add a space in the middle of some of these + // operators, like \limsup + const output = []; + + for (let i = 1; i < group.name.length; i++) { + output.push(buildCommon.mathsym(group.name[i], group.mode, options)); + } + + base = buildCommon.makeSpan(["mop"], output, options); + } // If content of op is a single symbol, shift it vertically. + + + let baseShift = 0; + let slant = 0; + + if ((base instanceof SymbolNode || group.name === "\\oiint" || group.name === "\\oiiint") && !group.suppressBaseShift) { + // We suppress the shift of the base of \overset and \underset. Otherwise, + // shift the symbol so its center lies on the axis (rule 13). It + // appears that our fonts have the centers of the symbols already + // almost on the axis, so these numbers are very small. Note we + // don't actually apply this here, but instead it is used either in + // the vlist creation or separately when there are no limits. + baseShift = (base.height - base.depth) / 2 - options.fontMetrics().axisHeight; // The slant of the symbol is just its italic correction. + // $FlowFixMe + + slant = base.italic; + } + + if (hasLimits) { + return assembleSupSub(base, supGroup, subGroup, options, style, slant, baseShift); + } else { + if (baseShift) { + base.style.position = "relative"; + base.style.top = baseShift + "em"; + } + + return base; + } +}; + +const mathmlBuilder$8 = (group, options) => { + let node; + + if (group.symbol) { + // This is a symbol. Just add the symbol. + node = new MathNode("mo", [makeText(group.name, group.mode)]); + + if (utils.contains(noSuccessor, group.name)) { + node.setAttribute("largeop", "false"); + } + } else if (group.body) { + // This is an operator with children. Add them. + node = new MathNode("mo", buildExpression$1(group.body, options)); + } else { + // This is a text operator. Add all of the characters from the + // operator's name. + node = new MathNode("mi", [new TextNode(group.name.slice(1))]); // Append an . + // ref: https://www.w3.org/TR/REC-MathML/chap3_2.html#sec3.2.4 + + const operator = new MathNode("mo", [makeText("\u2061", "text")]); + + if (group.parentIsSupSub) { + node = new MathNode("mo", [node, operator]); + } else { + node = newDocumentFragment([node, operator]); + } + } + + return node; +}; + +const singleCharBigOps = { + "\u220F": "\\prod", + "\u2210": "\\coprod", + "\u2211": "\\sum", + "\u22c0": "\\bigwedge", + "\u22c1": "\\bigvee", + "\u22c2": "\\bigcap", + "\u22c3": "\\bigcup", + "\u2a00": "\\bigodot", + "\u2a01": "\\bigoplus", + "\u2a02": "\\bigotimes", + "\u2a04": "\\biguplus", + "\u2a06": "\\bigsqcup" +}; +defineFunction({ + type: "op", + names: ["\\coprod", "\\bigvee", "\\bigwedge", "\\biguplus", "\\bigcap", "\\bigcup", "\\intop", "\\prod", "\\sum", "\\bigotimes", "\\bigoplus", "\\bigodot", "\\bigsqcup", "\\smallint", "\u220F", "\u2210", "\u2211", "\u22c0", "\u22c1", "\u22c2", "\u22c3", "\u2a00", "\u2a01", "\u2a02", "\u2a04", "\u2a06"], + props: { + numArgs: 0 + }, + handler: (_ref, args) => { + let parser = _ref.parser, + funcName = _ref.funcName; + let fName = funcName; + + if (fName.length === 1) { + fName = singleCharBigOps[fName]; + } + + return { + type: "op", + mode: parser.mode, + limits: true, + parentIsSupSub: false, + symbol: true, + name: fName + }; + }, + htmlBuilder: htmlBuilder$8, + mathmlBuilder: mathmlBuilder$8 +}); // Note: calling defineFunction with a type that's already been defined only +// works because the same htmlBuilder and mathmlBuilder are being used. + +defineFunction({ + type: "op", + names: ["\\mathop"], + props: { + numArgs: 1 + }, + handler: (_ref2, args) => { + let parser = _ref2.parser; + const body = args[0]; + return { + type: "op", + mode: parser.mode, + limits: false, + parentIsSupSub: false, + symbol: false, + body: ordargument(body) + }; + }, + htmlBuilder: htmlBuilder$8, + mathmlBuilder: mathmlBuilder$8 +}); // There are 2 flags for operators; whether they produce limits in +// displaystyle, and whether they are symbols and should grow in +// displaystyle. These four groups cover the four possible choices. + +const singleCharIntegrals = { + "\u222b": "\\int", + "\u222c": "\\iint", + "\u222d": "\\iiint", + "\u222e": "\\oint", + "\u222f": "\\oiint", + "\u2230": "\\oiiint" +}; // No limits, not symbols + +defineFunction({ + type: "op", + names: ["\\arcsin", "\\arccos", "\\arctan", "\\arctg", "\\arcctg", "\\arg", "\\ch", "\\cos", "\\cosec", "\\cosh", "\\cot", "\\cotg", "\\coth", "\\csc", "\\ctg", "\\cth", "\\deg", "\\dim", "\\exp", "\\hom", "\\ker", "\\lg", "\\ln", "\\log", "\\sec", "\\sin", "\\sinh", "\\sh", "\\tan", "\\tanh", "\\tg", "\\th"], + props: { + numArgs: 0 + }, + + handler(_ref3) { + let parser = _ref3.parser, + funcName = _ref3.funcName; + return { + type: "op", + mode: parser.mode, + limits: false, + parentIsSupSub: false, + symbol: false, + name: funcName + }; + }, + + htmlBuilder: htmlBuilder$8, + mathmlBuilder: mathmlBuilder$8 +}); // Limits, not symbols + +defineFunction({ + type: "op", + names: ["\\det", "\\gcd", "\\inf", "\\lim", "\\max", "\\min", "\\Pr", "\\sup"], + props: { + numArgs: 0 + }, + + handler(_ref4) { + let parser = _ref4.parser, + funcName = _ref4.funcName; + return { + type: "op", + mode: parser.mode, + limits: true, + parentIsSupSub: false, + symbol: false, + name: funcName + }; + }, + + htmlBuilder: htmlBuilder$8, + mathmlBuilder: mathmlBuilder$8 +}); // No limits, symbols + +defineFunction({ + type: "op", + names: ["\\int", "\\iint", "\\iiint", "\\oint", "\\oiint", "\\oiiint", "\u222b", "\u222c", "\u222d", "\u222e", "\u222f", "\u2230"], + props: { + numArgs: 0 + }, + + handler(_ref5) { + let parser = _ref5.parser, + funcName = _ref5.funcName; + let fName = funcName; + + if (fName.length === 1) { + fName = singleCharIntegrals[fName]; + } + + return { + type: "op", + mode: parser.mode, + limits: false, + parentIsSupSub: false, + symbol: true, + name: fName + }; + }, + + htmlBuilder: htmlBuilder$8, + mathmlBuilder: mathmlBuilder$8 +}); + +// NOTE: Unlike most `htmlBuilder`s, this one handles not only +// "operatorname", but also "supsub" since \operatorname* can +const htmlBuilder$9 = (grp, options) => { + // Operators are handled in the TeXbook pg. 443-444, rule 13(a). + let supGroup; + let subGroup; + let hasLimits = false; + let group; + const supSub = checkNodeType(grp, "supsub"); + + if (supSub) { + // If we have limits, supsub will pass us its group to handle. Pull + // out the superscript and subscript and set the group to the op in + // its base. + supGroup = supSub.sup; + subGroup = supSub.sub; + group = assertNodeType(supSub.base, "operatorname"); + hasLimits = true; + } else { + group = assertNodeType(grp, "operatorname"); + } + + let base; + + if (group.body.length > 0) { + const body = group.body.map(child => { + // $FlowFixMe: Check if the node has a string `text` property. + const childText = child.text; + + if (typeof childText === "string") { + return { + type: "textord", + mode: child.mode, + text: childText + }; + } else { + return child; + } + }); // Consolidate function names into symbol characters. + + const expression = buildExpression(body, options.withFont("mathrm"), true); + + for (let i = 0; i < expression.length; i++) { + const child = expression[i]; + + if (child instanceof SymbolNode) { + // Per amsopn package, + // change minus to hyphen and \ast to asterisk + child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*"); + } + } + + base = buildCommon.makeSpan(["mop"], expression, options); + } else { + base = buildCommon.makeSpan(["mop"], [], options); + } + + if (hasLimits) { + return assembleSupSub(base, supGroup, subGroup, options, options.style, 0, 0); + } else { + return base; + } +}; + +const mathmlBuilder$9 = (group, options) => { + // The steps taken here are similar to the html version. + let expression = buildExpression$1(group.body, options.withFont("mathrm")); // Is expression a string or has it something like a fraction? + + let isAllString = true; // default + + for (let i = 0; i < expression.length; i++) { + const node = expression[i]; + + if (node instanceof mathMLTree.SpaceNode) ; else if (node instanceof mathMLTree.MathNode) { + switch (node.type) { + case "mi": + case "mn": + case "ms": + case "mspace": + case "mtext": + break; + // Do nothing yet. + + case "mo": + { + const child = node.children[0]; + + if (node.children.length === 1 && child instanceof mathMLTree.TextNode) { + child.text = child.text.replace(/\u2212/, "-").replace(/\u2217/, "*"); + } else { + isAllString = false; + } + + break; + } + + default: + isAllString = false; + } + } else { + isAllString = false; + } + } + + if (isAllString) { + // Write a single TextNode instead of multiple nested tags. + const word = expression.map(node => node.toText()).join(""); + expression = [new mathMLTree.TextNode(word)]; + } + + const identifier = new mathMLTree.MathNode("mi", expression); + identifier.setAttribute("mathvariant", "normal"); // \u2061 is the same as ⁡ + // ref: https://www.w3schools.com/charsets/ref_html_entities_a.asp + + const operator = new mathMLTree.MathNode("mo", [makeText("\u2061", "text")]); + + if (group.parentIsSupSub) { + return new mathMLTree.MathNode("mo", [identifier, operator]); + } else { + return mathMLTree.newDocumentFragment([identifier, operator]); + } +}; // \operatorname +// amsopn.dtx: \mathop{#1\kern\z@\operator@font#3}\newmcodes@ + + +defineFunction({ + type: "operatorname", + names: ["\\operatorname", "\\operatorname*"], + props: { + numArgs: 1 + }, + handler: (_ref, args) => { + let parser = _ref.parser, + funcName = _ref.funcName; + const body = args[0]; + return { + type: "operatorname", + mode: parser.mode, + body: ordargument(body), + alwaysHandleSupSub: funcName === "\\operatorname*", + limits: false, + parentIsSupSub: false + }; + }, + htmlBuilder: htmlBuilder$9, + mathmlBuilder: mathmlBuilder$9 +}); + +defineFunctionBuilders({ + type: "ordgroup", + + htmlBuilder(group, options) { + if (group.semisimple) { + return buildCommon.makeFragment(buildExpression(group.body, options, false)); + } + + return buildCommon.makeSpan(["mord"], buildExpression(group.body, options, true), options); + }, + + mathmlBuilder(group, options) { + return buildExpressionRow(group.body, options, true); + } + +}); + +defineFunction({ + type: "overline", + names: ["\\overline"], + props: { + numArgs: 1 + }, + + handler(_ref, args) { + let parser = _ref.parser; + const body = args[0]; + return { + type: "overline", + mode: parser.mode, + body + }; + }, + + htmlBuilder(group, options) { + // Overlines are handled in the TeXbook pg 443, Rule 9. + // Build the inner group in the cramped style. + const innerGroup = buildGroup(group.body, options.havingCrampedStyle()); // Create the line above the body + + const line = buildCommon.makeLineSpan("overline-line", options); // Generate the vlist, with the appropriate kerns + + const defaultRuleThickness = options.fontMetrics().defaultRuleThickness; + const vlist = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: innerGroup + }, { + type: "kern", + size: 3 * defaultRuleThickness + }, { + type: "elem", + elem: line + }, { + type: "kern", + size: defaultRuleThickness + }] + }, options); + return buildCommon.makeSpan(["mord", "overline"], [vlist], options); + }, + + mathmlBuilder(group, options) { + const operator = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode("\u203e")]); + operator.setAttribute("stretchy", "true"); + const node = new mathMLTree.MathNode("mover", [buildGroup$1(group.body, options), operator]); + node.setAttribute("accent", "true"); + return node; + } + +}); + +defineFunction({ + type: "phantom", + names: ["\\phantom"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: (_ref, args) => { + let parser = _ref.parser; + const body = args[0]; + return { + type: "phantom", + mode: parser.mode, + body: ordargument(body) + }; + }, + htmlBuilder: (group, options) => { + const elements = buildExpression(group.body, options.withPhantom(), false); // \phantom isn't supposed to affect the elements it contains. + // See "color" for more details. + + return buildCommon.makeFragment(elements); + }, + mathmlBuilder: (group, options) => { + const inner = buildExpression$1(group.body, options); + return new mathMLTree.MathNode("mphantom", inner); + } +}); +defineFunction({ + type: "hphantom", + names: ["\\hphantom"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: (_ref2, args) => { + let parser = _ref2.parser; + const body = args[0]; + return { + type: "hphantom", + mode: parser.mode, + body + }; + }, + htmlBuilder: (group, options) => { + let node = buildCommon.makeSpan([], [buildGroup(group.body, options.withPhantom())]); + node.height = 0; + node.depth = 0; + + if (node.children) { + for (let i = 0; i < node.children.length; i++) { + node.children[i].height = 0; + node.children[i].depth = 0; + } + } // See smash for comment re: use of makeVList + + + node = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: node + }] + }, options); // For spacing, TeX treats \smash as a math group (same spacing as ord). + + return buildCommon.makeSpan(["mord"], [node], options); + }, + mathmlBuilder: (group, options) => { + const inner = buildExpression$1(ordargument(group.body), options); + const phantom = new mathMLTree.MathNode("mphantom", inner); + const node = new mathMLTree.MathNode("mpadded", [phantom]); + node.setAttribute("height", "0px"); + node.setAttribute("depth", "0px"); + return node; + } +}); +defineFunction({ + type: "vphantom", + names: ["\\vphantom"], + props: { + numArgs: 1, + allowedInText: true + }, + handler: (_ref3, args) => { + let parser = _ref3.parser; + const body = args[0]; + return { + type: "vphantom", + mode: parser.mode, + body + }; + }, + htmlBuilder: (group, options) => { + const inner = buildCommon.makeSpan(["inner"], [buildGroup(group.body, options.withPhantom())]); + const fix = buildCommon.makeSpan(["fix"], []); + return buildCommon.makeSpan(["mord", "rlap"], [inner, fix], options); + }, + mathmlBuilder: (group, options) => { + const inner = buildExpression$1(ordargument(group.body), options); + const phantom = new mathMLTree.MathNode("mphantom", inner); + const node = new mathMLTree.MathNode("mpadded", [phantom]); + node.setAttribute("width", "0px"); + return node; + } +}); + +defineFunction({ + type: "raisebox", + names: ["\\raisebox"], + props: { + numArgs: 2, + argTypes: ["size", "hbox"], + allowedInText: true + }, + + handler(_ref, args) { + let parser = _ref.parser; + const amount = assertNodeType(args[0], "size").value; + const body = args[1]; + return { + type: "raisebox", + mode: parser.mode, + dy: amount, + body + }; + }, + + htmlBuilder(group, options) { + const body = buildGroup(group.body, options); + const dy = calculateSize(group.dy, options); + return buildCommon.makeVList({ + positionType: "shift", + positionData: -dy, + children: [{ + type: "elem", + elem: body + }] + }, options); + }, + + mathmlBuilder(group, options) { + const node = new mathMLTree.MathNode("mpadded", [buildGroup$1(group.body, options)]); + const dy = group.dy.number + group.dy.unit; + node.setAttribute("voffset", dy); + return node; + } + +}); + +defineFunction({ + type: "rule", + names: ["\\rule"], + props: { + numArgs: 2, + numOptionalArgs: 1, + argTypes: ["size", "size", "size"] + }, + + handler(_ref, args, optArgs) { + let parser = _ref.parser; + const shift = optArgs[0]; + const width = assertNodeType(args[0], "size"); + const height = assertNodeType(args[1], "size"); + return { + type: "rule", + mode: parser.mode, + shift: shift && assertNodeType(shift, "size").value, + width: width.value, + height: height.value + }; + }, + + htmlBuilder(group, options) { + // Make an empty span for the rule + const rule = buildCommon.makeSpan(["mord", "rule"], [], options); // Calculate the shift, width, and height of the rule, and account for units + + const width = calculateSize(group.width, options); + const height = calculateSize(group.height, options); + const shift = group.shift ? calculateSize(group.shift, options) : 0; // Style the rule to the right size + + rule.style.borderRightWidth = width + "em"; + rule.style.borderTopWidth = height + "em"; + rule.style.bottom = shift + "em"; // Record the height and width + + rule.width = width; + rule.height = height + shift; + rule.depth = -shift; // Font size is the number large enough that the browser will + // reserve at least `absHeight` space above the baseline. + // The 1.125 factor was empirically determined + + rule.maxFontSize = height * 1.125 * options.sizeMultiplier; + return rule; + }, + + mathmlBuilder(group, options) { + const width = calculateSize(group.width, options); + const height = calculateSize(group.height, options); + const shift = group.shift ? calculateSize(group.shift, options) : 0; + const color = options.color && options.getColor() || "black"; + const rule = new mathMLTree.MathNode("mspace"); + rule.setAttribute("mathbackground", color); + rule.setAttribute("width", width + "em"); + rule.setAttribute("height", height + "em"); + const wrapper = new mathMLTree.MathNode("mpadded", [rule]); + + if (shift >= 0) { + wrapper.setAttribute("height", "+" + shift + "em"); + } else { + wrapper.setAttribute("height", shift + "em"); + wrapper.setAttribute("depth", "+" + -shift + "em"); + } + + wrapper.setAttribute("voffset", shift + "em"); + return wrapper; + } + +}); + +function sizingGroup(value, options, baseOptions) { + const inner = buildExpression(value, options, false); + const multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; // Add size-resetting classes to the inner list and set maxFontSize + // manually. Handle nested size changes. + + for (let i = 0; i < inner.length; i++) { + const pos = inner[i].classes.indexOf("sizing"); + + if (pos < 0) { + Array.prototype.push.apply(inner[i].classes, options.sizingClasses(baseOptions)); + } else if (inner[i].classes[pos + 1] === "reset-size" + options.size) { + // This is a nested size change: e.g., inner[i] is the "b" in + // `\Huge a \small b`. Override the old size (the `reset-` class) + // but not the new size. + inner[i].classes[pos + 1] = "reset-size" + baseOptions.size; + } + + inner[i].height *= multiplier; + inner[i].depth *= multiplier; + } + + return buildCommon.makeFragment(inner); +} +const sizeFuncs = ["\\tiny", "\\sixptsize", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge"]; +const htmlBuilder$a = (group, options) => { + // Handle sizing operators like \Huge. Real TeX doesn't actually allow + // these functions inside of math expressions, so we do some special + // handling. + const newOptions = options.havingSize(group.size); + return sizingGroup(group.body, newOptions, options); +}; +defineFunction({ + type: "sizing", + names: sizeFuncs, + props: { + numArgs: 0, + allowedInText: true + }, + handler: (_ref, args) => { + let breakOnTokenText = _ref.breakOnTokenText, + funcName = _ref.funcName, + parser = _ref.parser; + const body = parser.parseExpression(false, breakOnTokenText); + return { + type: "sizing", + mode: parser.mode, + // Figure out what size to use based on the list of functions above + size: sizeFuncs.indexOf(funcName) + 1, + body + }; + }, + htmlBuilder: htmlBuilder$a, + mathmlBuilder: (group, options) => { + const newOptions = options.havingSize(group.size); + const inner = buildExpression$1(group.body, newOptions); + const node = new mathMLTree.MathNode("mstyle", inner); // TODO(emily): This doesn't produce the correct size for nested size + // changes, because we don't keep state of what style we're currently + // in, so we can't reset the size to normal before changing it. Now + // that we're passing an options parameter we should be able to fix + // this. + + node.setAttribute("mathsize", newOptions.sizeMultiplier + "em"); + return node; + } +}); + +// smash, with optional [tb], as in AMS +defineFunction({ + type: "smash", + names: ["\\smash"], + props: { + numArgs: 1, + numOptionalArgs: 1, + allowedInText: true + }, + handler: (_ref, args, optArgs) => { + let parser = _ref.parser; + let smashHeight = false; + let smashDepth = false; + const tbArg = optArgs[0] && assertNodeType(optArgs[0], "ordgroup"); + + if (tbArg) { + // Optional [tb] argument is engaged. + // ref: amsmath: \renewcommand{\smash}[1][tb]{% + // def\mb@t{\ht}\def\mb@b{\dp}\def\mb@tb{\ht\z@\z@\dp}% + let letter = ""; + + for (let i = 0; i < tbArg.body.length; ++i) { + const node = tbArg.body[i]; // $FlowFixMe: Not every node type has a `text` property. + + letter = node.text; + + if (letter === "t") { + smashHeight = true; + } else if (letter === "b") { + smashDepth = true; + } else { + smashHeight = false; + smashDepth = false; + break; + } + } + } else { + smashHeight = true; + smashDepth = true; + } + + const body = args[0]; + return { + type: "smash", + mode: parser.mode, + body, + smashHeight, + smashDepth + }; + }, + htmlBuilder: (group, options) => { + const node = buildCommon.makeSpan([], [buildGroup(group.body, options)]); + + if (!group.smashHeight && !group.smashDepth) { + return node; + } + + if (group.smashHeight) { + node.height = 0; // In order to influence makeVList, we have to reset the children. + + if (node.children) { + for (let i = 0; i < node.children.length; i++) { + node.children[i].height = 0; + } + } + } + + if (group.smashDepth) { + node.depth = 0; + + if (node.children) { + for (let i = 0; i < node.children.length; i++) { + node.children[i].depth = 0; + } + } + } // At this point, we've reset the TeX-like height and depth values. + // But the span still has an HTML line height. + // makeVList applies "display: table-cell", which prevents the browser + // from acting on that line height. So we'll call makeVList now. + + + const smashedNode = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: node + }] + }, options); // For spacing, TeX treats \hphantom as a math group (same spacing as ord). + + return buildCommon.makeSpan(["mord"], [smashedNode], options); + }, + mathmlBuilder: (group, options) => { + const node = new mathMLTree.MathNode("mpadded", [buildGroup$1(group.body, options)]); + + if (group.smashHeight) { + node.setAttribute("height", "0px"); + } + + if (group.smashDepth) { + node.setAttribute("depth", "0px"); + } + + return node; + } +}); + +defineFunction({ + type: "sqrt", + names: ["\\sqrt"], + props: { + numArgs: 1, + numOptionalArgs: 1 + }, + + handler(_ref, args, optArgs) { + let parser = _ref.parser; + const index = optArgs[0]; + const body = args[0]; + return { + type: "sqrt", + mode: parser.mode, + body, + index + }; + }, + + htmlBuilder(group, options) { + // Square roots are handled in the TeXbook pg. 443, Rule 11. + // First, we do the same steps as in overline to build the inner group + // and line + let inner = buildGroup(group.body, options.havingCrampedStyle()); + + if (inner.height === 0) { + // Render a small surd. + inner.height = options.fontMetrics().xHeight; + } // Some groups can return document fragments. Handle those by wrapping + // them in a span. + + + inner = buildCommon.wrapFragment(inner, options); // Calculate the minimum size for the \surd delimiter + + const metrics = options.fontMetrics(); + const theta = metrics.defaultRuleThickness; + let phi = theta; + + if (options.style.id < Style$1.TEXT.id) { + phi = options.fontMetrics().xHeight; + } // Calculate the clearance between the body and line + + + let lineClearance = theta + phi / 4; + const minDelimiterHeight = inner.height + inner.depth + lineClearance + theta; // Create a sqrt SVG of the required minimum size + + const _delimiter$sqrtImage = delimiter.sqrtImage(minDelimiterHeight, options), + img = _delimiter$sqrtImage.span, + ruleWidth = _delimiter$sqrtImage.ruleWidth, + advanceWidth = _delimiter$sqrtImage.advanceWidth; + + const delimDepth = img.height - ruleWidth; // Adjust the clearance based on the delimiter size + + if (delimDepth > inner.height + inner.depth + lineClearance) { + lineClearance = (lineClearance + delimDepth - inner.height - inner.depth) / 2; + } // Shift the sqrt image + + + const imgShift = img.height - inner.height - lineClearance - ruleWidth; + inner.style.paddingLeft = advanceWidth + "em"; // Overlay the image and the argument. + + const body = buildCommon.makeVList({ + positionType: "firstBaseline", + children: [{ + type: "elem", + elem: inner, + wrapperClasses: ["svg-align"] + }, { + type: "kern", + size: -(inner.height + imgShift) + }, { + type: "elem", + elem: img + }, { + type: "kern", + size: ruleWidth + }] + }, options); + + if (!group.index) { + return buildCommon.makeSpan(["mord", "sqrt"], [body], options); + } else { + // Handle the optional root index + // The index is always in scriptscript style + const newOptions = options.havingStyle(Style$1.SCRIPTSCRIPT); + const rootm = buildGroup(group.index, newOptions, options); // The amount the index is shifted by. This is taken from the TeX + // source, in the definition of `\r@@t`. + + const toShift = 0.6 * (body.height - body.depth); // Build a VList with the superscript shifted up correctly + + const rootVList = buildCommon.makeVList({ + positionType: "shift", + positionData: -toShift, + children: [{ + type: "elem", + elem: rootm + }] + }, options); // Add a class surrounding it so we can add on the appropriate + // kerning + + const rootVListWrap = buildCommon.makeSpan(["root"], [rootVList]); + return buildCommon.makeSpan(["mord", "sqrt"], [rootVListWrap, body], options); + } + }, + + mathmlBuilder(group, options) { + const body = group.body, + index = group.index; + return index ? new mathMLTree.MathNode("mroot", [buildGroup$1(body, options), buildGroup$1(index, options)]) : new mathMLTree.MathNode("msqrt", [buildGroup$1(body, options)]); + } + +}); + +const styleMap$1 = { + "display": Style$1.DISPLAY, + "text": Style$1.TEXT, + "script": Style$1.SCRIPT, + "scriptscript": Style$1.SCRIPTSCRIPT +}; +defineFunction({ + type: "styling", + names: ["\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle"], + props: { + numArgs: 0, + allowedInText: true + }, + + handler(_ref, args) { + let breakOnTokenText = _ref.breakOnTokenText, + funcName = _ref.funcName, + parser = _ref.parser; + // parse out the implicit body + const body = parser.parseExpression(true, breakOnTokenText); // TODO: Refactor to avoid duplicating styleMap in multiple places (e.g. + // here and in buildHTML and de-dupe the enumeration of all the styles). + // $FlowFixMe: The names above exactly match the styles. + + const style = funcName.slice(1, funcName.length - 5); + return { + type: "styling", + mode: parser.mode, + // Figure out what style to use by pulling out the style from + // the function name + style, + body + }; + }, + + htmlBuilder(group, options) { + // Style changes are handled in the TeXbook on pg. 442, Rule 3. + const newStyle = styleMap$1[group.style]; + const newOptions = options.havingStyle(newStyle).withFont(''); + return sizingGroup(group.body, newOptions, options); + }, + + mathmlBuilder(group, options) { + // Figure out what style we're changing to. + const newStyle = styleMap$1[group.style]; + const newOptions = options.havingStyle(newStyle); + const inner = buildExpression$1(group.body, newOptions); + const node = new mathMLTree.MathNode("mstyle", inner); + const styleAttributes = { + "display": ["0", "true"], + "text": ["0", "false"], + "script": ["1", "false"], + "scriptscript": ["2", "false"] + }; + const attr = styleAttributes[group.style]; + node.setAttribute("scriptlevel", attr[0]); + node.setAttribute("displaystyle", attr[1]); + return node; + } + +}); + +/** + * Sometimes, groups perform special rules when they have superscripts or + * subscripts attached to them. This function lets the `supsub` group know that + * Sometimes, groups perform special rules when they have superscripts or + * its inner element should handle the superscripts and subscripts instead of + * handling them itself. + */ +const htmlBuilderDelegate = function htmlBuilderDelegate(group, options) { + const base = group.base; + + if (!base) { + return null; + } else if (base.type === "op") { + // Operators handle supsubs differently when they have limits + // (e.g. `\displaystyle\sum_2^3`) + const delegate = base.limits && (options.style.size === Style$1.DISPLAY.size || base.alwaysHandleSupSub); + return delegate ? htmlBuilder$8 : null; + } else if (base.type === "operatorname") { + const delegate = base.alwaysHandleSupSub && (options.style.size === Style$1.DISPLAY.size || base.limits); + return delegate ? htmlBuilder$9 : null; + } else if (base.type === "accent") { + return utils.isCharacterBox(base.base) ? htmlBuilder : null; + } else if (base.type === "horizBrace") { + const isSup = !group.sub; + return isSup === base.isOver ? htmlBuilder$7 : null; + } else { + return null; + } +}; // Super scripts and subscripts, whose precise placement can depend on other +// functions that precede them. + + +defineFunctionBuilders({ + type: "supsub", + + htmlBuilder(group, options) { + // Superscript and subscripts are handled in the TeXbook on page + // 445-446, rules 18(a-f). + // Here is where we defer to the inner group if it should handle + // superscripts and subscripts itself. + const builderDelegate = htmlBuilderDelegate(group, options); + + if (builderDelegate) { + return builderDelegate(group, options); + } + + const valueBase = group.base, + valueSup = group.sup, + valueSub = group.sub; + const base = buildGroup(valueBase, options); + let supm; + let subm; + const metrics = options.fontMetrics(); // Rule 18a + + let supShift = 0; + let subShift = 0; + const isCharacterBox = valueBase && utils.isCharacterBox(valueBase); + + if (valueSup) { + const newOptions = options.havingStyle(options.style.sup()); + supm = buildGroup(valueSup, newOptions, options); + + if (!isCharacterBox) { + supShift = base.height - newOptions.fontMetrics().supDrop * newOptions.sizeMultiplier / options.sizeMultiplier; + } + } + + if (valueSub) { + const newOptions = options.havingStyle(options.style.sub()); + subm = buildGroup(valueSub, newOptions, options); + + if (!isCharacterBox) { + subShift = base.depth + newOptions.fontMetrics().subDrop * newOptions.sizeMultiplier / options.sizeMultiplier; + } + } // Rule 18c + + + let minSupShift; + + if (options.style === Style$1.DISPLAY) { + minSupShift = metrics.sup1; + } else if (options.style.cramped) { + minSupShift = metrics.sup3; + } else { + minSupShift = metrics.sup2; + } // scriptspace is a font-size-independent size, so scale it + // appropriately for use as the marginRight. + + + const multiplier = options.sizeMultiplier; + const marginRight = 0.5 / metrics.ptPerEm / multiplier + "em"; + let marginLeft = null; + + if (subm) { + // Subscripts shouldn't be shifted by the base's italic correction. + // Account for that by shifting the subscript back the appropriate + // amount. Note we only do this when the base is a single symbol. + const isOiint = group.base && group.base.type === "op" && group.base.name && (group.base.name === "\\oiint" || group.base.name === "\\oiiint"); + + if (base instanceof SymbolNode || isOiint) { + // $FlowFixMe + marginLeft = -base.italic + "em"; + } + } + + let supsub; + + if (supm && subm) { + supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight); + subShift = Math.max(subShift, metrics.sub2); + const ruleWidth = metrics.defaultRuleThickness; // Rule 18e + + const maxWidth = 4 * ruleWidth; + + if (supShift - supm.depth - (subm.height - subShift) < maxWidth) { + subShift = maxWidth - (supShift - supm.depth) + subm.height; + const psi = 0.8 * metrics.xHeight - (supShift - supm.depth); + + if (psi > 0) { + supShift += psi; + subShift -= psi; + } + } + + const vlistElem = [{ + type: "elem", + elem: subm, + shift: subShift, + marginRight, + marginLeft + }, { + type: "elem", + elem: supm, + shift: -supShift, + marginRight + }]; + supsub = buildCommon.makeVList({ + positionType: "individualShift", + children: vlistElem + }, options); + } else if (subm) { + // Rule 18b + subShift = Math.max(subShift, metrics.sub1, subm.height - 0.8 * metrics.xHeight); + const vlistElem = [{ + type: "elem", + elem: subm, + marginLeft, + marginRight + }]; + supsub = buildCommon.makeVList({ + positionType: "shift", + positionData: subShift, + children: vlistElem + }, options); + } else if (supm) { + // Rule 18c, d + supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight); + supsub = buildCommon.makeVList({ + positionType: "shift", + positionData: -supShift, + children: [{ + type: "elem", + elem: supm, + marginRight + }] + }, options); + } else { + throw new Error("supsub must have either sup or sub."); + } // Wrap the supsub vlist in a span.msupsub to reset text-align. + + + const mclass = getTypeOfDomTree(base, "right") || "mord"; + return buildCommon.makeSpan([mclass], [base, buildCommon.makeSpan(["msupsub"], [supsub])], options); + }, + + mathmlBuilder(group, options) { + // Is the inner group a relevant horizonal brace? + let isBrace = false; + let isOver; + let isSup; + const horizBrace = checkNodeType(group.base, "horizBrace"); + + if (horizBrace) { + isSup = !!group.sup; + + if (isSup === horizBrace.isOver) { + isBrace = true; + isOver = horizBrace.isOver; + } + } + + if (group.base && (group.base.type === "op" || group.base.type === "operatorname")) { + group.base.parentIsSupSub = true; + } + + const children = [buildGroup$1(group.base, options)]; + + if (group.sub) { + children.push(buildGroup$1(group.sub, options)); + } + + if (group.sup) { + children.push(buildGroup$1(group.sup, options)); + } + + let nodeType; + + if (isBrace) { + nodeType = isOver ? "mover" : "munder"; + } else if (!group.sub) { + const base = group.base; + + if (base && base.type === "op" && base.limits && (options.style === Style$1.DISPLAY || base.alwaysHandleSupSub)) { + nodeType = "mover"; + } else if (base && base.type === "operatorname" && base.alwaysHandleSupSub && (base.limits || options.style === Style$1.DISPLAY)) { + nodeType = "mover"; + } else { + nodeType = "msup"; + } + } else if (!group.sup) { + const base = group.base; + + if (base && base.type === "op" && base.limits && (options.style === Style$1.DISPLAY || base.alwaysHandleSupSub)) { + nodeType = "munder"; + } else if (base && base.type === "operatorname" && base.alwaysHandleSupSub && (base.limits || options.style === Style$1.DISPLAY)) { + nodeType = "munder"; + } else { + nodeType = "msub"; + } + } else { + const base = group.base; + + if (base && base.type === "op" && base.limits && options.style === Style$1.DISPLAY) { + nodeType = "munderover"; + } else if (base && base.type === "operatorname" && base.alwaysHandleSupSub && (options.style === Style$1.DISPLAY || base.limits)) { + nodeType = "munderover"; + } else { + nodeType = "msubsup"; + } + } + + const node = new mathMLTree.MathNode(nodeType, children); + return node; + } + +}); + +defineFunctionBuilders({ + type: "atom", + + htmlBuilder(group, options) { + return buildCommon.mathsym(group.text, group.mode, options, ["m" + group.family]); + }, + + mathmlBuilder(group, options) { + const node = new mathMLTree.MathNode("mo", [makeText(group.text, group.mode)]); + + if (group.family === "bin") { + const variant = getVariant(group, options); + + if (variant === "bold-italic") { + node.setAttribute("mathvariant", variant); + } + } else if (group.family === "punct") { + node.setAttribute("separator", "true"); + } else if (group.family === "open" || group.family === "close") { + // Delims built here should not stretch vertically. + // See delimsizing.js for stretchy delims. + node.setAttribute("stretchy", "false"); + } + + return node; + } + +}); + +// "mathord" and "textord" ParseNodes created in Parser.js from symbol Groups in +const defaultVariant = { + "mi": "italic", + "mn": "normal", + "mtext": "normal" +}; +defineFunctionBuilders({ + type: "mathord", + + htmlBuilder(group, options) { + return buildCommon.makeOrd(group, options, "mathord"); + }, + + mathmlBuilder(group, options) { + const node = new mathMLTree.MathNode("mi", [makeText(group.text, group.mode, options)]); + const variant = getVariant(group, options) || "italic"; + + if (variant !== defaultVariant[node.type]) { + node.setAttribute("mathvariant", variant); + } + + return node; + } + +}); +defineFunctionBuilders({ + type: "textord", + + htmlBuilder(group, options) { + return buildCommon.makeOrd(group, options, "textord"); + }, + + mathmlBuilder(group, options) { + const text = makeText(group.text, group.mode, options); + const variant = getVariant(group, options) || "normal"; + let node; + + if (group.mode === 'text') { + node = new mathMLTree.MathNode("mtext", [text]); + } else if (/[0-9]/.test(group.text)) { + // TODO(kevinb) merge adjacent nodes + // do it as a post processing step + node = new mathMLTree.MathNode("mn", [text]); + } else if (group.text === "\\prime") { + node = new mathMLTree.MathNode("mo", [text]); + } else { + node = new mathMLTree.MathNode("mi", [text]); + } + + if (variant !== defaultVariant[node.type]) { + node.setAttribute("mathvariant", variant); + } + + return node; + } + +}); + +const cssSpace = { + "\\nobreak": "nobreak", + "\\allowbreak": "allowbreak" +}; // A lookup table to determine whether a spacing function/symbol should be +// treated like a regular space character. If a symbol or command is a key +// in this table, then it should be a regular space character. Furthermore, +// the associated value may have a `className` specifying an extra CSS class +// to add to the created `span`. + +const regularSpace = { + " ": {}, + "\\ ": {}, + "~": { + className: "nobreak" + }, + "\\space": {}, + "\\nobreakspace": { + className: "nobreak" + } +}; // ParseNode<"spacing"> created in Parser.js from the "spacing" symbol Groups in +// src/symbols.js. + +defineFunctionBuilders({ + type: "spacing", + + htmlBuilder(group, options) { + if (regularSpace.hasOwnProperty(group.text)) { + const className = regularSpace[group.text].className || ""; // Spaces are generated by adding an actual space. Each of these + // things has an entry in the symbols table, so these will be turned + // into appropriate outputs. + + if (group.mode === "text") { + const ord = buildCommon.makeOrd(group, options, "textord"); + ord.classes.push(className); + return ord; + } else { + return buildCommon.makeSpan(["mspace", className], [buildCommon.mathsym(group.text, group.mode, options)], options); + } + } else if (cssSpace.hasOwnProperty(group.text)) { + // Spaces based on just a CSS class. + return buildCommon.makeSpan(["mspace", cssSpace[group.text]], [], options); + } else { + throw new ParseError(`Unknown type of space "${group.text}"`); + } + }, + + mathmlBuilder(group, options) { + let node; + + if (regularSpace.hasOwnProperty(group.text)) { + node = new mathMLTree.MathNode("mtext", [new mathMLTree.TextNode("\u00a0")]); + } else if (cssSpace.hasOwnProperty(group.text)) { + // CSS-based MathML spaces (\nobreak, \allowbreak) are ignored + return new mathMLTree.MathNode("mspace"); + } else { + throw new ParseError(`Unknown type of space "${group.text}"`); + } + + return node; + } + +}); + +const pad = () => { + const padNode = new mathMLTree.MathNode("mtd", []); + padNode.setAttribute("width", "50%"); + return padNode; +}; + +defineFunctionBuilders({ + type: "tag", + + mathmlBuilder(group, options) { + const table = new mathMLTree.MathNode("mtable", [new mathMLTree.MathNode("mtr", [pad(), new mathMLTree.MathNode("mtd", [buildExpressionRow(group.body, options)]), pad(), new mathMLTree.MathNode("mtd", [buildExpressionRow(group.tag, options)])])]); + table.setAttribute("width", "100%"); + return table; // TODO: Left-aligned tags. + // Currently, the group and options passed here do not contain + // enough info to set tag alignment. `leqno` is in Settings but it is + // not passed to Options. On the HTML side, leqno is + // set by a CSS class applied in buildTree.js. That would have worked + // in MathML if browsers supported . Since they don't, we + // need to rewrite the way this function is called. + } + +}); + +const textFontFamilies = { + "\\text": undefined, + "\\textrm": "textrm", + "\\textsf": "textsf", + "\\texttt": "texttt", + "\\textnormal": "textrm" +}; +const textFontWeights = { + "\\textbf": "textbf", + "\\textmd": "textmd" +}; +const textFontShapes = { + "\\textit": "textit", + "\\textup": "textup" +}; + +const optionsWithFont = (group, options) => { + const font = group.font; // Checks if the argument is a font family or a font style. + + if (!font) { + return options; + } else if (textFontFamilies[font]) { + return options.withTextFontFamily(textFontFamilies[font]); + } else if (textFontWeights[font]) { + return options.withTextFontWeight(textFontWeights[font]); + } else { + return options.withTextFontShape(textFontShapes[font]); + } +}; + +defineFunction({ + type: "text", + names: [// Font families + "\\text", "\\textrm", "\\textsf", "\\texttt", "\\textnormal", // Font weights + "\\textbf", "\\textmd", // Font Shapes + "\\textit", "\\textup"], + props: { + numArgs: 1, + argTypes: ["text"], + greediness: 2, + allowedInText: true + }, + + handler(_ref, args) { + let parser = _ref.parser, + funcName = _ref.funcName; + const body = args[0]; + return { + type: "text", + mode: parser.mode, + body: ordargument(body), + font: funcName + }; + }, + + htmlBuilder(group, options) { + const newOptions = optionsWithFont(group, options); + const inner = buildExpression(group.body, newOptions, true); + return buildCommon.makeSpan(["mord", "text"], buildCommon.tryCombineChars(inner), newOptions); + }, + + mathmlBuilder(group, options) { + const newOptions = optionsWithFont(group, options); + return buildExpressionRow(group.body, newOptions); + } + +}); + +defineFunction({ + type: "underline", + names: ["\\underline"], + props: { + numArgs: 1, + allowedInText: true + }, + + handler(_ref, args) { + let parser = _ref.parser; + return { + type: "underline", + mode: parser.mode, + body: args[0] + }; + }, + + htmlBuilder(group, options) { + // Underlines are handled in the TeXbook pg 443, Rule 10. + // Build the inner group. + const innerGroup = buildGroup(group.body, options); // Create the line to go below the body + + const line = buildCommon.makeLineSpan("underline-line", options); // Generate the vlist, with the appropriate kerns + + const defaultRuleThickness = options.fontMetrics().defaultRuleThickness; + const vlist = buildCommon.makeVList({ + positionType: "top", + positionData: innerGroup.height, + children: [{ + type: "kern", + size: defaultRuleThickness + }, { + type: "elem", + elem: line + }, { + type: "kern", + size: 3 * defaultRuleThickness + }, { + type: "elem", + elem: innerGroup + }] + }, options); + return buildCommon.makeSpan(["mord", "underline"], [vlist], options); + }, + + mathmlBuilder(group, options) { + const operator = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode("\u203e")]); + operator.setAttribute("stretchy", "true"); + const node = new mathMLTree.MathNode("munder", [buildGroup$1(group.body, options), operator]); + node.setAttribute("accentunder", "true"); + return node; + } + +}); + +defineFunction({ + type: "verb", + names: ["\\verb"], + props: { + numArgs: 0, + allowedInText: true + }, + + handler(context, args, optArgs) { + // \verb and \verb* are dealt with directly in Parser.js. + // If we end up here, it's because of a failure to match the two delimiters + // in the regex in Lexer.js. LaTeX raises the following error when \verb is + // terminated by end of line (or file). + throw new ParseError("\\verb ended by end of line instead of matching delimiter"); + }, + + htmlBuilder(group, options) { + const text = makeVerb(group); + const body = []; // \verb enters text mode and therefore is sized like \textstyle + + const newOptions = options.havingStyle(options.style.text()); + + for (let i = 0; i < text.length; i++) { + let c = text[i]; + + if (c === '~') { + c = '\\textasciitilde'; + } + + body.push(buildCommon.makeSymbol(c, "Typewriter-Regular", group.mode, newOptions, ["mord", "texttt"])); + } + + return buildCommon.makeSpan(["mord", "text"].concat(newOptions.sizingClasses(options)), buildCommon.tryCombineChars(body), newOptions); + }, + + mathmlBuilder(group, options) { + const text = new mathMLTree.TextNode(makeVerb(group)); + const node = new mathMLTree.MathNode("mtext", [text]); + node.setAttribute("mathvariant", "monospace"); + return node; + } + +}); +/** + * Converts verb group into body string. + * + * \verb* replaces each space with an open box \u2423 + * \verb replaces each space with a no-break space \xA0 + */ + +const makeVerb = group => group.body.replace(/ /g, group.star ? '\u2423' : '\xA0'); + +/** Include this to ensure that all functions are defined. */ +const functions = _functions; + +/** + * The Lexer class handles tokenizing the input in various ways. Since our + * parser expects us to be able to backtrack, the lexer allows lexing from any + * given starting point. + * + * Its main exposed function is the `lex` function, which takes a position to + * lex from and a type of token to lex. It defers to the appropriate `_innerLex` + * function. + * + * The various `_innerLex` functions perform the actual lexing of different + * kinds. + */ + +/* The following tokenRegex + * - matches typical whitespace (but not NBSP etc.) using its first group + * - does not match any control character \x00-\x1f except whitespace + * - does not match a bare backslash + * - matches any ASCII character except those just mentioned + * - does not match the BMP private use area \uE000-\uF8FF + * - does not match bare surrogate code units + * - matches any BMP character except for those just described + * - matches any valid Unicode surrogate pair + * - matches a backslash followed by one or more letters + * - matches a backslash followed by any BMP character, including newline + * Just because the Lexer matches something doesn't mean it's valid input: + * If there is no matching function or symbol definition, the Parser will + * still reject the input. + */ +const spaceRegexString = "[ \r\n\t]"; +const controlWordRegexString = "\\\\[a-zA-Z@]+"; +const controlSymbolRegexString = "\\\\[^\uD800-\uDFFF]"; +const controlWordWhitespaceRegexString = `${controlWordRegexString}${spaceRegexString}*`; +const controlWordWhitespaceRegex = new RegExp(`^(${controlWordRegexString})${spaceRegexString}*$`); +const combiningDiacriticalMarkString = "[\u0300-\u036f]"; +const combiningDiacriticalMarksEndRegex = new RegExp(`${combiningDiacriticalMarkString}+$`); +const tokenRegexString = `(${spaceRegexString}+)|` + // whitespace +"([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]" + // single codepoint +`${combiningDiacriticalMarkString}*` + // ...plus accents +"|[\uD800-\uDBFF][\uDC00-\uDFFF]" + // surrogate pair +`${combiningDiacriticalMarkString}*` + // ...plus accents +"|\\\\verb\\*([^]).*?\\3" + // \verb* +"|\\\\verb([^*a-zA-Z]).*?\\4" + // \verb unstarred +"|\\\\operatorname\\*" + // \operatorname* +`|${controlWordWhitespaceRegexString}` + // \macroName + spaces +`|${controlSymbolRegexString})`; // \\, \', etc. + +/** Main Lexer class */ + +class Lexer { + // category codes, only supports comment characters (14) for now + constructor(input, settings) { + this.input = void 0; + this.settings = void 0; + this.tokenRegex = void 0; + this.catcodes = void 0; + // Separate accents from characters + this.input = input; + this.settings = settings; + this.tokenRegex = new RegExp(tokenRegexString, 'g'); + this.catcodes = { + "%": 14 // comment character + + }; + } + + setCatcode(char, code) { + this.catcodes[char] = code; + } + /** + * This function lexes a single token. + */ + + + lex() { + const input = this.input; + const pos = this.tokenRegex.lastIndex; + + if (pos === input.length) { + return new Token("EOF", new SourceLocation(this, pos, pos)); + } + + const match = this.tokenRegex.exec(input); + + if (match === null || match.index !== pos) { + throw new ParseError(`Unexpected character: '${input[pos]}'`, new Token(input[pos], new SourceLocation(this, pos, pos + 1))); + } + + let text = match[2] || " "; + + if (this.catcodes[text] === 14) { + // comment character + const nlIndex = input.indexOf('\n', this.tokenRegex.lastIndex); + + if (nlIndex === -1) { + this.tokenRegex.lastIndex = input.length; // EOF + + this.settings.reportNonstrict("commentAtEnd", "% comment has no terminating newline; LaTeX would " + "fail because of commenting the end of math mode (e.g. $)"); + } else { + this.tokenRegex.lastIndex = nlIndex + 1; + } + + return this.lex(); + } // Trim any trailing whitespace from control word match + + + const controlMatch = text.match(controlWordWhitespaceRegex); + + if (controlMatch) { + text = controlMatch[1]; + } + + return new Token(text, new SourceLocation(this, pos, this.tokenRegex.lastIndex)); + } + +} + +/** + * A `Namespace` refers to a space of nameable things like macros or lengths, + * which can be `set` either globally or local to a nested group, using an + * undo stack similar to how TeX implements this functionality. + * Performance-wise, `get` and local `set` take constant time, while global + * `set` takes time proportional to the depth of group nesting. + */ +class Namespace { + /** + * Both arguments are optional. The first argument is an object of + * built-in mappings which never change. The second argument is an object + * of initial (global-level) mappings, which will constantly change + * according to any global/top-level `set`s done. + */ + constructor(builtins, globalMacros) { + if (builtins === void 0) { + builtins = {}; + } + + if (globalMacros === void 0) { + globalMacros = {}; + } + + this.current = void 0; + this.builtins = void 0; + this.undefStack = void 0; + this.current = globalMacros; + this.builtins = builtins; + this.undefStack = []; + } + /** + * Start a new nested group, affecting future local `set`s. + */ + + + beginGroup() { + this.undefStack.push({}); + } + /** + * End current nested group, restoring values before the group began. + */ + + + endGroup() { + if (this.undefStack.length === 0) { + throw new ParseError("Unbalanced namespace destruction: attempt " + "to pop global namespace; please report this as a bug"); + } + + const undefs = this.undefStack.pop(); + + for (const undef in undefs) { + if (undefs.hasOwnProperty(undef)) { + if (undefs[undef] === undefined) { + delete this.current[undef]; + } else { + this.current[undef] = undefs[undef]; + } + } + } + } + /** + * Detect whether `name` has a definition. Equivalent to + * `get(name) != null`. + */ + + + has(name) { + return this.current.hasOwnProperty(name) || this.builtins.hasOwnProperty(name); + } + /** + * Get the current value of a name, or `undefined` if there is no value. + * + * Note: Do not use `if (namespace.get(...))` to detect whether a macro + * is defined, as the definition may be the empty string which evaluates + * to `false` in JavaScript. Use `if (namespace.get(...) != null)` or + * `if (namespace.has(...))`. + */ + + + get(name) { + if (this.current.hasOwnProperty(name)) { + return this.current[name]; + } else { + return this.builtins[name]; + } + } + /** + * Set the current value of a name, and optionally set it globally too. + * Local set() sets the current value and (when appropriate) adds an undo + * operation to the undo stack. Global set() may change the undo + * operation at every level, so takes time linear in their number. + */ + + + set(name, value, global) { + if (global === void 0) { + global = false; + } + + if (global) { + // Global set is equivalent to setting in all groups. Simulate this + // by destroying any undos currently scheduled for this name, + // and adding an undo with the *new* value (in case it later gets + // locally reset within this environment). + for (let i = 0; i < this.undefStack.length; i++) { + delete this.undefStack[i][name]; + } + + if (this.undefStack.length > 0) { + this.undefStack[this.undefStack.length - 1][name] = value; + } + } else { + // Undo this set at end of this group (possibly to `undefined`), + // unless an undo is already in place, in which case that older + // value is the correct one. + const top = this.undefStack[this.undefStack.length - 1]; + + if (top && !top.hasOwnProperty(name)) { + top[name] = this.current[name]; + } + } + + this.current[name] = value; + } + +} + +/** + * Predefined macros for KaTeX. + * This can be used to define some commands in terms of others. + */ +const builtinMacros = {}; + +function defineMacro(name, body) { + builtinMacros[name] = body; +} ////////////////////////////////////////////////////////////////////// +// macro tools +// LaTeX's \@firstoftwo{#1}{#2} expands to #1, skipping #2 +// TeX source: \long\def\@firstoftwo#1#2{#1} + +defineMacro("\\@firstoftwo", function (context) { + const args = context.consumeArgs(2); + return { + tokens: args[0], + numArgs: 0 + }; +}); // LaTeX's \@secondoftwo{#1}{#2} expands to #2, skipping #1 +// TeX source: \long\def\@secondoftwo#1#2{#2} + +defineMacro("\\@secondoftwo", function (context) { + const args = context.consumeArgs(2); + return { + tokens: args[1], + numArgs: 0 + }; +}); // LaTeX's \@ifnextchar{#1}{#2}{#3} looks ahead to the next (unexpanded) +// symbol. If it matches #1, then the macro expands to #2; otherwise, #3. +// Note, however, that it does not consume the next symbol in either case. + +defineMacro("\\@ifnextchar", function (context) { + const args = context.consumeArgs(3); // symbol, if, else + + const nextToken = context.future(); + + if (args[0].length === 1 && args[0][0].text === nextToken.text) { + return { + tokens: args[1], + numArgs: 0 + }; + } else { + return { + tokens: args[2], + numArgs: 0 + }; + } +}); // LaTeX's \@ifstar{#1}{#2} looks ahead to the next (unexpanded) symbol. +// If it is `*`, then it consumes the symbol, and the macro expands to #1; +// otherwise, the macro expands to #2 (without consuming the symbol). +// TeX source: \def\@ifstar#1{\@ifnextchar *{\@firstoftwo{#1}}} + +defineMacro("\\@ifstar", "\\@ifnextchar *{\\@firstoftwo{#1}}"); // LaTeX's \TextOrMath{#1}{#2} expands to #1 in text mode, #2 in math mode + +defineMacro("\\TextOrMath", function (context) { + const args = context.consumeArgs(2); + + if (context.mode === 'text') { + return { + tokens: args[0], + numArgs: 0 + }; + } else { + return { + tokens: args[1], + numArgs: 0 + }; + } +}); // Lookup table for parsing numbers in base 8 through 16 + +const digitToNumber = { + "0": 0, + "1": 1, + "2": 2, + "3": 3, + "4": 4, + "5": 5, + "6": 6, + "7": 7, + "8": 8, + "9": 9, + "a": 10, + "A": 10, + "b": 11, + "B": 11, + "c": 12, + "C": 12, + "d": 13, + "D": 13, + "e": 14, + "E": 14, + "f": 15, + "F": 15 +}; // TeX \char makes a literal character (catcode 12) using the following forms: +// (see The TeXBook, p. 43) +// \char123 -- decimal +// \char'123 -- octal +// \char"123 -- hex +// \char`x -- character that can be written (i.e. isn't active) +// \char`\x -- character that cannot be written (e.g. %) +// These all refer to characters from the font, so we turn them into special +// calls to a function \@char dealt with in the Parser. + +defineMacro("\\char", function (context) { + let token = context.popToken(); + let base; + let number = ''; + + if (token.text === "'") { + base = 8; + token = context.popToken(); + } else if (token.text === '"') { + base = 16; + token = context.popToken(); + } else if (token.text === "`") { + token = context.popToken(); + + if (token.text[0] === "\\") { + number = token.text.charCodeAt(1); + } else if (token.text === "EOF") { + throw new ParseError("\\char` missing argument"); + } else { + number = token.text.charCodeAt(0); + } + } else { + base = 10; + } + + if (base) { + // Parse a number in the given base, starting with first `token`. + number = digitToNumber[token.text]; + + if (number == null || number >= base) { + throw new ParseError(`Invalid base-${base} digit ${token.text}`); + } + + let digit; + + while ((digit = digitToNumber[context.future().text]) != null && digit < base) { + number *= base; + number += digit; + context.popToken(); + } + } + + return `\\@char{${number}}`; +}); // Basic support for macro definitions: +// \def\macro{expansion} +// \def\macro#1{expansion} +// \def\macro#1#2{expansion} +// \def\macro#1#2#3#4#5#6#7#8#9{expansion} +// Also the \gdef and \global\def equivalents + +const def = (context, global) => { + let arg = context.consumeArgs(1)[0]; + + if (arg.length !== 1) { + throw new ParseError("\\gdef's first argument must be a macro name"); + } + + const name = arg[0].text; // Count argument specifiers, and check they are in the order #1 #2 ... + + let numArgs = 0; + arg = context.consumeArgs(1)[0]; + + while (arg.length === 1 && arg[0].text === "#") { + arg = context.consumeArgs(1)[0]; + + if (arg.length !== 1) { + throw new ParseError(`Invalid argument number length "${arg.length}"`); + } + + if (!/^[1-9]$/.test(arg[0].text)) { + throw new ParseError(`Invalid argument number "${arg[0].text}"`); + } + + numArgs++; + + if (parseInt(arg[0].text) !== numArgs) { + throw new ParseError(`Argument number "${arg[0].text}" out of order`); + } + + arg = context.consumeArgs(1)[0]; + } // Final arg is the expansion of the macro + + + context.macros.set(name, { + tokens: arg, + numArgs + }, global); + return ''; +}; + +defineMacro("\\gdef", context => def(context, true)); +defineMacro("\\def", context => def(context, false)); +defineMacro("\\global", context => { + const next = context.consumeArgs(1)[0]; + + if (next.length !== 1) { + throw new ParseError("Invalid command after \\global"); + } + + const command = next[0].text; // TODO: Should expand command + + if (command === "\\def") { + // \global\def is equivalent to \gdef + return def(context, true); + } else { + throw new ParseError(`Invalid command '${command}' after \\global`); + } +}); // \newcommand{\macro}[args]{definition} +// \renewcommand{\macro}[args]{definition} +// TODO: Optional arguments: \newcommand{\macro}[args][default]{definition} + +const newcommand = (context, existsOK, nonexistsOK) => { + let arg = context.consumeArgs(1)[0]; + + if (arg.length !== 1) { + throw new ParseError("\\newcommand's first argument must be a macro name"); + } + + const name = arg[0].text; + const exists = context.isDefined(name); + + if (exists && !existsOK) { + throw new ParseError(`\\newcommand{${name}} attempting to redefine ` + `${name}; use \\renewcommand`); + } + + if (!exists && !nonexistsOK) { + throw new ParseError(`\\renewcommand{${name}} when command ${name} ` + `does not yet exist; use \\newcommand`); + } + + let numArgs = 0; + arg = context.consumeArgs(1)[0]; + + if (arg.length === 1 && arg[0].text === "[") { + let argText = ''; + let token = context.expandNextToken(); + + while (token.text !== "]" && token.text !== "EOF") { + // TODO: Should properly expand arg, e.g., ignore {}s + argText += token.text; + token = context.expandNextToken(); + } + + if (!argText.match(/^\s*[0-9]+\s*$/)) { + throw new ParseError(`Invalid number of arguments: ${argText}`); + } + + numArgs = parseInt(argText); + arg = context.consumeArgs(1)[0]; + } // Final arg is the expansion of the macro + + + context.macros.set(name, { + tokens: arg, + numArgs + }); + return ''; +}; + +defineMacro("\\newcommand", context => newcommand(context, false, true)); +defineMacro("\\renewcommand", context => newcommand(context, true, false)); +defineMacro("\\providecommand", context => newcommand(context, true, true)); ////////////////////////////////////////////////////////////////////// +// Grouping +// \let\bgroup={ \let\egroup=} + +defineMacro("\\bgroup", "{"); +defineMacro("\\egroup", "}"); // Symbols from latex.ltx: +// \def\lq{`} +// \def\rq{'} +// \def \aa {\r a} +// \def \AA {\r A} + +defineMacro("\\lq", "`"); +defineMacro("\\rq", "'"); +defineMacro("\\aa", "\\r a"); +defineMacro("\\AA", "\\r A"); // Copyright (C) and registered (R) symbols. Use raw symbol in MathML. +// \DeclareTextCommandDefault{\textcopyright}{\textcircled{c}} +// \DeclareTextCommandDefault{\textregistered}{\textcircled{% +// \check@mathfonts\fontsize\sf@size\z@\math@fontsfalse\selectfont R}} +// \DeclareRobustCommand{\copyright}{% +// \ifmmode{\nfss@text{\textcopyright}}\else\textcopyright\fi} + +defineMacro("\\textcopyright", "\\html@mathml{\\textcircled{c}}{\\char`©}"); +defineMacro("\\copyright", "\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}"); +defineMacro("\\textregistered", "\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`®}"); // Characters omitted from Unicode range 1D400–1D7FF + +defineMacro("\u212C", "\\mathscr{B}"); // script + +defineMacro("\u2130", "\\mathscr{E}"); +defineMacro("\u2131", "\\mathscr{F}"); +defineMacro("\u210B", "\\mathscr{H}"); +defineMacro("\u2110", "\\mathscr{I}"); +defineMacro("\u2112", "\\mathscr{L}"); +defineMacro("\u2133", "\\mathscr{M}"); +defineMacro("\u211B", "\\mathscr{R}"); +defineMacro("\u212D", "\\mathfrak{C}"); // Fraktur + +defineMacro("\u210C", "\\mathfrak{H}"); +defineMacro("\u2128", "\\mathfrak{Z}"); // Define \Bbbk with a macro that works in both HTML and MathML. + +defineMacro("\\Bbbk", "\\Bbb{k}"); // Unicode middle dot +// The KaTeX fonts do not contain U+00B7. Instead, \cdotp displays +// the dot at U+22C5 and gives it punct spacing. + +defineMacro("\u00b7", "\\cdotp"); // \llap and \rlap render their contents in text mode + +defineMacro("\\llap", "\\mathllap{\\textrm{#1}}"); +defineMacro("\\rlap", "\\mathrlap{\\textrm{#1}}"); +defineMacro("\\clap", "\\mathclap{\\textrm{#1}}"); // \not is defined by base/fontmath.ltx via +// \DeclareMathSymbol{\not}{\mathrel}{symbols}{"36} +// It's thus treated like a \mathrel, but defined by a symbol that has zero +// width but extends to the right. We use \rlap to get that spacing. +// For MathML we write U+0338 here. buildMathML.js will then do the overlay. + +defineMacro("\\not", '\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}'); // Negated symbols from base/fontmath.ltx: +// \def\neq{\not=} \let\ne=\neq +// \DeclareRobustCommand +// \notin{\mathrel{\m@th\mathpalette\c@ncel\in}} +// \def\c@ncel#1#2{\m@th\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}} + +defineMacro("\\neq", "\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`≠}}"); +defineMacro("\\ne", "\\neq"); +defineMacro("\u2260", "\\neq"); +defineMacro("\\notin", "\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}" + "{\\mathrel{\\char`∉}}"); +defineMacro("\u2209", "\\notin"); // Unicode stacked relations + +defineMacro("\u2258", "\\html@mathml{" + "\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}" + "}{\\mathrel{\\char`\u2258}}"); +defineMacro("\u2259", "\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}"); +defineMacro("\u225A", "\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225A}}"); +defineMacro("\u225B", "\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}" + "{\\mathrel{\\char`\u225B}}"); +defineMacro("\u225D", "\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}" + "{\\mathrel{\\char`\u225D}}"); +defineMacro("\u225E", "\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}" + "{\\mathrel{\\char`\u225E}}"); +defineMacro("\u225F", "\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225F}}"); // Misc Unicode + +defineMacro("\u27C2", "\\perp"); +defineMacro("\u203C", "\\mathclose{!\\mkern-0.8mu!}"); +defineMacro("\u220C", "\\notni"); +defineMacro("\u231C", "\\ulcorner"); +defineMacro("\u231D", "\\urcorner"); +defineMacro("\u231E", "\\llcorner"); +defineMacro("\u231F", "\\lrcorner"); +defineMacro("\u00A9", "\\copyright"); +defineMacro("\u00AE", "\\textregistered"); +defineMacro("\uFE0F", "\\textregistered"); ////////////////////////////////////////////////////////////////////// +// LaTeX_2ε +// \vdots{\vbox{\baselineskip4\p@ \lineskiplimit\z@ +// \kern6\p@\hbox{.}\hbox{.}\hbox{.}}} +// We'll call \varvdots, which gets a glyph from symbols.js. +// The zero-width rule gets us an equivalent to the vertical 6pt kern. + +defineMacro("\\vdots", "\\mathord{\\varvdots\\rule{0pt}{15pt}}"); +defineMacro("\u22ee", "\\vdots"); ////////////////////////////////////////////////////////////////////// +// amsmath.sty +// http://mirrors.concertpass.com/tex-archive/macros/latex/required/amsmath/amsmath.pdf +// Italic Greek capital letters. AMS defines these with \DeclareMathSymbol, +// but they are equivalent to \mathit{\Letter}. + +defineMacro("\\varGamma", "\\mathit{\\Gamma}"); +defineMacro("\\varDelta", "\\mathit{\\Delta}"); +defineMacro("\\varTheta", "\\mathit{\\Theta}"); +defineMacro("\\varLambda", "\\mathit{\\Lambda}"); +defineMacro("\\varXi", "\\mathit{\\Xi}"); +defineMacro("\\varPi", "\\mathit{\\Pi}"); +defineMacro("\\varSigma", "\\mathit{\\Sigma}"); +defineMacro("\\varUpsilon", "\\mathit{\\Upsilon}"); +defineMacro("\\varPhi", "\\mathit{\\Phi}"); +defineMacro("\\varPsi", "\\mathit{\\Psi}"); +defineMacro("\\varOmega", "\\mathit{\\Omega}"); //\newcommand{\substack}[1]{\subarray{c}#1\endsubarray} + +defineMacro("\\substack", "\\begin{subarray}{c}#1\\end{subarray}"); // \renewcommand{\colon}{\nobreak\mskip2mu\mathpunct{}\nonscript +// \mkern-\thinmuskip{:}\mskip6muplus1mu\relax} + +defineMacro("\\colon", "\\nobreak\\mskip2mu\\mathpunct{}" + "\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu"); // \newcommand{\boxed}[1]{\fbox{\m@th$\displaystyle#1$}} + +defineMacro("\\boxed", "\\fbox{$\\displaystyle{#1}$}"); // \def\iff{\DOTSB\;\Longleftrightarrow\;} +// \def\implies{\DOTSB\;\Longrightarrow\;} +// \def\impliedby{\DOTSB\;\Longleftarrow\;} + +defineMacro("\\iff", "\\DOTSB\\;\\Longleftrightarrow\\;"); +defineMacro("\\implies", "\\DOTSB\\;\\Longrightarrow\\;"); +defineMacro("\\impliedby", "\\DOTSB\\;\\Longleftarrow\\;"); // AMSMath's automatic \dots, based on \mdots@@ macro. + +const dotsByToken = { + ',': '\\dotsc', + '\\not': '\\dotsb', + // \keybin@ checks for the following: + '+': '\\dotsb', + '=': '\\dotsb', + '<': '\\dotsb', + '>': '\\dotsb', + '-': '\\dotsb', + '*': '\\dotsb', + ':': '\\dotsb', + // Symbols whose definition starts with \DOTSB: + '\\DOTSB': '\\dotsb', + '\\coprod': '\\dotsb', + '\\bigvee': '\\dotsb', + '\\bigwedge': '\\dotsb', + '\\biguplus': '\\dotsb', + '\\bigcap': '\\dotsb', + '\\bigcup': '\\dotsb', + '\\prod': '\\dotsb', + '\\sum': '\\dotsb', + '\\bigotimes': '\\dotsb', + '\\bigoplus': '\\dotsb', + '\\bigodot': '\\dotsb', + '\\bigsqcup': '\\dotsb', + '\\And': '\\dotsb', + '\\longrightarrow': '\\dotsb', + '\\Longrightarrow': '\\dotsb', + '\\longleftarrow': '\\dotsb', + '\\Longleftarrow': '\\dotsb', + '\\longleftrightarrow': '\\dotsb', + '\\Longleftrightarrow': '\\dotsb', + '\\mapsto': '\\dotsb', + '\\longmapsto': '\\dotsb', + '\\hookrightarrow': '\\dotsb', + '\\doteq': '\\dotsb', + // Symbols whose definition starts with \mathbin: + '\\mathbin': '\\dotsb', + // Symbols whose definition starts with \mathrel: + '\\mathrel': '\\dotsb', + '\\relbar': '\\dotsb', + '\\Relbar': '\\dotsb', + '\\xrightarrow': '\\dotsb', + '\\xleftarrow': '\\dotsb', + // Symbols whose definition starts with \DOTSI: + '\\DOTSI': '\\dotsi', + '\\int': '\\dotsi', + '\\oint': '\\dotsi', + '\\iint': '\\dotsi', + '\\iiint': '\\dotsi', + '\\iiiint': '\\dotsi', + '\\idotsint': '\\dotsi', + // Symbols whose definition starts with \DOTSX: + '\\DOTSX': '\\dotsx' +}; +defineMacro("\\dots", function (context) { + // TODO: If used in text mode, should expand to \textellipsis. + // However, in KaTeX, \textellipsis and \ldots behave the same + // (in text mode), and it's unlikely we'd see any of the math commands + // that affect the behavior of \dots when in text mode. So fine for now + // (until we support \ifmmode ... \else ... \fi). + let thedots = '\\dotso'; + const next = context.expandAfterFuture().text; + + if (next in dotsByToken) { + thedots = dotsByToken[next]; + } else if (next.substr(0, 4) === '\\not') { + thedots = '\\dotsb'; + } else if (next in symbols.math) { + if (utils.contains(['bin', 'rel'], symbols.math[next].group)) { + thedots = '\\dotsb'; + } + } + + return thedots; +}); +const spaceAfterDots = { + // \rightdelim@ checks for the following: + ')': true, + ']': true, + '\\rbrack': true, + '\\}': true, + '\\rbrace': true, + '\\rangle': true, + '\\rceil': true, + '\\rfloor': true, + '\\rgroup': true, + '\\rmoustache': true, + '\\right': true, + '\\bigr': true, + '\\biggr': true, + '\\Bigr': true, + '\\Biggr': true, + // \extra@ also tests for the following: + '$': true, + // \extrap@ checks for the following: + ';': true, + '.': true, + ',': true +}; +defineMacro("\\dotso", function (context) { + const next = context.future().text; + + if (next in spaceAfterDots) { + return "\\ldots\\,"; + } else { + return "\\ldots"; + } +}); +defineMacro("\\dotsc", function (context) { + const next = context.future().text; // \dotsc uses \extra@ but not \extrap@, instead specially checking for + // ';' and '.', but doesn't check for ','. + + if (next in spaceAfterDots && next !== ',') { + return "\\ldots\\,"; + } else { + return "\\ldots"; + } +}); +defineMacro("\\cdots", function (context) { + const next = context.future().text; + + if (next in spaceAfterDots) { + return "\\@cdots\\,"; + } else { + return "\\@cdots"; + } +}); +defineMacro("\\dotsb", "\\cdots"); +defineMacro("\\dotsm", "\\cdots"); +defineMacro("\\dotsi", "\\!\\cdots"); // amsmath doesn't actually define \dotsx, but \dots followed by a macro +// starting with \DOTSX implies \dotso, and then \extra@ detects this case +// and forces the added `\,`. + +defineMacro("\\dotsx", "\\ldots\\,"); // \let\DOTSI\relax +// \let\DOTSB\relax +// \let\DOTSX\relax + +defineMacro("\\DOTSI", "\\relax"); +defineMacro("\\DOTSB", "\\relax"); +defineMacro("\\DOTSX", "\\relax"); // Spacing, based on amsmath.sty's override of LaTeX defaults +// \DeclareRobustCommand{\tmspace}[3]{% +// \ifmmode\mskip#1#2\else\kern#1#3\fi\relax} + +defineMacro("\\tmspace", "\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"); // \renewcommand{\,}{\tmspace+\thinmuskip{.1667em}} +// TODO: math mode should use \thinmuskip + +defineMacro("\\,", "\\tmspace+{3mu}{.1667em}"); // \let\thinspace\, + +defineMacro("\\thinspace", "\\,"); // \def\>{\mskip\medmuskip} +// \renewcommand{\:}{\tmspace+\medmuskip{.2222em}} +// TODO: \> and math mode of \: should use \medmuskip = 4mu plus 2mu minus 4mu + +defineMacro("\\>", "\\mskip{4mu}"); +defineMacro("\\:", "\\tmspace+{4mu}{.2222em}"); // \let\medspace\: + +defineMacro("\\medspace", "\\:"); // \renewcommand{\;}{\tmspace+\thickmuskip{.2777em}} +// TODO: math mode should use \thickmuskip = 5mu plus 5mu + +defineMacro("\\;", "\\tmspace+{5mu}{.2777em}"); // \let\thickspace\; + +defineMacro("\\thickspace", "\\;"); // \renewcommand{\!}{\tmspace-\thinmuskip{.1667em}} +// TODO: math mode should use \thinmuskip + +defineMacro("\\!", "\\tmspace-{3mu}{.1667em}"); // \let\negthinspace\! + +defineMacro("\\negthinspace", "\\!"); // \newcommand{\negmedspace}{\tmspace-\medmuskip{.2222em}} +// TODO: math mode should use \medmuskip + +defineMacro("\\negmedspace", "\\tmspace-{4mu}{.2222em}"); // \newcommand{\negthickspace}{\tmspace-\thickmuskip{.2777em}} +// TODO: math mode should use \thickmuskip + +defineMacro("\\negthickspace", "\\tmspace-{5mu}{.277em}"); // \def\enspace{\kern.5em } + +defineMacro("\\enspace", "\\kern.5em "); // \def\enskip{\hskip.5em\relax} + +defineMacro("\\enskip", "\\hskip.5em\\relax"); // \def\quad{\hskip1em\relax} + +defineMacro("\\quad", "\\hskip1em\\relax"); // \def\qquad{\hskip2em\relax} + +defineMacro("\\qquad", "\\hskip2em\\relax"); // \tag@in@display form of \tag + +defineMacro("\\tag", "\\@ifstar\\tag@literal\\tag@paren"); +defineMacro("\\tag@paren", "\\tag@literal{({#1})}"); +defineMacro("\\tag@literal", context => { + if (context.macros.get("\\df@tag")) { + throw new ParseError("Multiple \\tag"); + } + + return "\\gdef\\df@tag{\\text{#1}}"; +}); // \renewcommand{\bmod}{\nonscript\mskip-\medmuskip\mkern5mu\mathbin +// {\operator@font mod}\penalty900 +// \mkern5mu\nonscript\mskip-\medmuskip} +// \newcommand{\pod}[1]{\allowbreak +// \if@display\mkern18mu\else\mkern8mu\fi(#1)} +// \renewcommand{\pmod}[1]{\pod{{\operator@font mod}\mkern6mu#1}} +// \newcommand{\mod}[1]{\allowbreak\if@display\mkern18mu +// \else\mkern12mu\fi{\operator@font mod}\,\,#1} +// TODO: math mode should use \medmuskip = 4mu plus 2mu minus 4mu + +defineMacro("\\bmod", "\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}" + "\\mathbin{\\rm mod}" + "\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"); +defineMacro("\\pod", "\\allowbreak" + "\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"); +defineMacro("\\pmod", "\\pod{{\\rm mod}\\mkern6mu#1}"); +defineMacro("\\mod", "\\allowbreak" + "\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}" + "{\\rm mod}\\,\\,#1"); // \pmb -- A simulation of bold. +// The version in ambsy.sty works by typesetting three copies of the argument +// with small offsets. We use two copies. We omit the vertical offset because +// of rendering problems that makeVList encounters in Safari. + +defineMacro("\\pmb", "\\html@mathml{" + "\\@binrel{#1}{\\mathrlap{#1}\\kern0.5px#1}}" + "{\\mathbf{#1}}"); ////////////////////////////////////////////////////////////////////// +// LaTeX source2e +// \\ defaults to \newline, but changes to \cr within array environment + +defineMacro("\\\\", "\\newline"); // \def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\@} +// TODO: Doesn't normally work in math mode because \@ fails. KaTeX doesn't +// support \@ yet, so that's omitted, and we add \text so that the result +// doesn't look funny in math mode. + +defineMacro("\\TeX", "\\textrm{\\html@mathml{" + "T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX" + "}{TeX}}"); // \DeclareRobustCommand{\LaTeX}{L\kern-.36em% +// {\sbox\z@ T% +// \vbox to\ht\z@{\hbox{\check@mathfonts +// \fontsize\sf@size\z@ +// \math@fontsfalse\selectfont +// A}% +// \vss}% +// }% +// \kern-.15em% +// \TeX} +// This code aligns the top of the A with the T (from the perspective of TeX's +// boxes, though visually the A appears to extend above slightly). +// We compute the corresponding \raisebox when A is rendered in \normalsize +// \scriptstyle, which has a scale factor of 0.7 (see Options.js). + +const latexRaiseA = metricMap['Main-Regular']["T".charCodeAt(0)][1] - 0.7 * metricMap['Main-Regular']["A".charCodeAt(0)][1] + "em"; +defineMacro("\\LaTeX", "\\textrm{\\html@mathml{" + `L\\kern-.36em\\raisebox{${latexRaiseA}}{\\scriptstyle A}` + "\\kern-.15em\\TeX}{LaTeX}}"); // New KaTeX logo based on tweaking LaTeX logo + +defineMacro("\\KaTeX", "\\textrm{\\html@mathml{" + `K\\kern-.17em\\raisebox{${latexRaiseA}}{\\scriptstyle A}` + "\\kern-.15em\\TeX}{KaTeX}}"); // \DeclareRobustCommand\hspace{\@ifstar\@hspacer\@hspace} +// \def\@hspace#1{\hskip #1\relax} +// \def\@hspacer#1{\vrule \@width\z@\nobreak +// \hskip #1\hskip \z@skip} + +defineMacro("\\hspace", "\\@ifstar\\@hspacer\\@hspace"); +defineMacro("\\@hspace", "\\hskip #1\\relax"); +defineMacro("\\@hspacer", "\\rule{0pt}{0pt}\\hskip #1\\relax"); ////////////////////////////////////////////////////////////////////// +// mathtools.sty +//\providecommand\ordinarycolon{:} + +defineMacro("\\ordinarycolon", ":"); //\def\vcentcolon{\mathrel{\mathop\ordinarycolon}} +//TODO(edemaine): Not yet centered. Fix via \raisebox or #726 + +defineMacro("\\vcentcolon", "\\mathrel{\\mathop\\ordinarycolon}"); // \providecommand*\dblcolon{\vcentcolon\mathrel{\mkern-.9mu}\vcentcolon} + +defineMacro("\\dblcolon", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}" + "{\\mathop{\\char\"2237}}"); // \providecommand*\coloneqq{\vcentcolon\mathrel{\mkern-1.2mu}=} + +defineMacro("\\coloneqq", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}" + "{\\mathop{\\char\"2254}}"); // ≔ +// \providecommand*\Coloneqq{\dblcolon\mathrel{\mkern-1.2mu}=} + +defineMacro("\\Coloneqq", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}" + "{\\mathop{\\char\"2237\\char\"3d}}"); // \providecommand*\coloneq{\vcentcolon\mathrel{\mkern-1.2mu}\mathrel{-}} + +defineMacro("\\coloneq", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}" + "{\\mathop{\\char\"3a\\char\"2212}}"); // \providecommand*\Coloneq{\dblcolon\mathrel{\mkern-1.2mu}\mathrel{-}} + +defineMacro("\\Coloneq", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}" + "{\\mathop{\\char\"2237\\char\"2212}}"); // \providecommand*\eqqcolon{=\mathrel{\mkern-1.2mu}\vcentcolon} + +defineMacro("\\eqqcolon", "\\html@mathml{" + "\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}" + "{\\mathop{\\char\"2255}}"); // ≕ +// \providecommand*\Eqqcolon{=\mathrel{\mkern-1.2mu}\dblcolon} + +defineMacro("\\Eqqcolon", "\\html@mathml{" + "\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}" + "{\\mathop{\\char\"3d\\char\"2237}}"); // \providecommand*\eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\vcentcolon} + +defineMacro("\\eqcolon", "\\html@mathml{" + "\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}" + "{\\mathop{\\char\"2239}}"); // \providecommand*\Eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\dblcolon} + +defineMacro("\\Eqcolon", "\\html@mathml{" + "\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}" + "{\\mathop{\\char\"2212\\char\"2237}}"); // \providecommand*\colonapprox{\vcentcolon\mathrel{\mkern-1.2mu}\approx} + +defineMacro("\\colonapprox", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}" + "{\\mathop{\\char\"3a\\char\"2248}}"); // \providecommand*\Colonapprox{\dblcolon\mathrel{\mkern-1.2mu}\approx} + +defineMacro("\\Colonapprox", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}" + "{\\mathop{\\char\"2237\\char\"2248}}"); // \providecommand*\colonsim{\vcentcolon\mathrel{\mkern-1.2mu}\sim} + +defineMacro("\\colonsim", "\\html@mathml{" + "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}" + "{\\mathop{\\char\"3a\\char\"223c}}"); // \providecommand*\Colonsim{\dblcolon\mathrel{\mkern-1.2mu}\sim} + +defineMacro("\\Colonsim", "\\html@mathml{" + "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}" + "{\\mathop{\\char\"2237\\char\"223c}}"); // Some Unicode characters are implemented with macros to mathtools functions. + +defineMacro("\u2237", "\\dblcolon"); // :: + +defineMacro("\u2239", "\\eqcolon"); // -: + +defineMacro("\u2254", "\\coloneqq"); // := + +defineMacro("\u2255", "\\eqqcolon"); // =: + +defineMacro("\u2A74", "\\Coloneqq"); // ::= +////////////////////////////////////////////////////////////////////// +// colonequals.sty +// Alternate names for mathtools's macros: + +defineMacro("\\ratio", "\\vcentcolon"); +defineMacro("\\coloncolon", "\\dblcolon"); +defineMacro("\\colonequals", "\\coloneqq"); +defineMacro("\\coloncolonequals", "\\Coloneqq"); +defineMacro("\\equalscolon", "\\eqqcolon"); +defineMacro("\\equalscoloncolon", "\\Eqqcolon"); +defineMacro("\\colonminus", "\\coloneq"); +defineMacro("\\coloncolonminus", "\\Coloneq"); +defineMacro("\\minuscolon", "\\eqcolon"); +defineMacro("\\minuscoloncolon", "\\Eqcolon"); // \colonapprox name is same in mathtools and colonequals. + +defineMacro("\\coloncolonapprox", "\\Colonapprox"); // \colonsim name is same in mathtools and colonequals. + +defineMacro("\\coloncolonsim", "\\Colonsim"); // Additional macros, implemented by analogy with mathtools definitions: + +defineMacro("\\simcolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"); +defineMacro("\\simcoloncolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"); +defineMacro("\\approxcolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"); +defineMacro("\\approxcoloncolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"); // Present in newtxmath, pxfonts and txfonts + +defineMacro("\\notni", "\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}"); +defineMacro("\\limsup", "\\DOTSB\\operatorname*{lim\\,sup}"); +defineMacro("\\liminf", "\\DOTSB\\operatorname*{lim\\,inf}"); ////////////////////////////////////////////////////////////////////// +// MathML alternates for KaTeX glyphs in the Unicode private area + +defineMacro("\\gvertneqq", "\\html@mathml{\\@gvertneqq}{\u2269}"); +defineMacro("\\lvertneqq", "\\html@mathml{\\@lvertneqq}{\u2268}"); +defineMacro("\\ngeqq", "\\html@mathml{\\@ngeqq}{\u2271}"); +defineMacro("\\ngeqslant", "\\html@mathml{\\@ngeqslant}{\u2271}"); +defineMacro("\\nleqq", "\\html@mathml{\\@nleqq}{\u2270}"); +defineMacro("\\nleqslant", "\\html@mathml{\\@nleqslant}{\u2270}"); +defineMacro("\\nshortmid", "\\html@mathml{\\@nshortmid}{∤}"); +defineMacro("\\nshortparallel", "\\html@mathml{\\@nshortparallel}{∦}"); +defineMacro("\\nsubseteqq", "\\html@mathml{\\@nsubseteqq}{\u2288}"); +defineMacro("\\nsupseteqq", "\\html@mathml{\\@nsupseteqq}{\u2289}"); +defineMacro("\\varsubsetneq", "\\html@mathml{\\@varsubsetneq}{⊊}"); +defineMacro("\\varsubsetneqq", "\\html@mathml{\\@varsubsetneqq}{⫋}"); +defineMacro("\\varsupsetneq", "\\html@mathml{\\@varsupsetneq}{⊋}"); +defineMacro("\\varsupsetneqq", "\\html@mathml{\\@varsupsetneqq}{⫌}"); ////////////////////////////////////////////////////////////////////// +// stmaryrd and semantic +// The stmaryrd and semantic packages render the next four items by calling a +// glyph. Those glyphs do not exist in the KaTeX fonts. Hence the macros. + +defineMacro("\\llbracket", "\\html@mathml{" + "\\mathopen{[\\mkern-3.2mu[}}" + "{\\mathopen{\\char`\u27e6}}"); +defineMacro("\\rrbracket", "\\html@mathml{" + "\\mathclose{]\\mkern-3.2mu]}}" + "{\\mathclose{\\char`\u27e7}}"); +defineMacro("\u27e6", "\\llbracket"); // blackboard bold [ + +defineMacro("\u27e7", "\\rrbracket"); // blackboard bold ] + +defineMacro("\\lBrace", "\\html@mathml{" + "\\mathopen{\\{\\mkern-3.2mu[}}" + "{\\mathopen{\\char`\u2983}}"); +defineMacro("\\rBrace", "\\html@mathml{" + "\\mathclose{]\\mkern-3.2mu\\}}}" + "{\\mathclose{\\char`\u2984}}"); +defineMacro("\u2983", "\\lBrace"); // blackboard bold { + +defineMacro("\u2984", "\\rBrace"); // blackboard bold } +// TODO: Create variable sized versions of the last two items. I believe that +// will require new font glyphs. +////////////////////////////////////////////////////////////////////// +// texvc.sty +// The texvc package contains macros available in mediawiki pages. +// We omit the functions deprecated at +// https://en.wikipedia.org/wiki/Help:Displaying_a_formula#Deprecated_syntax +// We also omit texvc's \O, which conflicts with \text{\O} + +defineMacro("\\darr", "\\downarrow"); +defineMacro("\\dArr", "\\Downarrow"); +defineMacro("\\Darr", "\\Downarrow"); +defineMacro("\\lang", "\\langle"); +defineMacro("\\rang", "\\rangle"); +defineMacro("\\uarr", "\\uparrow"); +defineMacro("\\uArr", "\\Uparrow"); +defineMacro("\\Uarr", "\\Uparrow"); +defineMacro("\\N", "\\mathbb{N}"); +defineMacro("\\R", "\\mathbb{R}"); +defineMacro("\\Z", "\\mathbb{Z}"); +defineMacro("\\alef", "\\aleph"); +defineMacro("\\alefsym", "\\aleph"); +defineMacro("\\Alpha", "\\mathrm{A}"); +defineMacro("\\Beta", "\\mathrm{B}"); +defineMacro("\\bull", "\\bullet"); +defineMacro("\\Chi", "\\mathrm{X}"); +defineMacro("\\clubs", "\\clubsuit"); +defineMacro("\\cnums", "\\mathbb{C}"); +defineMacro("\\Complex", "\\mathbb{C}"); +defineMacro("\\Dagger", "\\ddagger"); +defineMacro("\\diamonds", "\\diamondsuit"); +defineMacro("\\empty", "\\emptyset"); +defineMacro("\\Epsilon", "\\mathrm{E}"); +defineMacro("\\Eta", "\\mathrm{H}"); +defineMacro("\\exist", "\\exists"); +defineMacro("\\harr", "\\leftrightarrow"); +defineMacro("\\hArr", "\\Leftrightarrow"); +defineMacro("\\Harr", "\\Leftrightarrow"); +defineMacro("\\hearts", "\\heartsuit"); +defineMacro("\\image", "\\Im"); +defineMacro("\\infin", "\\infty"); +defineMacro("\\Iota", "\\mathrm{I}"); +defineMacro("\\isin", "\\in"); +defineMacro("\\Kappa", "\\mathrm{K}"); +defineMacro("\\larr", "\\leftarrow"); +defineMacro("\\lArr", "\\Leftarrow"); +defineMacro("\\Larr", "\\Leftarrow"); +defineMacro("\\lrarr", "\\leftrightarrow"); +defineMacro("\\lrArr", "\\Leftrightarrow"); +defineMacro("\\Lrarr", "\\Leftrightarrow"); +defineMacro("\\Mu", "\\mathrm{M}"); +defineMacro("\\natnums", "\\mathbb{N}"); +defineMacro("\\Nu", "\\mathrm{N}"); +defineMacro("\\Omicron", "\\mathrm{O}"); +defineMacro("\\plusmn", "\\pm"); +defineMacro("\\rarr", "\\rightarrow"); +defineMacro("\\rArr", "\\Rightarrow"); +defineMacro("\\Rarr", "\\Rightarrow"); +defineMacro("\\real", "\\Re"); +defineMacro("\\reals", "\\mathbb{R}"); +defineMacro("\\Reals", "\\mathbb{R}"); +defineMacro("\\Rho", "\\mathrm{P}"); +defineMacro("\\sdot", "\\cdot"); +defineMacro("\\sect", "\\S"); +defineMacro("\\spades", "\\spadesuit"); +defineMacro("\\sub", "\\subset"); +defineMacro("\\sube", "\\subseteq"); +defineMacro("\\supe", "\\supseteq"); +defineMacro("\\Tau", "\\mathrm{T}"); +defineMacro("\\thetasym", "\\vartheta"); // TODO: defineMacro("\\varcoppa", "\\\mbox{\\coppa}"); + +defineMacro("\\weierp", "\\wp"); +defineMacro("\\Zeta", "\\mathrm{Z}"); ////////////////////////////////////////////////////////////////////// +// statmath.sty +// https://ctan.math.illinois.edu/macros/latex/contrib/statmath/statmath.pdf + +defineMacro("\\argmin", "\\DOTSB\\operatorname*{arg\\,min}"); +defineMacro("\\argmax", "\\DOTSB\\operatorname*{arg\\,max}"); +defineMacro("\\plim", "\\DOTSB\\mathop{\\operatorname{plim}}\\limits"); // Custom Khan Academy colors, should be moved to an optional package + +defineMacro("\\blue", "\\textcolor{##6495ed}{#1}"); +defineMacro("\\orange", "\\textcolor{##ffa500}{#1}"); +defineMacro("\\pink", "\\textcolor{##ff00af}{#1}"); +defineMacro("\\red", "\\textcolor{##df0030}{#1}"); +defineMacro("\\green", "\\textcolor{##28ae7b}{#1}"); +defineMacro("\\gray", "\\textcolor{gray}{#1}"); +defineMacro("\\purple", "\\textcolor{##9d38bd}{#1}"); +defineMacro("\\blueA", "\\textcolor{##ccfaff}{#1}"); +defineMacro("\\blueB", "\\textcolor{##80f6ff}{#1}"); +defineMacro("\\blueC", "\\textcolor{##63d9ea}{#1}"); +defineMacro("\\blueD", "\\textcolor{##11accd}{#1}"); +defineMacro("\\blueE", "\\textcolor{##0c7f99}{#1}"); +defineMacro("\\tealA", "\\textcolor{##94fff5}{#1}"); +defineMacro("\\tealB", "\\textcolor{##26edd5}{#1}"); +defineMacro("\\tealC", "\\textcolor{##01d1c1}{#1}"); +defineMacro("\\tealD", "\\textcolor{##01a995}{#1}"); +defineMacro("\\tealE", "\\textcolor{##208170}{#1}"); +defineMacro("\\greenA", "\\textcolor{##b6ffb0}{#1}"); +defineMacro("\\greenB", "\\textcolor{##8af281}{#1}"); +defineMacro("\\greenC", "\\textcolor{##74cf70}{#1}"); +defineMacro("\\greenD", "\\textcolor{##1fab54}{#1}"); +defineMacro("\\greenE", "\\textcolor{##0d923f}{#1}"); +defineMacro("\\goldA", "\\textcolor{##ffd0a9}{#1}"); +defineMacro("\\goldB", "\\textcolor{##ffbb71}{#1}"); +defineMacro("\\goldC", "\\textcolor{##ff9c39}{#1}"); +defineMacro("\\goldD", "\\textcolor{##e07d10}{#1}"); +defineMacro("\\goldE", "\\textcolor{##a75a05}{#1}"); +defineMacro("\\redA", "\\textcolor{##fca9a9}{#1}"); +defineMacro("\\redB", "\\textcolor{##ff8482}{#1}"); +defineMacro("\\redC", "\\textcolor{##f9685d}{#1}"); +defineMacro("\\redD", "\\textcolor{##e84d39}{#1}"); +defineMacro("\\redE", "\\textcolor{##bc2612}{#1}"); +defineMacro("\\maroonA", "\\textcolor{##ffbde0}{#1}"); +defineMacro("\\maroonB", "\\textcolor{##ff92c6}{#1}"); +defineMacro("\\maroonC", "\\textcolor{##ed5fa6}{#1}"); +defineMacro("\\maroonD", "\\textcolor{##ca337c}{#1}"); +defineMacro("\\maroonE", "\\textcolor{##9e034e}{#1}"); +defineMacro("\\purpleA", "\\textcolor{##ddd7ff}{#1}"); +defineMacro("\\purpleB", "\\textcolor{##c6b9fc}{#1}"); +defineMacro("\\purpleC", "\\textcolor{##aa87ff}{#1}"); +defineMacro("\\purpleD", "\\textcolor{##7854ab}{#1}"); +defineMacro("\\purpleE", "\\textcolor{##543b78}{#1}"); +defineMacro("\\mintA", "\\textcolor{##f5f9e8}{#1}"); +defineMacro("\\mintB", "\\textcolor{##edf2df}{#1}"); +defineMacro("\\mintC", "\\textcolor{##e0e5cc}{#1}"); +defineMacro("\\grayA", "\\textcolor{##f6f7f7}{#1}"); +defineMacro("\\grayB", "\\textcolor{##f0f1f2}{#1}"); +defineMacro("\\grayC", "\\textcolor{##e3e5e6}{#1}"); +defineMacro("\\grayD", "\\textcolor{##d6d8da}{#1}"); +defineMacro("\\grayE", "\\textcolor{##babec2}{#1}"); +defineMacro("\\grayF", "\\textcolor{##888d93}{#1}"); +defineMacro("\\grayG", "\\textcolor{##626569}{#1}"); +defineMacro("\\grayH", "\\textcolor{##3b3e40}{#1}"); +defineMacro("\\grayI", "\\textcolor{##21242c}{#1}"); +defineMacro("\\kaBlue", "\\textcolor{##314453}{#1}"); +defineMacro("\\kaGreen", "\\textcolor{##71B307}{#1}"); + +/** + * This file contains the “gullet” where macros are expanded + * until only non-macro tokens remain. + */ +// List of commands that act like macros but aren't defined as a macro, +// function, or symbol. Used in `isDefined`. +const implicitCommands = { + "\\relax": true, + // MacroExpander.js + "^": true, + // Parser.js + "_": true, + // Parser.js + "\\limits": true, + // Parser.js + "\\nolimits": true // Parser.js + +}; +class MacroExpander { + constructor(input, settings, mode) { + this.settings = void 0; + this.expansionCount = void 0; + this.lexer = void 0; + this.macros = void 0; + this.stack = void 0; + this.mode = void 0; + this.settings = settings; + this.expansionCount = 0; + this.feed(input); // Make new global namespace + + this.macros = new Namespace(builtinMacros, settings.macros); + this.mode = mode; + this.stack = []; // contains tokens in REVERSE order + } + /** + * Feed a new input string to the same MacroExpander + * (with existing macros etc.). + */ + + + feed(input) { + this.lexer = new Lexer(input, this.settings); + } + /** + * Switches between "text" and "math" modes. + */ + + + switchMode(newMode) { + this.mode = newMode; + } + /** + * Start a new group nesting within all namespaces. + */ + + + beginGroup() { + this.macros.beginGroup(); + } + /** + * End current group nesting within all namespaces. + */ + + + endGroup() { + this.macros.endGroup(); + } + /** + * Returns the topmost token on the stack, without expanding it. + * Similar in behavior to TeX's `\futurelet`. + */ + + + future() { + if (this.stack.length === 0) { + this.pushToken(this.lexer.lex()); + } + + return this.stack[this.stack.length - 1]; + } + /** + * Remove and return the next unexpanded token. + */ + + + popToken() { + this.future(); // ensure non-empty stack + + return this.stack.pop(); + } + /** + * Add a given token to the token stack. In particular, this get be used + * to put back a token returned from one of the other methods. + */ + + + pushToken(token) { + this.stack.push(token); + } + /** + * Append an array of tokens to the token stack. + */ + + + pushTokens(tokens) { + this.stack.push(...tokens); + } + /** + * Consume all following space tokens, without expansion. + */ + + + consumeSpaces() { + for (;;) { + const token = this.future(); + + if (token.text === " ") { + this.stack.pop(); + } else { + break; + } + } + } + /** + * Consume the specified number of arguments from the token stream, + * and return the resulting array of arguments. + */ + + + consumeArgs(numArgs) { + const args = []; // obtain arguments, either single token or balanced {…} group + + for (let i = 0; i < numArgs; ++i) { + this.consumeSpaces(); // ignore spaces before each argument + + const startOfArg = this.popToken(); + + if (startOfArg.text === "{") { + const arg = []; + let depth = 1; + + while (depth !== 0) { + const tok = this.popToken(); + arg.push(tok); + + if (tok.text === "{") { + ++depth; + } else if (tok.text === "}") { + --depth; + } else if (tok.text === "EOF") { + throw new ParseError("End of input in macro argument", startOfArg); + } + } + + arg.pop(); // remove last } + + arg.reverse(); // like above, to fit in with stack order + + args[i] = arg; + } else if (startOfArg.text === "EOF") { + throw new ParseError("End of input expecting macro argument"); + } else { + args[i] = [startOfArg]; + } + } + + return args; + } + /** + * Expand the next token only once if possible. + * + * If the token is expanded, the resulting tokens will be pushed onto + * the stack in reverse order and will be returned as an array, + * also in reverse order. + * + * If not, the next token will be returned without removing it + * from the stack. This case can be detected by a `Token` return value + * instead of an `Array` return value. + * + * In either case, the next token will be on the top of the stack, + * or the stack will be empty. + * + * Used to implement `expandAfterFuture` and `expandNextToken`. + * + * At the moment, macro expansion doesn't handle delimited macros, + * i.e. things like those defined by \def\foo#1\end{…}. + * See the TeX book page 202ff. for details on how those should behave. + */ + + + expandOnce() { + const topToken = this.popToken(); + const name = topToken.text; + + const expansion = this._getExpansion(name); + + if (expansion == null) { + // mainly checking for undefined here + // Fully expanded + this.pushToken(topToken); + return topToken; + } + + this.expansionCount++; + + if (this.expansionCount > this.settings.maxExpand) { + throw new ParseError("Too many expansions: infinite loop or " + "need to increase maxExpand setting"); + } + + let tokens = expansion.tokens; + + if (expansion.numArgs) { + const args = this.consumeArgs(expansion.numArgs); // paste arguments in place of the placeholders + + tokens = tokens.slice(); // make a shallow copy + + for (let i = tokens.length - 1; i >= 0; --i) { + let tok = tokens[i]; + + if (tok.text === "#") { + if (i === 0) { + throw new ParseError("Incomplete placeholder at end of macro body", tok); + } + + tok = tokens[--i]; // next token on stack + + if (tok.text === "#") { + // ## → # + tokens.splice(i + 1, 1); // drop first # + } else if (/^[1-9]$/.test(tok.text)) { + // replace the placeholder with the indicated argument + tokens.splice(i, 2, ...args[+tok.text - 1]); + } else { + throw new ParseError("Not a valid argument number", tok); + } + } + } + } // Concatenate expansion onto top of stack. + + + this.pushTokens(tokens); + return tokens; + } + /** + * Expand the next token only once (if possible), and return the resulting + * top token on the stack (without removing anything from the stack). + * Similar in behavior to TeX's `\expandafter\futurelet`. + * Equivalent to expandOnce() followed by future(). + */ + + + expandAfterFuture() { + this.expandOnce(); + return this.future(); + } + /** + * Recursively expand first token, then return first non-expandable token. + */ + + + expandNextToken() { + for (;;) { + const expanded = this.expandOnce(); // expandOnce returns Token if and only if it's fully expanded. + + if (expanded instanceof Token) { + // \relax stops the expansion, but shouldn't get returned (a + // null return value couldn't get implemented as a function). + if (expanded.text === "\\relax") { + this.stack.pop(); + } else { + return this.stack.pop(); // === expanded + } + } + } // Flow unable to figure out that this pathway is impossible. + // https://github.com/facebook/flow/issues/4808 + + + throw new Error(); // eslint-disable-line no-unreachable + } + /** + * Fully expand the given macro name and return the resulting list of + * tokens, or return `undefined` if no such macro is defined. + */ + + + expandMacro(name) { + if (!this.macros.get(name)) { + return undefined; + } + + const output = []; + const oldStackLength = this.stack.length; + this.pushToken(new Token(name)); + + while (this.stack.length > oldStackLength) { + const expanded = this.expandOnce(); // expandOnce returns Token if and only if it's fully expanded. + + if (expanded instanceof Token) { + output.push(this.stack.pop()); + } + } + + return output; + } + /** + * Fully expand the given macro name and return the result as a string, + * or return `undefined` if no such macro is defined. + */ + + + expandMacroAsText(name) { + const tokens = this.expandMacro(name); + + if (tokens) { + return tokens.map(token => token.text).join(""); + } else { + return tokens; + } + } + /** + * Returns the expanded macro as a reversed array of tokens and a macro + * argument count. Or returns `null` if no such macro. + */ + + + _getExpansion(name) { + const definition = this.macros.get(name); + + if (definition == null) { + // mainly checking for undefined here + return definition; + } + + const expansion = typeof definition === "function" ? definition(this) : definition; + + if (typeof expansion === "string") { + let numArgs = 0; + + if (expansion.indexOf("#") !== -1) { + const stripped = expansion.replace(/##/g, ""); + + while (stripped.indexOf("#" + (numArgs + 1)) !== -1) { + ++numArgs; + } + } + + const bodyLexer = new Lexer(expansion, this.settings); + const tokens = []; + let tok = bodyLexer.lex(); + + while (tok.text !== "EOF") { + tokens.push(tok); + tok = bodyLexer.lex(); + } + + tokens.reverse(); // to fit in with stack using push and pop + + const expanded = { + tokens, + numArgs + }; + return expanded; + } + + return expansion; + } + /** + * Determine whether a command is currently "defined" (has some + * functionality), meaning that it's a macro (in the current group), + * a function, a symbol, or one of the special commands listed in + * `implicitCommands`. + */ + + + isDefined(name) { + return this.macros.has(name) || functions.hasOwnProperty(name) || symbols.math.hasOwnProperty(name) || symbols.text.hasOwnProperty(name) || implicitCommands.hasOwnProperty(name); + } + +} + +// Mapping of Unicode accent characters to their LaTeX equivalent in text and +// math mode (when they exist). +var unicodeAccents = { + '\u0301': { + text: "\\'", + math: '\\acute' + }, + '\u0300': { + text: '\\`', + math: '\\grave' + }, + '\u0308': { + text: '\\"', + math: '\\ddot' + }, + '\u0303': { + text: '\\~', + math: '\\tilde' + }, + '\u0304': { + text: '\\=', + math: '\\bar' + }, + '\u0306': { + text: '\\u', + math: '\\breve' + }, + '\u030c': { + text: '\\v', + math: '\\check' + }, + '\u0302': { + text: '\\^', + math: '\\hat' + }, + '\u0307': { + text: '\\.', + math: '\\dot' + }, + '\u030a': { + text: '\\r', + math: '\\mathring' + }, + '\u030b': { + text: '\\H' + } +}; + +// This file is GENERATED by unicodeMake.js. DO NOT MODIFY. +var unicodeSymbols = { + "\u00e1": "\u0061\u0301", + // á = \'{a} + "\u00e0": "\u0061\u0300", + // à = \`{a} + "\u00e4": "\u0061\u0308", + // ä = \"{a} + "\u01df": "\u0061\u0308\u0304", + // ǟ = \"\={a} + "\u00e3": "\u0061\u0303", + // ã = \~{a} + "\u0101": "\u0061\u0304", + // ā = \={a} + "\u0103": "\u0061\u0306", + // ă = \u{a} + "\u1eaf": "\u0061\u0306\u0301", + // ắ = \u\'{a} + "\u1eb1": "\u0061\u0306\u0300", + // ằ = \u\`{a} + "\u1eb5": "\u0061\u0306\u0303", + // ẵ = \u\~{a} + "\u01ce": "\u0061\u030c", + // ǎ = \v{a} + "\u00e2": "\u0061\u0302", + // â = \^{a} + "\u1ea5": "\u0061\u0302\u0301", + // ấ = \^\'{a} + "\u1ea7": "\u0061\u0302\u0300", + // ầ = \^\`{a} + "\u1eab": "\u0061\u0302\u0303", + // ẫ = \^\~{a} + "\u0227": "\u0061\u0307", + // ȧ = \.{a} + "\u01e1": "\u0061\u0307\u0304", + // ǡ = \.\={a} + "\u00e5": "\u0061\u030a", + // å = \r{a} + "\u01fb": "\u0061\u030a\u0301", + // ǻ = \r\'{a} + "\u1e03": "\u0062\u0307", + // ḃ = \.{b} + "\u0107": "\u0063\u0301", + // ć = \'{c} + "\u010d": "\u0063\u030c", + // č = \v{c} + "\u0109": "\u0063\u0302", + // ĉ = \^{c} + "\u010b": "\u0063\u0307", + // ċ = \.{c} + "\u010f": "\u0064\u030c", + // ď = \v{d} + "\u1e0b": "\u0064\u0307", + // ḋ = \.{d} + "\u00e9": "\u0065\u0301", + // é = \'{e} + "\u00e8": "\u0065\u0300", + // è = \`{e} + "\u00eb": "\u0065\u0308", + // ë = \"{e} + "\u1ebd": "\u0065\u0303", + // ẽ = \~{e} + "\u0113": "\u0065\u0304", + // ē = \={e} + "\u1e17": "\u0065\u0304\u0301", + // ḗ = \=\'{e} + "\u1e15": "\u0065\u0304\u0300", + // ḕ = \=\`{e} + "\u0115": "\u0065\u0306", + // ĕ = \u{e} + "\u011b": "\u0065\u030c", + // ě = \v{e} + "\u00ea": "\u0065\u0302", + // ê = \^{e} + "\u1ebf": "\u0065\u0302\u0301", + // ế = \^\'{e} + "\u1ec1": "\u0065\u0302\u0300", + // ề = \^\`{e} + "\u1ec5": "\u0065\u0302\u0303", + // ễ = \^\~{e} + "\u0117": "\u0065\u0307", + // ė = \.{e} + "\u1e1f": "\u0066\u0307", + // ḟ = \.{f} + "\u01f5": "\u0067\u0301", + // ǵ = \'{g} + "\u1e21": "\u0067\u0304", + // ḡ = \={g} + "\u011f": "\u0067\u0306", + // ğ = \u{g} + "\u01e7": "\u0067\u030c", + // ǧ = \v{g} + "\u011d": "\u0067\u0302", + // ĝ = \^{g} + "\u0121": "\u0067\u0307", + // ġ = \.{g} + "\u1e27": "\u0068\u0308", + // ḧ = \"{h} + "\u021f": "\u0068\u030c", + // ȟ = \v{h} + "\u0125": "\u0068\u0302", + // ĥ = \^{h} + "\u1e23": "\u0068\u0307", + // ḣ = \.{h} + "\u00ed": "\u0069\u0301", + // í = \'{i} + "\u00ec": "\u0069\u0300", + // ì = \`{i} + "\u00ef": "\u0069\u0308", + // ï = \"{i} + "\u1e2f": "\u0069\u0308\u0301", + // ḯ = \"\'{i} + "\u0129": "\u0069\u0303", + // ĩ = \~{i} + "\u012b": "\u0069\u0304", + // ī = \={i} + "\u012d": "\u0069\u0306", + // ĭ = \u{i} + "\u01d0": "\u0069\u030c", + // ǐ = \v{i} + "\u00ee": "\u0069\u0302", + // î = \^{i} + "\u01f0": "\u006a\u030c", + // ǰ = \v{j} + "\u0135": "\u006a\u0302", + // ĵ = \^{j} + "\u1e31": "\u006b\u0301", + // ḱ = \'{k} + "\u01e9": "\u006b\u030c", + // ǩ = \v{k} + "\u013a": "\u006c\u0301", + // ĺ = \'{l} + "\u013e": "\u006c\u030c", + // ľ = \v{l} + "\u1e3f": "\u006d\u0301", + // ḿ = \'{m} + "\u1e41": "\u006d\u0307", + // ṁ = \.{m} + "\u0144": "\u006e\u0301", + // ń = \'{n} + "\u01f9": "\u006e\u0300", + // ǹ = \`{n} + "\u00f1": "\u006e\u0303", + // ñ = \~{n} + "\u0148": "\u006e\u030c", + // ň = \v{n} + "\u1e45": "\u006e\u0307", + // ṅ = \.{n} + "\u00f3": "\u006f\u0301", + // ó = \'{o} + "\u00f2": "\u006f\u0300", + // ò = \`{o} + "\u00f6": "\u006f\u0308", + // ö = \"{o} + "\u022b": "\u006f\u0308\u0304", + // ȫ = \"\={o} + "\u00f5": "\u006f\u0303", + // õ = \~{o} + "\u1e4d": "\u006f\u0303\u0301", + // ṍ = \~\'{o} + "\u1e4f": "\u006f\u0303\u0308", + // ṏ = \~\"{o} + "\u022d": "\u006f\u0303\u0304", + // ȭ = \~\={o} + "\u014d": "\u006f\u0304", + // ō = \={o} + "\u1e53": "\u006f\u0304\u0301", + // ṓ = \=\'{o} + "\u1e51": "\u006f\u0304\u0300", + // ṑ = \=\`{o} + "\u014f": "\u006f\u0306", + // ŏ = \u{o} + "\u01d2": "\u006f\u030c", + // ǒ = \v{o} + "\u00f4": "\u006f\u0302", + // ô = \^{o} + "\u1ed1": "\u006f\u0302\u0301", + // ố = \^\'{o} + "\u1ed3": "\u006f\u0302\u0300", + // ồ = \^\`{o} + "\u1ed7": "\u006f\u0302\u0303", + // ỗ = \^\~{o} + "\u022f": "\u006f\u0307", + // ȯ = \.{o} + "\u0231": "\u006f\u0307\u0304", + // ȱ = \.\={o} + "\u0151": "\u006f\u030b", + // ő = \H{o} + "\u1e55": "\u0070\u0301", + // ṕ = \'{p} + "\u1e57": "\u0070\u0307", + // ṗ = \.{p} + "\u0155": "\u0072\u0301", + // ŕ = \'{r} + "\u0159": "\u0072\u030c", + // ř = \v{r} + "\u1e59": "\u0072\u0307", + // ṙ = \.{r} + "\u015b": "\u0073\u0301", + // ś = \'{s} + "\u1e65": "\u0073\u0301\u0307", + // ṥ = \'\.{s} + "\u0161": "\u0073\u030c", + // š = \v{s} + "\u1e67": "\u0073\u030c\u0307", + // ṧ = \v\.{s} + "\u015d": "\u0073\u0302", + // ŝ = \^{s} + "\u1e61": "\u0073\u0307", + // ṡ = \.{s} + "\u1e97": "\u0074\u0308", + // ẗ = \"{t} + "\u0165": "\u0074\u030c", + // ť = \v{t} + "\u1e6b": "\u0074\u0307", + // ṫ = \.{t} + "\u00fa": "\u0075\u0301", + // ú = \'{u} + "\u00f9": "\u0075\u0300", + // ù = \`{u} + "\u00fc": "\u0075\u0308", + // ü = \"{u} + "\u01d8": "\u0075\u0308\u0301", + // ǘ = \"\'{u} + "\u01dc": "\u0075\u0308\u0300", + // ǜ = \"\`{u} + "\u01d6": "\u0075\u0308\u0304", + // ǖ = \"\={u} + "\u01da": "\u0075\u0308\u030c", + // ǚ = \"\v{u} + "\u0169": "\u0075\u0303", + // ũ = \~{u} + "\u1e79": "\u0075\u0303\u0301", + // ṹ = \~\'{u} + "\u016b": "\u0075\u0304", + // ū = \={u} + "\u1e7b": "\u0075\u0304\u0308", + // ṻ = \=\"{u} + "\u016d": "\u0075\u0306", + // ŭ = \u{u} + "\u01d4": "\u0075\u030c", + // ǔ = \v{u} + "\u00fb": "\u0075\u0302", + // û = \^{u} + "\u016f": "\u0075\u030a", + // ů = \r{u} + "\u0171": "\u0075\u030b", + // ű = \H{u} + "\u1e7d": "\u0076\u0303", + // ṽ = \~{v} + "\u1e83": "\u0077\u0301", + // ẃ = \'{w} + "\u1e81": "\u0077\u0300", + // ẁ = \`{w} + "\u1e85": "\u0077\u0308", + // ẅ = \"{w} + "\u0175": "\u0077\u0302", + // ŵ = \^{w} + "\u1e87": "\u0077\u0307", + // ẇ = \.{w} + "\u1e98": "\u0077\u030a", + // ẘ = \r{w} + "\u1e8d": "\u0078\u0308", + // ẍ = \"{x} + "\u1e8b": "\u0078\u0307", + // ẋ = \.{x} + "\u00fd": "\u0079\u0301", + // ý = \'{y} + "\u1ef3": "\u0079\u0300", + // ỳ = \`{y} + "\u00ff": "\u0079\u0308", + // ÿ = \"{y} + "\u1ef9": "\u0079\u0303", + // ỹ = \~{y} + "\u0233": "\u0079\u0304", + // ȳ = \={y} + "\u0177": "\u0079\u0302", + // ŷ = \^{y} + "\u1e8f": "\u0079\u0307", + // ẏ = \.{y} + "\u1e99": "\u0079\u030a", + // ẙ = \r{y} + "\u017a": "\u007a\u0301", + // ź = \'{z} + "\u017e": "\u007a\u030c", + // ž = \v{z} + "\u1e91": "\u007a\u0302", + // ẑ = \^{z} + "\u017c": "\u007a\u0307", + // ż = \.{z} + "\u00c1": "\u0041\u0301", + // Á = \'{A} + "\u00c0": "\u0041\u0300", + // À = \`{A} + "\u00c4": "\u0041\u0308", + // Ä = \"{A} + "\u01de": "\u0041\u0308\u0304", + // Ǟ = \"\={A} + "\u00c3": "\u0041\u0303", + // Ã = \~{A} + "\u0100": "\u0041\u0304", + // Ā = \={A} + "\u0102": "\u0041\u0306", + // Ă = \u{A} + "\u1eae": "\u0041\u0306\u0301", + // Ắ = \u\'{A} + "\u1eb0": "\u0041\u0306\u0300", + // Ằ = \u\`{A} + "\u1eb4": "\u0041\u0306\u0303", + // Ẵ = \u\~{A} + "\u01cd": "\u0041\u030c", + // Ǎ = \v{A} + "\u00c2": "\u0041\u0302", + // Â = \^{A} + "\u1ea4": "\u0041\u0302\u0301", + // Ấ = \^\'{A} + "\u1ea6": "\u0041\u0302\u0300", + // Ầ = \^\`{A} + "\u1eaa": "\u0041\u0302\u0303", + // Ẫ = \^\~{A} + "\u0226": "\u0041\u0307", + // Ȧ = \.{A} + "\u01e0": "\u0041\u0307\u0304", + // Ǡ = \.\={A} + "\u00c5": "\u0041\u030a", + // Å = \r{A} + "\u01fa": "\u0041\u030a\u0301", + // Ǻ = \r\'{A} + "\u1e02": "\u0042\u0307", + // Ḃ = \.{B} + "\u0106": "\u0043\u0301", + // Ć = \'{C} + "\u010c": "\u0043\u030c", + // Č = \v{C} + "\u0108": "\u0043\u0302", + // Ĉ = \^{C} + "\u010a": "\u0043\u0307", + // Ċ = \.{C} + "\u010e": "\u0044\u030c", + // Ď = \v{D} + "\u1e0a": "\u0044\u0307", + // Ḋ = \.{D} + "\u00c9": "\u0045\u0301", + // É = \'{E} + "\u00c8": "\u0045\u0300", + // È = \`{E} + "\u00cb": "\u0045\u0308", + // Ë = \"{E} + "\u1ebc": "\u0045\u0303", + // Ẽ = \~{E} + "\u0112": "\u0045\u0304", + // Ē = \={E} + "\u1e16": "\u0045\u0304\u0301", + // Ḗ = \=\'{E} + "\u1e14": "\u0045\u0304\u0300", + // Ḕ = \=\`{E} + "\u0114": "\u0045\u0306", + // Ĕ = \u{E} + "\u011a": "\u0045\u030c", + // Ě = \v{E} + "\u00ca": "\u0045\u0302", + // Ê = \^{E} + "\u1ebe": "\u0045\u0302\u0301", + // Ế = \^\'{E} + "\u1ec0": "\u0045\u0302\u0300", + // Ề = \^\`{E} + "\u1ec4": "\u0045\u0302\u0303", + // Ễ = \^\~{E} + "\u0116": "\u0045\u0307", + // Ė = \.{E} + "\u1e1e": "\u0046\u0307", + // Ḟ = \.{F} + "\u01f4": "\u0047\u0301", + // Ǵ = \'{G} + "\u1e20": "\u0047\u0304", + // Ḡ = \={G} + "\u011e": "\u0047\u0306", + // Ğ = \u{G} + "\u01e6": "\u0047\u030c", + // Ǧ = \v{G} + "\u011c": "\u0047\u0302", + // Ĝ = \^{G} + "\u0120": "\u0047\u0307", + // Ġ = \.{G} + "\u1e26": "\u0048\u0308", + // Ḧ = \"{H} + "\u021e": "\u0048\u030c", + // Ȟ = \v{H} + "\u0124": "\u0048\u0302", + // Ĥ = \^{H} + "\u1e22": "\u0048\u0307", + // Ḣ = \.{H} + "\u00cd": "\u0049\u0301", + // Í = \'{I} + "\u00cc": "\u0049\u0300", + // Ì = \`{I} + "\u00cf": "\u0049\u0308", + // Ï = \"{I} + "\u1e2e": "\u0049\u0308\u0301", + // Ḯ = \"\'{I} + "\u0128": "\u0049\u0303", + // Ĩ = \~{I} + "\u012a": "\u0049\u0304", + // Ī = \={I} + "\u012c": "\u0049\u0306", + // Ĭ = \u{I} + "\u01cf": "\u0049\u030c", + // Ǐ = \v{I} + "\u00ce": "\u0049\u0302", + // Î = \^{I} + "\u0130": "\u0049\u0307", + // İ = \.{I} + "\u0134": "\u004a\u0302", + // Ĵ = \^{J} + "\u1e30": "\u004b\u0301", + // Ḱ = \'{K} + "\u01e8": "\u004b\u030c", + // Ǩ = \v{K} + "\u0139": "\u004c\u0301", + // Ĺ = \'{L} + "\u013d": "\u004c\u030c", + // Ľ = \v{L} + "\u1e3e": "\u004d\u0301", + // Ḿ = \'{M} + "\u1e40": "\u004d\u0307", + // Ṁ = \.{M} + "\u0143": "\u004e\u0301", + // Ń = \'{N} + "\u01f8": "\u004e\u0300", + // Ǹ = \`{N} + "\u00d1": "\u004e\u0303", + // Ñ = \~{N} + "\u0147": "\u004e\u030c", + // Ň = \v{N} + "\u1e44": "\u004e\u0307", + // Ṅ = \.{N} + "\u00d3": "\u004f\u0301", + // Ó = \'{O} + "\u00d2": "\u004f\u0300", + // Ò = \`{O} + "\u00d6": "\u004f\u0308", + // Ö = \"{O} + "\u022a": "\u004f\u0308\u0304", + // Ȫ = \"\={O} + "\u00d5": "\u004f\u0303", + // Õ = \~{O} + "\u1e4c": "\u004f\u0303\u0301", + // Ṍ = \~\'{O} + "\u1e4e": "\u004f\u0303\u0308", + // Ṏ = \~\"{O} + "\u022c": "\u004f\u0303\u0304", + // Ȭ = \~\={O} + "\u014c": "\u004f\u0304", + // Ō = \={O} + "\u1e52": "\u004f\u0304\u0301", + // Ṓ = \=\'{O} + "\u1e50": "\u004f\u0304\u0300", + // Ṑ = \=\`{O} + "\u014e": "\u004f\u0306", + // Ŏ = \u{O} + "\u01d1": "\u004f\u030c", + // Ǒ = \v{O} + "\u00d4": "\u004f\u0302", + // Ô = \^{O} + "\u1ed0": "\u004f\u0302\u0301", + // Ố = \^\'{O} + "\u1ed2": "\u004f\u0302\u0300", + // Ồ = \^\`{O} + "\u1ed6": "\u004f\u0302\u0303", + // Ỗ = \^\~{O} + "\u022e": "\u004f\u0307", + // Ȯ = \.{O} + "\u0230": "\u004f\u0307\u0304", + // Ȱ = \.\={O} + "\u0150": "\u004f\u030b", + // Ő = \H{O} + "\u1e54": "\u0050\u0301", + // Ṕ = \'{P} + "\u1e56": "\u0050\u0307", + // Ṗ = \.{P} + "\u0154": "\u0052\u0301", + // Ŕ = \'{R} + "\u0158": "\u0052\u030c", + // Ř = \v{R} + "\u1e58": "\u0052\u0307", + // Ṙ = \.{R} + "\u015a": "\u0053\u0301", + // Ś = \'{S} + "\u1e64": "\u0053\u0301\u0307", + // Ṥ = \'\.{S} + "\u0160": "\u0053\u030c", + // Š = \v{S} + "\u1e66": "\u0053\u030c\u0307", + // Ṧ = \v\.{S} + "\u015c": "\u0053\u0302", + // Ŝ = \^{S} + "\u1e60": "\u0053\u0307", + // Ṡ = \.{S} + "\u0164": "\u0054\u030c", + // Ť = \v{T} + "\u1e6a": "\u0054\u0307", + // Ṫ = \.{T} + "\u00da": "\u0055\u0301", + // Ú = \'{U} + "\u00d9": "\u0055\u0300", + // Ù = \`{U} + "\u00dc": "\u0055\u0308", + // Ü = \"{U} + "\u01d7": "\u0055\u0308\u0301", + // Ǘ = \"\'{U} + "\u01db": "\u0055\u0308\u0300", + // Ǜ = \"\`{U} + "\u01d5": "\u0055\u0308\u0304", + // Ǖ = \"\={U} + "\u01d9": "\u0055\u0308\u030c", + // Ǚ = \"\v{U} + "\u0168": "\u0055\u0303", + // Ũ = \~{U} + "\u1e78": "\u0055\u0303\u0301", + // Ṹ = \~\'{U} + "\u016a": "\u0055\u0304", + // Ū = \={U} + "\u1e7a": "\u0055\u0304\u0308", + // Ṻ = \=\"{U} + "\u016c": "\u0055\u0306", + // Ŭ = \u{U} + "\u01d3": "\u0055\u030c", + // Ǔ = \v{U} + "\u00db": "\u0055\u0302", + // Û = \^{U} + "\u016e": "\u0055\u030a", + // Ů = \r{U} + "\u0170": "\u0055\u030b", + // Ű = \H{U} + "\u1e7c": "\u0056\u0303", + // Ṽ = \~{V} + "\u1e82": "\u0057\u0301", + // Ẃ = \'{W} + "\u1e80": "\u0057\u0300", + // Ẁ = \`{W} + "\u1e84": "\u0057\u0308", + // Ẅ = \"{W} + "\u0174": "\u0057\u0302", + // Ŵ = \^{W} + "\u1e86": "\u0057\u0307", + // Ẇ = \.{W} + "\u1e8c": "\u0058\u0308", + // Ẍ = \"{X} + "\u1e8a": "\u0058\u0307", + // Ẋ = \.{X} + "\u00dd": "\u0059\u0301", + // Ý = \'{Y} + "\u1ef2": "\u0059\u0300", + // Ỳ = \`{Y} + "\u0178": "\u0059\u0308", + // Ÿ = \"{Y} + "\u1ef8": "\u0059\u0303", + // Ỹ = \~{Y} + "\u0232": "\u0059\u0304", + // Ȳ = \={Y} + "\u0176": "\u0059\u0302", + // Ŷ = \^{Y} + "\u1e8e": "\u0059\u0307", + // Ẏ = \.{Y} + "\u0179": "\u005a\u0301", + // Ź = \'{Z} + "\u017d": "\u005a\u030c", + // Ž = \v{Z} + "\u1e90": "\u005a\u0302", + // Ẑ = \^{Z} + "\u017b": "\u005a\u0307", + // Ż = \.{Z} + "\u03ac": "\u03b1\u0301", + // ά = \'{α} + "\u1f70": "\u03b1\u0300", + // ὰ = \`{α} + "\u1fb1": "\u03b1\u0304", + // ᾱ = \={α} + "\u1fb0": "\u03b1\u0306", + // ᾰ = \u{α} + "\u03ad": "\u03b5\u0301", + // έ = \'{ε} + "\u1f72": "\u03b5\u0300", + // ὲ = \`{ε} + "\u03ae": "\u03b7\u0301", + // ή = \'{η} + "\u1f74": "\u03b7\u0300", + // ὴ = \`{η} + "\u03af": "\u03b9\u0301", + // ί = \'{ι} + "\u1f76": "\u03b9\u0300", + // ὶ = \`{ι} + "\u03ca": "\u03b9\u0308", + // ϊ = \"{ι} + "\u0390": "\u03b9\u0308\u0301", + // ΐ = \"\'{ι} + "\u1fd2": "\u03b9\u0308\u0300", + // ῒ = \"\`{ι} + "\u1fd1": "\u03b9\u0304", + // ῑ = \={ι} + "\u1fd0": "\u03b9\u0306", + // ῐ = \u{ι} + "\u03cc": "\u03bf\u0301", + // ό = \'{ο} + "\u1f78": "\u03bf\u0300", + // ὸ = \`{ο} + "\u03cd": "\u03c5\u0301", + // ύ = \'{υ} + "\u1f7a": "\u03c5\u0300", + // ὺ = \`{υ} + "\u03cb": "\u03c5\u0308", + // ϋ = \"{υ} + "\u03b0": "\u03c5\u0308\u0301", + // ΰ = \"\'{υ} + "\u1fe2": "\u03c5\u0308\u0300", + // ῢ = \"\`{υ} + "\u1fe1": "\u03c5\u0304", + // ῡ = \={υ} + "\u1fe0": "\u03c5\u0306", + // ῠ = \u{υ} + "\u03ce": "\u03c9\u0301", + // ώ = \'{ω} + "\u1f7c": "\u03c9\u0300", + // ὼ = \`{ω} + "\u038e": "\u03a5\u0301", + // Ύ = \'{Υ} + "\u1fea": "\u03a5\u0300", + // Ὺ = \`{Υ} + "\u03ab": "\u03a5\u0308", + // Ϋ = \"{Υ} + "\u1fe9": "\u03a5\u0304", + // Ῡ = \={Υ} + "\u1fe8": "\u03a5\u0306", + // Ῠ = \u{Υ} + "\u038f": "\u03a9\u0301", + // Ώ = \'{Ω} + "\u1ffa": "\u03a9\u0300" // Ὼ = \`{Ω} + +}; + +/* eslint no-constant-condition:0 */ + +/** + * This file contains the parser used to parse out a TeX expression from the + * input. Since TeX isn't context-free, standard parsers don't work particularly + * well. + * + * The strategy of this parser is as such: + * + * The main functions (the `.parse...` ones) take a position in the current + * parse string to parse tokens from. The lexer (found in Lexer.js, stored at + * this.gullet.lexer) also supports pulling out tokens at arbitrary places. When + * individual tokens are needed at a position, the lexer is called to pull out a + * token, which is then used. + * + * The parser has a property called "mode" indicating the mode that + * the parser is currently in. Currently it has to be one of "math" or + * "text", which denotes whether the current environment is a math-y + * one or a text-y one (e.g. inside \text). Currently, this serves to + * limit the functions which can be used in text mode. + * + * The main functions then return an object which contains the useful data that + * was parsed at its given point, and a new position at the end of the parsed + * data. The main functions can call each other and continue the parsing by + * using the returned position as a new starting point. + * + * There are also extra `.handle...` functions, which pull out some reused + * functionality into self-contained functions. + * + * The functions return ParseNodes. + */ +class Parser { + constructor(input, settings) { + this.mode = void 0; + this.gullet = void 0; + this.settings = void 0; + this.leftrightDepth = void 0; + this.nextToken = void 0; + // Start in math mode + this.mode = "math"; // Create a new macro expander (gullet) and (indirectly via that) also a + // new lexer (mouth) for this parser (stomach, in the language of TeX) + + this.gullet = new MacroExpander(input, settings, this.mode); // Store the settings for use in parsing + + this.settings = settings; // Count leftright depth (for \middle errors) + + this.leftrightDepth = 0; + } + /** + * Checks a result to make sure it has the right type, and throws an + * appropriate error otherwise. + */ + + + expect(text, consume) { + if (consume === void 0) { + consume = true; + } + + if (this.fetch().text !== text) { + throw new ParseError(`Expected '${text}', got '${this.fetch().text}'`, this.fetch()); + } + + if (consume) { + this.consume(); + } + } + /** + * Discards the current lookahead token, considering it consumed. + */ + + + consume() { + this.nextToken = null; + } + /** + * Return the current lookahead token, or if there isn't one (at the + * beginning, or if the previous lookahead token was consume()d), + * fetch the next token as the new lookahead token and return it. + */ + + + fetch() { + if (this.nextToken == null) { + this.nextToken = this.gullet.expandNextToken(); + } + + return this.nextToken; + } + /** + * Switches between "text" and "math" modes. + */ + + + switchMode(newMode) { + this.mode = newMode; + this.gullet.switchMode(newMode); + } + /** + * Main parsing function, which parses an entire input. + */ + + + parse() { + // Create a group namespace for the math expression. + // (LaTeX creates a new group for every $...$, $$...$$, \[...\].) + this.gullet.beginGroup(); // Use old \color behavior (same as LaTeX's \textcolor) if requested. + // We do this within the group for the math expression, so it doesn't + // pollute settings.macros. + + if (this.settings.colorIsTextColor) { + this.gullet.macros.set("\\color", "\\textcolor"); + } // Try to parse the input + + + const parse = this.parseExpression(false); // If we succeeded, make sure there's an EOF at the end + + this.expect("EOF"); // End the group namespace for the expression + + this.gullet.endGroup(); + return parse; + } + + parseExpression(breakOnInfix, breakOnTokenText) { + const body = []; // Keep adding atoms to the body until we can't parse any more atoms (either + // we reached the end, a }, or a \right) + + while (true) { + // Ignore spaces in math mode + if (this.mode === "math") { + this.consumeSpaces(); + } + + const lex = this.fetch(); + + if (Parser.endOfExpression.indexOf(lex.text) !== -1) { + break; + } + + if (breakOnTokenText && lex.text === breakOnTokenText) { + break; + } + + if (breakOnInfix && functions[lex.text] && functions[lex.text].infix) { + break; + } + + const atom = this.parseAtom(breakOnTokenText); + + if (!atom) { + break; + } + + body.push(atom); + } + + if (this.mode === "text") { + this.formLigatures(body); + } + + return this.handleInfixNodes(body); + } + /** + * Rewrites infix operators such as \over with corresponding commands such + * as \frac. + * + * There can only be one infix operator per group. If there's more than one + * then the expression is ambiguous. This can be resolved by adding {}. + */ + + + handleInfixNodes(body) { + let overIndex = -1; + let funcName; + + for (let i = 0; i < body.length; i++) { + const node = checkNodeType(body[i], "infix"); + + if (node) { + if (overIndex !== -1) { + throw new ParseError("only one infix operator per group", node.token); + } + + overIndex = i; + funcName = node.replaceWith; + } + } + + if (overIndex !== -1 && funcName) { + let numerNode; + let denomNode; + const numerBody = body.slice(0, overIndex); + const denomBody = body.slice(overIndex + 1); + + if (numerBody.length === 1 && numerBody[0].type === "ordgroup") { + numerNode = numerBody[0]; + } else { + numerNode = { + type: "ordgroup", + mode: this.mode, + body: numerBody + }; + } + + if (denomBody.length === 1 && denomBody[0].type === "ordgroup") { + denomNode = denomBody[0]; + } else { + denomNode = { + type: "ordgroup", + mode: this.mode, + body: denomBody + }; + } + + let node; + + if (funcName === "\\\\abovefrac") { + node = this.callFunction(funcName, [numerNode, body[overIndex], denomNode], []); + } else { + node = this.callFunction(funcName, [numerNode, denomNode], []); + } + + return [node]; + } else { + return body; + } + } // The greediness of a superscript or subscript + + + /** + * Handle a subscript or superscript with nice errors. + */ + handleSupSubscript(name) { + const symbolToken = this.fetch(); + const symbol = symbolToken.text; + this.consume(); + const group = this.parseGroup(name, false, Parser.SUPSUB_GREEDINESS, undefined, undefined, true); // ignore spaces before sup/subscript argument + + if (!group) { + throw new ParseError("Expected group after '" + symbol + "'", symbolToken); + } + + return group; + } + /** + * Converts the textual input of an unsupported command into a text node + * contained within a color node whose color is determined by errorColor + */ + + + formatUnsupportedCmd(text) { + const textordArray = []; + + for (let i = 0; i < text.length; i++) { + textordArray.push({ + type: "textord", + mode: "text", + text: text[i] + }); + } + + const textNode = { + type: "text", + mode: this.mode, + body: textordArray + }; + const colorNode = { + type: "color", + mode: this.mode, + color: this.settings.errorColor, + body: [textNode] + }; + return colorNode; + } + /** + * Parses a group with optional super/subscripts. + */ + + + parseAtom(breakOnTokenText) { + // The body of an atom is an implicit group, so that things like + // \left(x\right)^2 work correctly. + const base = this.parseGroup("atom", false, null, breakOnTokenText); // In text mode, we don't have superscripts or subscripts + + if (this.mode === "text") { + return base; + } // Note that base may be empty (i.e. null) at this point. + + + let superscript; + let subscript; + + while (true) { + // Guaranteed in math mode, so eat any spaces first. + this.consumeSpaces(); // Lex the first token + + const lex = this.fetch(); + + if (lex.text === "\\limits" || lex.text === "\\nolimits") { + // We got a limit control + let opNode = checkNodeType(base, "op"); + + if (opNode) { + const limits = lex.text === "\\limits"; + opNode.limits = limits; + opNode.alwaysHandleSupSub = true; + } else { + opNode = checkNodeType(base, "operatorname"); + + if (opNode && opNode.alwaysHandleSupSub) { + const limits = lex.text === "\\limits"; + opNode.limits = limits; + } else { + throw new ParseError("Limit controls must follow a math operator", lex); + } + } + + this.consume(); + } else if (lex.text === "^") { + // We got a superscript start + if (superscript) { + throw new ParseError("Double superscript", lex); + } + + superscript = this.handleSupSubscript("superscript"); + } else if (lex.text === "_") { + // We got a subscript start + if (subscript) { + throw new ParseError("Double subscript", lex); + } + + subscript = this.handleSupSubscript("subscript"); + } else if (lex.text === "'") { + // We got a prime + if (superscript) { + throw new ParseError("Double superscript", lex); + } + + const prime = { + type: "textord", + mode: this.mode, + text: "\\prime" + }; // Many primes can be grouped together, so we handle this here + + const primes = [prime]; + this.consume(); // Keep lexing tokens until we get something that's not a prime + + while (this.fetch().text === "'") { + // For each one, add another prime to the list + primes.push(prime); + this.consume(); + } // If there's a superscript following the primes, combine that + // superscript in with the primes. + + + if (this.fetch().text === "^") { + primes.push(this.handleSupSubscript("superscript")); + } // Put everything into an ordgroup as the superscript + + + superscript = { + type: "ordgroup", + mode: this.mode, + body: primes + }; + } else { + // If it wasn't ^, _, or ', stop parsing super/subscripts + break; + } + } // Base must be set if superscript or subscript are set per logic above, + // but need to check here for type check to pass. + + + if (superscript || subscript) { + // If we got either a superscript or subscript, create a supsub + return { + type: "supsub", + mode: this.mode, + base: base, + sup: superscript, + sub: subscript + }; + } else { + // Otherwise return the original body + return base; + } + } + /** + * Parses an entire function, including its base and all of its arguments. + */ + + + parseFunction(breakOnTokenText, name, // For error reporting. + greediness) { + const token = this.fetch(); + const func = token.text; + const funcData = functions[func]; + + if (!funcData) { + return null; + } + + this.consume(); // consume command token + + if (greediness != null && funcData.greediness <= greediness) { + throw new ParseError("Got function '" + func + "' with no arguments" + (name ? " as " + name : ""), token); + } else if (this.mode === "text" && !funcData.allowedInText) { + throw new ParseError("Can't use function '" + func + "' in text mode", token); + } else if (this.mode === "math" && funcData.allowedInMath === false) { + throw new ParseError("Can't use function '" + func + "' in math mode", token); + } + + const _this$parseArguments = this.parseArguments(func, funcData), + args = _this$parseArguments.args, + optArgs = _this$parseArguments.optArgs; + + return this.callFunction(func, args, optArgs, token, breakOnTokenText); + } + /** + * Call a function handler with a suitable context and arguments. + */ + + + callFunction(name, args, optArgs, token, breakOnTokenText) { + const context = { + funcName: name, + parser: this, + token, + breakOnTokenText + }; + const func = functions[name]; + + if (func && func.handler) { + return func.handler(context, args, optArgs); + } else { + throw new ParseError(`No function handler for ${name}`); + } + } + /** + * Parses the arguments of a function or environment + */ + + + parseArguments(func, // Should look like "\name" or "\begin{name}". + funcData) { + const totalArgs = funcData.numArgs + funcData.numOptionalArgs; + + if (totalArgs === 0) { + return { + args: [], + optArgs: [] + }; + } + + const baseGreediness = funcData.greediness; + const args = []; + const optArgs = []; + + for (let i = 0; i < totalArgs; i++) { + const argType = funcData.argTypes && funcData.argTypes[i]; + const isOptional = i < funcData.numOptionalArgs; // Ignore spaces between arguments. As the TeXbook says: + // "After you have said ‘\def\row#1#2{...}’, you are allowed to + // put spaces between the arguments (e.g., ‘\row x n’), because + // TeX doesn’t use single spaces as undelimited arguments." + + const consumeSpaces = i > 0 && !isOptional || // Also consume leading spaces in math mode, as parseSymbol + // won't know what to do with them. This can only happen with + // macros, e.g. \frac\foo\foo where \foo expands to a space symbol. + // In LaTeX, the \foo's get treated as (blank) arguments. + // In KaTeX, for now, both spaces will get consumed. + // TODO(edemaine) + i === 0 && !isOptional && this.mode === "math"; + const arg = this.parseGroupOfType(`argument to '${func}'`, argType, isOptional, baseGreediness, consumeSpaces); + + if (!arg) { + if (isOptional) { + optArgs.push(null); + continue; + } + + throw new ParseError(`Expected group after '${func}'`, this.fetch()); + } + + (isOptional ? optArgs : args).push(arg); + } + + return { + args, + optArgs + }; + } + /** + * Parses a group when the mode is changing. + */ + + + parseGroupOfType(name, type, optional, greediness, consumeSpaces) { + switch (type) { + case "color": + if (consumeSpaces) { + this.consumeSpaces(); + } + + return this.parseColorGroup(optional); + + case "size": + if (consumeSpaces) { + this.consumeSpaces(); + } + + return this.parseSizeGroup(optional); + + case "url": + return this.parseUrlGroup(optional, consumeSpaces); + + case "math": + case "text": + return this.parseGroup(name, optional, greediness, undefined, type, consumeSpaces); + + case "hbox": + { + // hbox argument type wraps the argument in the equivalent of + // \hbox, which is like \text but switching to \textstyle size. + const group = this.parseGroup(name, optional, greediness, undefined, "text", consumeSpaces); + + if (!group) { + return group; + } + + const styledGroup = { + type: "styling", + mode: group.mode, + body: [group], + style: "text" // simulate \textstyle + + }; + return styledGroup; + } + + case "raw": + { + if (consumeSpaces) { + this.consumeSpaces(); + } + + if (optional && this.fetch().text === "{") { + return null; + } + + const token = this.parseStringGroup("raw", optional, true); + + if (token) { + return { + type: "raw", + mode: "text", + string: token.text + }; + } else { + throw new ParseError("Expected raw group", this.fetch()); + } + } + + case "original": + case null: + case undefined: + return this.parseGroup(name, optional, greediness, undefined, undefined, consumeSpaces); + + default: + throw new ParseError("Unknown group type as " + name, this.fetch()); + } + } + /** + * Discard any space tokens, fetching the next non-space token. + */ + + + consumeSpaces() { + while (this.fetch().text === " ") { + this.consume(); + } + } + /** + * Parses a group, essentially returning the string formed by the + * brace-enclosed tokens plus some position information. + */ + + + parseStringGroup(modeName, // Used to describe the mode in error messages. + optional, raw) { + const groupBegin = optional ? "[" : "{"; + const groupEnd = optional ? "]" : "}"; + const beginToken = this.fetch(); + + if (beginToken.text !== groupBegin) { + if (optional) { + return null; + } else if (raw && beginToken.text !== "EOF" && /[^{}[\]]/.test(beginToken.text)) { + this.consume(); + return beginToken; + } + } + + const outerMode = this.mode; + this.mode = "text"; + this.expect(groupBegin); + let str = ""; + const firstToken = this.fetch(); + let nested = 0; // allow nested braces in raw string group + + let lastToken = firstToken; + let nextToken; + + while ((nextToken = this.fetch()).text !== groupEnd || raw && nested > 0) { + switch (nextToken.text) { + case "EOF": + throw new ParseError("Unexpected end of input in " + modeName, firstToken.range(lastToken, str)); + + case groupBegin: + nested++; + break; + + case groupEnd: + nested--; + break; + } + + lastToken = nextToken; + str += lastToken.text; + this.consume(); + } + + this.expect(groupEnd); + this.mode = outerMode; + return firstToken.range(lastToken, str); + } + /** + * Parses a regex-delimited group: the largest sequence of tokens + * whose concatenated strings match `regex`. Returns the string + * formed by the tokens plus some position information. + */ + + + parseRegexGroup(regex, modeName) { + const outerMode = this.mode; + this.mode = "text"; + const firstToken = this.fetch(); + let lastToken = firstToken; + let str = ""; + let nextToken; + + while ((nextToken = this.fetch()).text !== "EOF" && regex.test(str + nextToken.text)) { + lastToken = nextToken; + str += lastToken.text; + this.consume(); + } + + if (str === "") { + throw new ParseError("Invalid " + modeName + ": '" + firstToken.text + "'", firstToken); + } + + this.mode = outerMode; + return firstToken.range(lastToken, str); + } + /** + * Parses a color description. + */ + + + parseColorGroup(optional) { + const res = this.parseStringGroup("color", optional); + + if (!res) { + return null; + } + + const match = /^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i.exec(res.text); + + if (!match) { + throw new ParseError("Invalid color: '" + res.text + "'", res); + } + + let color = match[0]; + + if (/^[0-9a-f]{6}$/i.test(color)) { + // We allow a 6-digit HTML color spec without a leading "#". + // This follows the xcolor package's HTML color model. + // Predefined color names are all missed by this RegEx pattern. + color = "#" + color; + } + + return { + type: "color-token", + mode: this.mode, + color + }; + } + /** + * Parses a size specification, consisting of magnitude and unit. + */ + + + parseSizeGroup(optional) { + let res; + let isBlank = false; + + if (!optional && this.fetch().text !== "{") { + res = this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/, "size"); + } else { + res = this.parseStringGroup("size", optional); + } + + if (!res) { + return null; + } + + if (!optional && res.text.length === 0) { + // Because we've tested for what is !optional, this block won't + // affect \kern, \hspace, etc. It will capture the mandatory arguments + // to \genfrac and \above. + res.text = "0pt"; // Enable \above{} + + isBlank = true; // This is here specifically for \genfrac + } + + const match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(res.text); + + if (!match) { + throw new ParseError("Invalid size: '" + res.text + "'", res); + } + + const data = { + number: +(match[1] + match[2]), + // sign + magnitude, cast to number + unit: match[3] + }; + + if (!validUnit(data)) { + throw new ParseError("Invalid unit: '" + data.unit + "'", res); + } + + return { + type: "size", + mode: this.mode, + value: data, + isBlank + }; + } + /** + * Parses an URL, checking escaped letters and allowed protocols, + * and setting the catcode of % as an active character (as in \hyperref). + */ + + + parseUrlGroup(optional, consumeSpaces) { + this.gullet.lexer.setCatcode("%", 13); // active character + + const res = this.parseStringGroup("url", optional, true); // get raw string + + this.gullet.lexer.setCatcode("%", 14); // comment character + + if (!res) { + return null; + } // hyperref package allows backslashes alone in href, but doesn't + // generate valid links in such cases; we interpret this as + // "undefined" behaviour, and keep them as-is. Some browser will + // replace backslashes with forward slashes. + + + const url = res.text.replace(/\\([#$%&~_^{}])/g, '$1'); + return { + type: "url", + mode: this.mode, + url + }; + } + /** + * If `optional` is false or absent, this parses an ordinary group, + * which is either a single nucleus (like "x") or an expression + * in braces (like "{x+y}") or an implicit group, a group that starts + * at the current position, and ends right before a higher explicit + * group ends, or at EOF. + * If `optional` is true, it parses either a bracket-delimited expression + * (like "[x+y]") or returns null to indicate the absence of a + * bracket-enclosed group. + * If `mode` is present, switches to that mode while parsing the group, + * and switches back after. + */ + + + parseGroup(name, // For error reporting. + optional, greediness, breakOnTokenText, mode, consumeSpaces) { + // Switch to specified mode + const outerMode = this.mode; + + if (mode) { + this.switchMode(mode); + } // Consume spaces if requested, crucially *after* we switch modes, + // so that the next non-space token is parsed in the correct mode. + + + if (consumeSpaces) { + this.consumeSpaces(); + } // Get first token + + + const firstToken = this.fetch(); + const text = firstToken.text; + let result; // Try to parse an open brace or \begingroup + + if (optional ? text === "[" : text === "{" || text === "\\begingroup") { + this.consume(); + const groupEnd = Parser.endOfGroup[text]; // Start a new group namespace + + this.gullet.beginGroup(); // If we get a brace, parse an expression + + const expression = this.parseExpression(false, groupEnd); + const lastToken = this.fetch(); // Check that we got a matching closing brace + + this.expect(groupEnd); // End group namespace + + this.gullet.endGroup(); + result = { + type: "ordgroup", + mode: this.mode, + loc: SourceLocation.range(firstToken, lastToken), + body: expression, + // A group formed by \begingroup...\endgroup is a semi-simple group + // which doesn't affect spacing in math mode, i.e., is transparent. + // https://tex.stackexchange.com/questions/1930/when-should-one- + // use-begingroup-instead-of-bgroup + semisimple: text === "\\begingroup" || undefined + }; + } else if (optional) { + // Return nothing for an optional group + result = null; + } else { + // If there exists a function with this name, parse the function. + // Otherwise, just return a nucleus + result = this.parseFunction(breakOnTokenText, name, greediness) || this.parseSymbol(); + + if (result == null && text[0] === "\\" && !implicitCommands.hasOwnProperty(text)) { + if (this.settings.throwOnError) { + throw new ParseError("Undefined control sequence: " + text, firstToken); + } + + result = this.formatUnsupportedCmd(text); + this.consume(); + } + } // Switch mode back + + + if (mode) { + this.switchMode(outerMode); + } + + return result; + } + /** + * Form ligature-like combinations of characters for text mode. + * This includes inputs like "--", "---", "``" and "''". + * The result will simply replace multiple textord nodes with a single + * character in each value by a single textord node having multiple + * characters in its value. The representation is still ASCII source. + * The group will be modified in place. + */ + + + formLigatures(group) { + let n = group.length - 1; + + for (let i = 0; i < n; ++i) { + const a = group[i]; // $FlowFixMe: Not every node type has a `text` property. + + const v = a.text; + + if (v === "-" && group[i + 1].text === "-") { + if (i + 1 < n && group[i + 2].text === "-") { + group.splice(i, 3, { + type: "textord", + mode: "text", + loc: SourceLocation.range(a, group[i + 2]), + text: "---" + }); + n -= 2; + } else { + group.splice(i, 2, { + type: "textord", + mode: "text", + loc: SourceLocation.range(a, group[i + 1]), + text: "--" + }); + n -= 1; + } + } + + if ((v === "'" || v === "`") && group[i + 1].text === v) { + group.splice(i, 2, { + type: "textord", + mode: "text", + loc: SourceLocation.range(a, group[i + 1]), + text: v + v + }); + n -= 1; + } + } + } + /** + * Parse a single symbol out of the string. Here, we handle single character + * symbols and special functions like \verb. + */ + + + parseSymbol() { + const nucleus = this.fetch(); + let text = nucleus.text; + + if (/^\\verb[^a-zA-Z]/.test(text)) { + this.consume(); + let arg = text.slice(5); + const star = arg.charAt(0) === "*"; + + if (star) { + arg = arg.slice(1); + } // Lexer's tokenRegex is constructed to always have matching + // first/last characters. + + + if (arg.length < 2 || arg.charAt(0) !== arg.slice(-1)) { + throw new ParseError(`\\verb assertion failed -- + please report what input caused this bug`); + } + + arg = arg.slice(1, -1); // remove first and last char + + return { + type: "verb", + mode: "text", + body: arg, + star + }; + } // At this point, we should have a symbol, possibly with accents. + // First expand any accented base symbol according to unicodeSymbols. + + + if (unicodeSymbols.hasOwnProperty(text[0]) && !symbols[this.mode][text[0]]) { + // This behavior is not strict (XeTeX-compatible) in math mode. + if (this.settings.strict && this.mode === "math") { + this.settings.reportNonstrict("unicodeTextInMathMode", `Accented Unicode text character "${text[0]}" used in ` + `math mode`, nucleus); + } + + text = unicodeSymbols[text[0]] + text.substr(1); + } // Strip off any combining characters + + + const match = combiningDiacriticalMarksEndRegex.exec(text); + + if (match) { + text = text.substring(0, match.index); + + if (text === 'i') { + text = '\u0131'; // dotless i, in math and text mode + } else if (text === 'j') { + text = '\u0237'; // dotless j, in math and text mode + } + } // Recognize base symbol + + + let symbol; + + if (symbols[this.mode][text]) { + if (this.settings.strict && this.mode === 'math' && extraLatin.indexOf(text) >= 0) { + this.settings.reportNonstrict("unicodeTextInMathMode", `Latin-1/Unicode text character "${text[0]}" used in ` + `math mode`, nucleus); + } + + const group = symbols[this.mode][text].group; + const loc = SourceLocation.range(nucleus); + let s; + + if (ATOMS.hasOwnProperty(group)) { + // $FlowFixMe + const family = group; + s = { + type: "atom", + mode: this.mode, + family, + loc, + text + }; + } else { + // $FlowFixMe + s = { + type: group, + mode: this.mode, + loc, + text + }; + } + + symbol = s; + } else if (text.charCodeAt(0) >= 0x80) { + // no symbol for e.g. ^ + if (this.settings.strict) { + if (!supportedCodepoint(text.charCodeAt(0))) { + this.settings.reportNonstrict("unknownSymbol", `Unrecognized Unicode character "${text[0]}"` + ` (${text.charCodeAt(0)})`, nucleus); + } else if (this.mode === "math") { + this.settings.reportNonstrict("unicodeTextInMathMode", `Unicode text character "${text[0]}" used in math mode`, nucleus); + } + } // All nonmathematical Unicode characters are rendered as if they + // are in text mode (wrapped in \text) because that's what it + // takes to render them in LaTeX. Setting `mode: this.mode` is + // another natural choice (the user requested math mode), but + // this makes it more difficult for getCharacterMetrics() to + // distinguish Unicode characters without metrics and those for + // which we want to simulate the letter M. + + + symbol = { + type: "textord", + mode: "text", + loc: SourceLocation.range(nucleus), + text + }; + } else { + return null; // EOF, ^, _, {, }, etc. + } + + this.consume(); // Transform combining characters into accents + + if (match) { + for (let i = 0; i < match[0].length; i++) { + const accent = match[0][i]; + + if (!unicodeAccents[accent]) { + throw new ParseError(`Unknown accent ' ${accent}'`, nucleus); + } + + const command = unicodeAccents[accent][this.mode]; + + if (!command) { + throw new ParseError(`Accent ${accent} unsupported in ${this.mode} mode`, nucleus); + } + + symbol = { + type: "accent", + mode: this.mode, + loc: SourceLocation.range(nucleus), + label: command, + isStretchy: false, + isShifty: true, + base: symbol + }; + } + } + + return symbol; + } + +} +Parser.endOfExpression = ["}", "\\endgroup", "\\end", "\\right", "&"]; +Parser.endOfGroup = { + "[": "]", + "{": "}", + "\\begingroup": "\\endgroup" + /** + * Parses an "expression", which is a list of atoms. + * + * `breakOnInfix`: Should the parsing stop when we hit infix nodes? This + * happens when functions have higher precendence han infix + * nodes in implicit parses. + * + * `breakOnTokenText`: The text of the token that the expression should end + * with, or `null` if something else should end the + * expression. + */ + +}; +Parser.SUPSUB_GREEDINESS = 1; + +/** + * Provides a single function for parsing an expression using a Parser + * TODO(emily): Remove this + */ + +/** + * Parses an expression using a Parser, then returns the parsed result. + */ +const parseTree = function parseTree(toParse, settings) { + if (!(typeof toParse === 'string' || toParse instanceof String)) { + throw new TypeError('KaTeX can only parse string typed expression'); + } + + const parser = new Parser(toParse, settings); // Blank out any \df@tag to avoid spurious "Duplicate \tag" errors + + delete parser.gullet.macros.current["\\df@tag"]; + let tree = parser.parse(); // If the input used \tag, it will set the \df@tag macro to the tag. + // In this case, we separately parse the tag and wrap the tree. + + if (parser.gullet.macros.get("\\df@tag")) { + if (!settings.displayMode) { + throw new ParseError("\\tag works only in display equations"); + } + + parser.gullet.feed("\\df@tag"); + tree = [{ + type: "tag", + mode: "text", + body: tree, + tag: parser.parse() + }]; + } + + return tree; +}; + +/* eslint no-console:0 */ + +/** + * Parse and build an expression, and place that expression in the DOM node + * given. + */ +let render = function render(expression, baseNode, options) { + baseNode.textContent = ""; + const node = renderToDomTree(expression, options).toNode(); + baseNode.appendChild(node); +}; // KaTeX's styles don't work properly in quirks mode. Print out an error, and +// disable rendering. + + +if (typeof document !== "undefined") { + if (document.compatMode !== "CSS1Compat") { + typeof console !== "undefined" && console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your " + "website has a suitable doctype."); + + render = function render() { + throw new ParseError("KaTeX doesn't work in quirks mode."); + }; + } +} +/** + * Parse and build an expression, and return the markup for that. + */ + + +const renderToString = function renderToString(expression, options) { + const markup = renderToDomTree(expression, options).toMarkup(); + return markup; +}; +/** + * Parse an expression and return the parse tree. + */ + + +const generateParseTree = function generateParseTree(expression, options) { + const settings = new Settings(options); + return parseTree(expression, settings); +}; +/** + * If the given error is a KaTeX ParseError and options.throwOnError is false, + * renders the invalid LaTeX as a span with hover title giving the KaTeX + * error message. Otherwise, simply throws the error. + */ + + +const renderError = function renderError(error, expression, options) { + if (options.throwOnError || !(error instanceof ParseError)) { + throw error; + } + + const node = buildCommon.makeSpan(["katex-error"], [new SymbolNode(expression)]); + node.setAttribute("title", error.toString()); + node.setAttribute("style", `color:${options.errorColor}`); + return node; +}; +/** + * Generates and returns the katex build tree. This is used for advanced + * use cases (like rendering to custom output). + */ + + +const renderToDomTree = function renderToDomTree(expression, options) { + const settings = new Settings(options); + + try { + const tree = parseTree(expression, settings); + return buildTree(tree, expression, settings); + } catch (error) { + return renderError(error, expression, settings); + } +}; +/** + * Generates and returns the katex build tree, with just HTML (no MathML). + * This is used for advanced use cases (like rendering to custom output). + */ + + +const renderToHTMLTree = function renderToHTMLTree(expression, options) { + const settings = new Settings(options); + + try { + const tree = parseTree(expression, settings); + return buildHTMLTree(tree, expression, settings); + } catch (error) { + return renderError(error, expression, settings); + } +}; + +var katex = { + /** + * Current KaTeX version + */ + version: "0.11.1", + + /** + * Renders the given LaTeX into an HTML+MathML combination, and adds + * it as a child to the specified DOM node. + */ + render, + + /** + * Renders the given LaTeX into an HTML+MathML combination string, + * for sending to the client. + */ + renderToString, + + /** + * KaTeX error, usually during parsing. + */ + ParseError, + + /** + * Parses the given LaTeX into KaTeX's internal parse tree structure, + * without rendering to HTML or MathML. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __parse: generateParseTree, + + /** + * Renders the given LaTeX into an HTML+MathML internal DOM tree + * representation, without flattening that representation to a string. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __renderToDomTree: renderToDomTree, + + /** + * Renders the given LaTeX into an HTML internal DOM tree representation, + * without MathML and without flattening that representation to a string. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __renderToHTMLTree: renderToHTMLTree, + + /** + * extends internal font metrics object with a new object + * each key in the new object represents a font name + */ + __setFontMetrics: setFontMetrics, + + /** + * adds a new symbol to builtin symbols table + */ + __defineSymbol: defineSymbol, + + /** + * adds a new macro to builtin macro list + */ + __defineMacro: defineMacro, + + /** + * Expose the dom tree node types, which can be useful for type checking nodes. + * + * NOTE: This method is not currently recommended for public use. + * The internal tree representation is unstable and is very likely + * to change. Use at your own risk. + */ + __domTree: { + Span, + Anchor, + SymbolNode, + SvgNode, + PathNode, + LineNode + } +}; + +export default katex; diff --git a/adoc/logos/Khronos_Tagline_500px_June18.png b/adoc/logos/Khronos_Tagline_500px_June18.png new file mode 100644 index 0000000000000000000000000000000000000000..41eb490ee0ff46c281daf58545fbba3d296217b5 GIT binary patch literal 35792 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�jp%MaClex$x_UwUc!p` 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 M7n_O-YyG_0_le$X+c_6|v!!H*f=Yet|pmg`x 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

    qio8BR5HL>}1T>T4a<7~`#)`QFR*7%MWS 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

    w-!QHp$?Gd%zgys5sCh5qGRA1L7duGcw%B!svW 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

    2fiYA+W~BJim$gv&jOU`pRYX>FHx_~!+7De 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

    )q1niL9?di`D8k;ZU5_n}j zJ_*$5mhzzxTG3L-<@3nY(E#d*#XyLo_bz+a6B0OE<#0U9HZ8UV;k20xhaw9k!30#H zk%fpShF1v!Ts;z*8)A@fzCd*~5d3YhHM+>c>)Wmo>0YrW`4Y0i$>(EVVSo!bqA2Qd8t9D=6gFMFo`munqKc7d3`{&zQaF1W5@Y{ zGSHvqlLB(18x~GZxb-K|pCO2#JrxQ@Zdl|~iPoj-q$mOL9dv?=D7|YP53~1UhO4q_ zcOb~LFM~DY78Cr!pCIcqpIiWEWlJnfr1XD?U$)_8Fk#Sd6Dg_yJGP z2F}w%XJvaCO}@>L5@}?MUIr3>28>%i2|oL(HKTp(w$}hFL4czP9p>_EL5Gvh9g-SZ zY+biP_Vd~&A=+ojCUxgj0`we0HH9iBLSFn?>yWOf;29~UO7DWKfQx%yR=wi--yxq5 zPp7aaYTQvk z;WYXdXT~2ucO0+I-gdxcg)6ZKjBOirpI^g?+2NHIGjT6(5Lnhat4k)kIulYnbo>1` z80+#;>!G;$Uo&lEz_<_~{aB`Z)^O0B^2yb7fk%InYjY0Y<6;{|NP8-u#ra3*Njc#T zN@@gSLcFhh3Z?23h{u2PLB%UJ-Piry|c1hYTD z4kku0%4L>CkSliOt5B9@olDd&1AERJjR2#9eUi@D|7j>So-M=FDLs3)YC+j$-bbO6*O8)I;P;qjry za7L~N@<%0K)Wr5%BJm|#2KRYOJ3Y!?;zi`ORVM+%Fd<06oU8N|u7WI-a~NP(rQCy$ALB9mliG!9$hwp^DDKNo?`#?z}QCagg>?Q`&)sZlo?dET)HfA@4}S|4eZJu+#{dQF|_{;J#?YU zWkO^0Gp9r1$F7h28TvL=64KY-AupYHTzP#>T{XJaVQOvt1b(xtl6@d~(12l`Hd10C zblt?TZ@PVVxI1P*jVm^5Q%;C(J)mEA3}+!L>P`I|Ix}C{nmd_PGx+h9AW1Z@=1OA6 zFSjB@?9@ijOCBfljc|kVj@e-p6PzFVzq(7_H+h0MOEVoi&Xtp`?~W7dgrMQp$f|Em z_X6V!%E|#8BLDk)Oz0qeBLmQ_Z{MpOuPZX&)C)>7jip0bM5EYQ?Onn}7EE(dAK-sg=*uy?%@R)^s4n8L&e@MZdK7ndwJ#g54J` zGyXF)wY3SB_1v(_a?F@XT~NfXnPVn+!8T+bLj*0C*44TiDrZ;5h5I8tc2VC<%~*E@ zwcIMRiFC546Eje{&?wA~jLdHpQZS1igxR-}0w_r!OX2OO3#WBOY|yO+#k{{J6HSx= zoiO*59OJAEeTzE6pCzod&~Hcq_S8RBEd(=0540s8HeLt}%pw$1X0l^J*{2NTcsb-5 zWoF~!@Xv=KJUWKV#n=*HoJI zpLgfo^|x!`vpc&w4kF`DfI$Ria46C;GtP=36b;g=Lz9jmH9#`2KV@A7^oAl`hi0S- zgieUV2otJ8XrW7!me3)z{GJ<3a^p_+{oOz0s^R9`^PKWM=Q+kx+jrslP`^X<7C}SQ zAr7xrxste!$ear_>)_{Zq(B6gHudWL29b!1`fjV!LF02Z&q$)}H3| z&$}5om1nLu-SK}==g!DgKZA|WM$e?F83EJ4rH|i6*b}ku4)qm&^^nOza+GcHn*KF1 zPE?$TDmb5omP+9Jot!|95?_zS{RkUfV-c^ zf*v_AE;36(?2S?t^m#+oeYr}=JEUG8hYm9rRk47kr2pFzI7R9pJpV<00Tl{eUAs0{ ztH9CP_Ll%bQ4VPW*a7Cwvn~CsJ|S*{5}rM*JRoFGAU`d-ulrgkd~efhqUI~6Y@+JX zeu(3K^uRB;mpr)<*bqz2M9k3ca@MGCx_AIYpWFO}y{e!Y6X%$)_6PNo=<2^~-2X39 z!VIWj_xGGlvuz#v{Jx~5Q|Rmw7d}1oPfPswDl+FhL1}0-!c;Fsf~hwp@!PYvrp}XF zXLPSjpSJdv5!$AM-)*rB@zWt(uN!>SMYw3WdKUr>E=Fq(qsA`i+IsE1yD_n~(^-18K)r2;5~1C026 z=#$=UcKe}N{nrw9TS-Z#g7j~lF2F(IV8Sgl*@LiKp>Ix`w!F+fw&TogG?v8#lz;f$ zd7aDk=aV+Nk9w-vdPb?q*}{gR?*ByN=3+kHi5qbMO^k*6Ct`0-N)nV-pz0##j#|d5 zw#gFQjYpCIh!ad zjZsn}oID%*qxle65(Ve8-q#7E9HI{Q`DC76p951`PHYM-9f|rw{Nz*U2-#O_nVH*} zWEwR!@F5I|==+&=UuB_YY9RZF;asX`%c~eNSl8$raB^)gM>@|Jv+=zoL)=jyumoCx zChURWASf<((g2|epaG*{%ZURk-0d3OVCQSnr~M}}K04_oBkX`TM1&JyV{2y{nJa;2 zhmK*oYQ$An@XI6(q5QW!uT`t~vVPIsYb776A*xbGjk&J2XAhB?<6qQ|C+w}!Vt{uLo z97-#aWc?RU&hx*C6vY08wpgrczjp&7BC1D8=jX0K*YVLfoHQnKWaw$$hrpxY>jT)h zwPlX=yCRBvz%&B#?zAxYk|cQvLdj$0*Q#k?0PmsQa7Y$$e4T!>GHr64FMBU;u_ImC zk6wK!dhRy$*TcJij)?jxS2HzU23xNU4yLGpVahiyFq#czcnOS;;!aEGVg&+4LCa*6 zQuDpck?oIMt9K0{Vrq7uCwYk1L7SGdO+-3?MKyMMWPev(q-kZ-Q{p)rkaqdMts2vXs>EjTCTNgox%b-6CexLu7e*Y>F9N(O&)D1K@EW!pDL$ao&FK!-3 zed8sSo8pNf`huu0RQ#T%TjD`)k)1)wxc1u-PxHD5d{vB@};5K1eI^jcj^7 zZ@IYQnE1wnrZJtn{a*|}NownLafjMLE(&Gwe^as)xjl@W&v}Jyu1sxVWG6;F zsYg&^g|eu~8@aih_`=;lGl!XJj0^@zf154Fx6I%JO)1Wqsk%$=UVM-eqi9; zZYW)%^r5SBnQijP-XIH7@^e}NrP4?_0eIv`90{krQBFaEWB{pWe3E)%|MGUdl-yJd zLVK;2Ph(fA(V6+q>m%*5nC-<631D3Vc<`6rLSA|Hf>C>qT(WU#HS7ofL`{nyRSsI1 z{*S^qC)f@^<+t9`>-JO13Gsqt5uL#3&u@Og_>$6ib-Ph{=ilelSf#^xh?I=#h=W)} zE!71Ft3pEY5gY}B37dJu8<1oOd)|-M1xuD0-k30Pcoj?uBX7zjBg(Dl&(#c9u7JX$ zaDNYviM-BKowZvZWP*SM)v5)1hEK0tt@&0pxscI;PK5)qg5&Dk?ygosE?XJ|N*qObuahK%qGt z90S*Zb74AA+Ax3uPJh$3!~3Q66W2Dt{;`BDi2@k`Ff7?twrkj<+84^21Rx=?Mg0_7 z>L43-RQg!r;Aui`kod;h(#kUs%4vrMEd1-h7zAm6umV^Ghn+35f6!J>eo0>J=DR7r*IdhGqm2dXMO zyzxi^n5QE=AC2lwd>)Xd8q5d9)A`sRiJC7XAr8n?t|vmZEafFbu_ zAUW@obpmHNV8;@aDhq85@|RI`mLNxf^6I|lRq2ozRZT@B6ZP~Ijm&t}UVey>+j@*x z4SPKC1u3u`-A%SMO5ba{D{C5lJ4G#(2}Wtc`O%U~!^87IoaCyBc}aulQ1orV<~+)4 z@VC{nW~mU0c!4{%(Jk%EB5vXSZKKMmaC>9Dc&P40M!5Y!psJ1yhee{d9MAi^x~B0W zM!Qd29NY`|Kw1}+g`j$A+p+gMwX3VvR_o&(ix}S{7vmA+m)%Ri2lyq{67r&W%MCX^ zh*$Clgt0m($>~uH3tE``9V+dlx`7wN*bHajs|0c-9ltG@PLXOB2Npl=D+Edm5y3E4 z=uc>3m)xP9*`u2F!CS3U(;seBI_0DYL7F!tgDv_eaTSGfzlJ>yMXc$#>#cgt5EpC} z5b>XY1^k~Sw3Dg_#C25NnXhc9$X{>779p);O^BKz(atP-Z|!cXiq7s-Kw!-WXyJ8> z5T~}u4?F_tf|tKX-Eaj+p{1+e_&>(V=q4jR8Kg^d?X&5-4TJkZ6fPA#gFuQT9*4r* z=0YR&Iq?KdWtpgFu*(y%2>yKs6@{YVaOB2wfza8<1+TG*9Y#d3eZb5v)KnVd@}I3^QZUVNYs zb)SH&!K(B5V#C>Brb`6~mXbYyHqb*rS*~Y`s>vdc6^U?r{P!08F-8!$Nfb2s3)NN? z*Dz!wmaitw;6e6%<(mT%bg8qeQ)I`miVq-DgldpwlZkPsokMqfFTiawXwbVApemxH zF^z@WOSrdZ;HQcOZKefZEdH}o(3=IdHE6Ohu&-)J0S8IC5Iaaqx@jP6fQBpy)$VhH z(!A`56{XG!@xaw7GCW{2XU6-K4e>E&HI>T3jokVpC1IZ;jr0@Jx$hHELRxGF_D9In*Yi)HO z4&ftu@pNX1wz6GiWX*h#4#=f~YA=JgNjfOHXLrwJN0eoh$JJ-4aq=hFoz(r+ z)ygw+lfMHX0l=Ufgkj_u_t|fwSX3TEK!Go1D6(Vdk%Fx_1N^6Z>`&^b>jj1xYucIx zqt}nZqtti)vDR8B7luQ?uFzze=ZrnM3y)c~#5wx7fpBYk7qh`$WN>O}oUQrQ z;RF|4ZIi)~{EwQ>^#Au?n)lD>Z1`%Ur_LsKOkTSEFx|*sEkm)}q{~Bo{KnTWjk-RO zPKi%7@~}Jd7s@+xm54ugp++2%Bvxy49`jDo@dbn+Sn74}8moBD}jFUCcb|*n*do zP0&ge1T!SdiC=0f_rFtIXQTZPZUQyKD8teqynArAKwJuz_F@~n=Hnj3 zZJwWPZFnYk9t$=l{s<^we~)K7d}6!%%RC!XA*sCys^gB(B=kHFInt{Payov-!3xz? z2rHfDu0US#$IlpU4;ZU@N0jLLkL7&eti0Nn?FWla<9Hn@ZD{TZInZ7iR9tqXp2zM# zV+MtoEJV&p+EheoB?;M3HZ>XBXa8t@UO&Z#sLrrLh~kZ>=)>wgLP)ysZJAgn7w;-e@5= zymgk@6fd(Hg5gRa!o4`1{6vl$4pnD&^xE)tf2ud24T|f7lUy=!Q@VIzwJXMcHrK1g z2oHumT!fAEr)R^SxZ}$Noco%N;4HedU~~5gV$WT`mh4I4$(dsb?&@ruS*fS zEbGM!O#RlrdxocsSh}brE#sHY*MeGrQ=` z9w{lve)9W^fL?IXpIdM~DM-!4Y-FHiaiBlE$TC>v#>%@^WOpRoDw78DV_W~N%ys4> zycP`dgyyXrS!Vof_P#gNY6HTnk_B-7>&?CM(falq0CN0xvJqt?^xPfMCqlfd%WacD zzTXd8MkISn+R`t#e6GHJpE5i&*){pO>*&P&52~&@?s8=;>x*O^hei^7YjWGr>x)>8 zav%~;1L05QdDmBrq8b)-Zb>S0MwJVS9l_El_@>t6<`3&pr)LluKe{2jf4{O0X%F^A zv5hL1TazN$^m`vjCg#CJZH2vF#v3E!WD_;=r1FdTKcVPS6^|!rY1Z4XCutmA2@^ZP zsq4cNst3!Fvi7#49Wxp2kB18~?Pcmo}n%LEE2 zqm^krB+nsk6eD=ce`~=X^Z;S*sXREMuL9T9&9gAxw+Fp(2!hX`oD#HbpzE1!xxs;C z962sNGEVga7-doM;Yz##E0Mq1!>scQ;5=28RCP|8>To(Z;Z4VAFBi4@sW=bYV~3Ha ze=Sns7_&HuIY8S845FkG+G!U-W2=J`{_jb&qRq*eNtYk814yTGJbPV;cE$Roa6+@OHqlbTzfN4!7ST&WddoT5(uU8fgqc+I4!^V zZzCgKckIUIJM_h=`f?04?akbv?G3avUn|e*rA`+8Z(3;~=*9)cB0lH*y0trBxjP>Z z=3v8_Y>j20AM4QX2%hTWJLcWrpvr%ClAHu7j7^6wm<@+ks~l9hE3$ zk&82>MY^}%xE~`Hi-#9WEs>mFP5bhv88t6*QxzFcXBTgToyoSi?$w~}wPfg9=^x>nNts)=GIQOs3 z%>IDQCEI0Yd!+&0WChAIWP^tL*~XcX(~=s5p{$Myy=Q{Ues4Rkv^T&H%0zxYT9Io) z2`e{sGpns;Ow4a49XeLW)D{!VUTDUzAtIm=oQ23)>$X=jBillDELbP;)m9ZCl^h9bEjap2{^&3#EJ3)1CH{M31B-$6VX zWMv%7VFj;;UOKPt`p`w2v5u{2vIf0I;#yAB#&7zt0{#0XL28REf$Mh42_H`?t_dA} z+qL7lG7p=3QJ%n|_dhNL-Ee7lG0D_dtA4pAKB@)>TPX+!C!^>*iu_J3eiXA@-AF`~ zy$Xeme`8T5qJnU-`M0!Ls-P#{tEraBpXW+g~00u_yhBn z-+VrWqIetK4Xk9BddKfjBwnThwEgs+UUb71iJNpNQHh)rRg24R$E3y+%mVBYczWz_ z7s!(@(1CIwL%!d7f_-7zNPHEv`Z5~!Rv1U~G#!$H*E z6L;QYJz6xc!Jdhe?acUZp;>gF!tAH+U?r5)!SL5~+875D{EEnBGbBZMCB1@@1yuf< zK%Jt;RsO?wM=!6~!e;|T+Fa-94(TSk6lEW4?jmx3)-%ZTkP%C2sLpT)RWpbD!zY3i z_iiP%F(;?dNpQ^^$@2PFjL4HZtK*EFIB?QK0+i`}E))uN!g7VO-`qCPj1!3J5tO?n zHsd)6IBBe$o%=Bc$D*<#6mf7!ExN1-K(AIuM>Y~|w!sd(FGUWMFv&vO&uf6mO@}Y# zOg98mN9&hY4KgIG$Bz7u%rlS@d z5Yb97WcVqBMIw;pSY4|2-e(Y-bKVkPI?2UJWw1HR|y#CE^J$Z866=o-$~ za3%3QD?;WngCjS8G|nV$ypb?d4MpF4KPnLKA+izTq&li2-weyO z!AE1$m4o&yhiR<&mgBj`TgRB*3A2Kc!{^7*DHhtbpGtDj~B71=l@j;?c z)$jUDFXigVqlUA8kUPl)-a`(SOQ&Qod0bz=I%*e_xRbHJBgt6Mr3CZGP-B_Q5SNIk z)oDlLc6PQMqDd0UDg$h1)_- ztT-?Pqrk+cC&(+y-R}GQ3?26*O4Uz|a<1_)B0b;WF4@8YCC^4Ff~f+W!NzqZT~f zNZynsNZfW`>J)BiEUlRAbtSfEncgcOk0aV=pnAMF{fz!AsrC;#I8?oEVI;z~=Zc_=3e?cm`UML~5 z-s2S%>22ChD3pmf1c55J0dmQg@X>NXRbOlDkGmyY@qXoPDAKaZVXPkh+~L( zNB$Q32W(UU4E74XQCD<)mbHKJ#NP6_#3ERfyRiC(F69^1$J7Cb!yiGFh}s{NMGQF2 z+UsKFg*oM8#T%2`)QhYWvl?_R!n=ba$QnJyHmpr0r3tFRik!jnnXwWHt+rAA8$#4u zr?xJ0GBcAEK)@4q6fKc<%OV}Q9H~-Kg$pL5+Q{xyV?B>YZ}!Y@FTYyM0kx<{L@3Ae zs^RG(Dvb!z0~kbwnQ*E3H)%S8ECq_EORSuj>nm`q+}cmswSf*J2?mgXW`%Ax4#G+C<%M8wOV7R-f zX4|tVZSkNolT|ec*fqm?iIz>(3Vhe?>Uc>~RT^nkSQ#?55DFllbZtsp-eev!iuD4` zHycb^EWO%4&ry;x-F^46L9w>G@|XyNfcK5tj(wnNOsmre)PFO1R5A@tgiB*(5}D)4QNxxh2P%iGje7Tf1^j|5A(;TT5sTW7hX3wYejtx*D1FKagG&z&?3-P z6;Ie=Ou9gX6Rp4B+?Ga)wD9*(C?V=g(^1`BF+WjkYZvZl9Hq=a?o6W`n%-o$B{HjN z!HtZZD60(_?O`$7sTJa|HI=V&nm{4i9zdNS0=@_?(LhCHzCv#%)UZ45)tkylD%U}s zlM-sl%m^jj%r>cp?JQTVJn~N=t)wZCiuqXmWH6(oc-VhsYkP0%$B$I0VuImNEsV^9 z_#Pg88zk~l89*-V(y=QB&J*0ln9K{esw9<8mDGJAd$7b-7mxc6*VJ?7^%S|Yh}|bt z@#|zXG1Ud6^Ln&3(yFG%DqGlVg^fZw!F~Y||L6|cZ#CM)HC&NJ&{O; zuF!U+5fw)C*1?7zIJu2HK!d9L6G${$!6w{lzTZE9^Rihi+fBE*I{Ijt+viuC8~^4> z?h&|%evs^a1NLWi_^JCj^F-&jWzh|9Bn640b`>brGm!0W@02B&LbZ?`;`B6X?A(Qn zcmuMwr59$Qbo|l58Y2UO{FgB7i|jL1aFqx3qazO|e})Y>J^w1Le?5$s+lkq^G5;3? z^ANXAuENmh#{4T8Tb0G8)@ZXi0_>GV=D@!qftlx3vq$aS%V8RvXuZ?esvk1;y%^50 z>WJmNl^)TmC@-&1EUjnO>B-$jlVM#Ym1R%AOksa?Vo^_PP}2Uam0;WtfF;r04PR3i z+wdWlSl|00Xd$^y>pI}PAEe#a=c{$0dM)Wd^O3AjKDRKWt$sG^TgBlg=-Vlv(-oCZ zLEzhBX!{LAFM5-DOoS7J4~B0na)lm!YU)+Gt?yh-fGJ+gZl)RFuo=%7CAhnhi+9P* zeH>M(Q=ya~WRZND@nM}xlNbOy4`2ltbo3MK(EVfoztFEmk%)*qdDp1E-jIZ~1~aoF z&ot3$yl$C|k5E?M!Id^}wha_8gvom#+kGAJHcPje*=haMDPwy@&3NXwg`m9p4CoO# z2-aeCjsevWx|16TEwl%cPS>E690idXeZ^dqayMRKA=2HbRyreFH<5WAE7L1MO|1rx z2m7Xfn(*ccD6xmWHI6#VnBp&pTSh*ko~&xO#Ng)}ni0e!Z}SC11i{3&&7oK&c@?|L zaZPw~*kNR;!@2VUs0Hik+mzd*XFu>~PC+*P)j^)uF5Sl00GK5V6G^V)1odjd|CV+y z*%lh{f>U`>9<9@F@NA0RDbMfWsr$ zY%$+F>1E%|K86P~JMO{09V|C=2hF3%7Kb>lB{zdkXxb@- z7m>8g&8Y9Z<14EBqcU43mQUysiF-?+C0(Df%;S1aYO_Rq<0TT#77KD|6>;8x9AFBi zBLZfW#gD7ljAF)jN$1w6w*9w$nC@(`lmZhW5Wxst$8yun^Je%?5ng^(-Bn+4Rc^gE zrLBU`gzQ!9emCwfZAw2IsLxnc zw|)oRp#>jKHEG+m=FUAW6Z5NEN1ZRlq=+@NN&xzE*yzq8!FGmxbk(~{{X zW=rWdS2$Hsd(vS0chi3FQT9kmyp-Gkc`}l3$INp~SFWTpYc+`6oEeG4h_u$keZwbp zzIJ;S-4O30#+6TRBDtb6Pjg^Lju(pAQ>B6YO3qMS5hes@xy?-hj^1c4P9C&wl?JFM zC80QIZ_=?%|JH)U1P_WR7yt!IWpyHVHom2-2db~TBeO9DS3&vw_li@G*7mX@72|yM zGZk82X8Bbh?T1xt$HJgSW&Hj{`@YC8D3$UcwIjnfsMM@@T{}Y_Wnd>(4^f9Mrn9KA zVqt({C2cZ7TUV%|?fM$-2P4w4C^hVgH~tbpR-T&)7~nyw24M|O*=!Fm#OiL z2*u$D?6emnE_XVGk2q}1_uW1B+Kr`7@5xG-{S1nOQiZ}wonra~V$2LT30QqZ?+O%& z<6j4M*R7vX9pAOC-Dv&D;FwsoOK9<2^!fVG#SLj(a$8?K7e2f9Id){U26PzwjKMpb zv%k@_3kkCc1(GHX#Y*9c?+ z6J2QX7`Q=VzX9CP3BoXv?idm<8iW}M;tr!RJqT|{ zy8kv5R+}W|9h6T&ShZRm4UN~U%)DBqCvGf@Jjwa%9yshYi3yS?yU4&beHJ- z>@Exae}w9KW3oeC@O-mbOCH${(d!XK0;jmprs$~`%>5U%)(O90oT=(Ccw@p&My?l{_P)qDZ4htAhs+; zYSKAr5L;fu8_1p91jwM=WA@R?9cMozV@N$uqO`gdW-9zRb6q9zzBKeII4C*r2DWlf zp7w#=VD9R9-uB)hDbTD&6ds7y8Ql3Rid4wAuA0Y^)y<@I#!t@tuqjHjjQLf>PhQ40 zi5pzR5|O4BsP#H3nHdf>)$vgeT^<9I8}$Vkp#v*X>o2p=Ztd#%?#$Y^BPUEG9T7oQ z#S1ouQK70GL$t-_ZQ8!Cp+4fwI*RnSiS_IUWZ2>w=3bI^tGQaed8ZQTedsyCZle{| z*yOgPu6702hs^6x>RS%zYcb|mY6TH%1989HW-rc_Cra*mt4p8|kTiQ!%MH3{@eAttdypm(|Lb z!O#R{L3)L6m0g?P9v$3$mE<7N;J(HS1?7aH-b3Hz>O!zP+9?NC7-9I$$B|}5MJ6ow zR9iMO=8Vu37+gcm%WCHi%zl#xAVjHM8oM8P0kby{bI5VaLLy711Os1Cq{D@5nT~Ts zI$;KQj!8=o63SWyb;w<~M!utBeR=yT#{Ts1!OMw|ES-hlJm!8p&y-jKuz_*1DM;^E z%7Y<@0434?6r#eYx7Q4E+MxNJmRP(X8aIUUe^D2{)6srDY~B*T+DZ0C^yr7{z{sae zRzf{b7b}{sbq`P2($?BBeh4>2pId68Rr}z~TunWF6>|p3Hef<@GB_Cu({eUI19Uu> zp9(CKst0ol5H=bxO?ZK+BR22Xf&MCZd#0FnmK+4?q-Etn!M8}==qUke>ZaMuJp9V{ z#*qQDL)&>H#HA$$5#06HWntCK? zoAha_u%A7!3e9+E22wMe)1qWCDa%cV;vRrn(Pj~hTw=N(!6yn-lg)o$_2AL~R3VjG&b~dBwQN zzVzW*7H#@PyVU8OV5BG9Cl-(1+)JdC?XmIO-+}|1f56tOGZOe}d>LB9at+hh8mQb> zRmr>QPI7`a6sRZES9^i7l;rIQJQz=kNFLXH)Jz7fsLED}H;U0{yOkBdIqZi_3|KAB zrLWE(H*E;G*y8dq{yIR_YL{0oE`JPKwv?P&2XqvYO?{%4`p*|S3k6jC#zM^mv) zVfN|EA=BLXjh>WR@~%H3(TxgC>X19x2jxM!1M6Ww&Ci)hvx&1e5F8;TJOjTx_c}Q7a*!sYz;kR#F8y-)7 z19?f$9FPeANxu`Irf4b`bPc-M6}O$ztbqw#7(`mx#QPubR64%tIf9!#1o~(IxRe17 zV!;x!6x##o+HLQfl}X7EBx{VPP(pw%bJ7O=!(Z%7!N+8kk#=qD?;yW=72hlu^wh<( ze0)7Q@52z?{{^$YG5OVOx9mArwMV#(NFv{GH{$a(lxmn7W_)FRmi&i&?CBqj(|0Fh7R zHmf>42Q)SwO0x;h14YG{cu=7QY!&@ZPu_GKE~!>?gt#WL4h5AjED=K~y_Bx>tM|pX z=8=aUxzvanM}n;r|FaA&hFK2ts%PZ$HM5Cj~&paWFid=|K9q%1kqR{sKk02IASwLnO%@F6=Jbf}Vu4zQ%R#4ag zHOAAF2jmC%on~D5Rd5HkwZ$HT4MOYeoJRe-}GU2Io)!W<#k^Y@ldd zA2ED`<{T#xnONb3$i(X20WwJ;K--UyTM{Kk^%?OuVYsHS_r-dtf~Nk~45-Z%`GLfS z^E(yoJ-%v}YpxrEKtp~#5uFN`9H3rbQ)V>E4gWZBDE6FW8t#i|V3-V7>?z=qBQz8- z1BegWcq349W4*?bTK4ZY99kjGO2zAaWQNhv6 zTZi0awMr#c-#aM_^8-%mRzsN0M=9)0@(>cCp)8(FU{A^grMX=5(v0$&ZEr5p-fH;) zVM500bzTs6{$}4^asU;-#rt8wDNuMh5~=WV)O=JXb;?@OFfi0NBCYkjDwS;;;XB`% z7~k198I8=f($C)1Rm{qcB|q?7Z1OY8j9g1mt&hk>0HdXJlZDZ!e^{PBmm`ZlDewAl zO;cfNjt^N2zMk^3Zz=B7_jh?JX>S`v6rKbj_2ddr5!8vUevZ_V0*hu`=|h)z=1m6k zMk6=M?%3(bG6WR`zgO7sYxpVuWMY>TIE$}#nNn*OXw2t^Ma>GesMD`af9-9bZIZ|e zh}|uvi{zrvVX$^$CFs06v5>iP52OeYH4h|pC&e87OqN~(^QxhYD@E3)E`oi9`}5D- z-kZV)mi#4s`%a2x#q^uPF9M~m<@}HWdrAF*9S{`f?S-tqh}o(0g%iRLIb8_#;l#Fr z9$V#QZfbB7niBcjXdS-Jl(0ZnEi%e^#2Ejt&avzFQ?w(a9(D~s1~CQbU2dq>rv+Ph zYEEu1k7e9b>&DRmwKd4y9^tEin-QAOl=Y^(${ei8aq@uoU8!E|ONt8UzScJ!&$Nd_zJ$qt^+tm4DDa?W?^Z$qeG4BM z9G3{smO6wxnzZE2g$)t?h1fY<<7Tyo0Tr*6+>x81E{1ccy3_bDl8z!ay=9Y!NBF%IwUY%f_44=v6VE zge-bPerQ*qK?hMe&LBe(P6`QQAbN`hF?`1LzHP^%Q8Ju+<)2GmfcNnA0aLb4dxEoh zv&Y)_+AIOgqc|e5MXM|3`K9g<}t9w5h~`UCR2E z>+b)yb3nT9rpR~%0k`KFP}S?Z+uM~IXCJhb@Cu>Nc6M;+mp|-srF-!*%$FRtNxM29 zy^iV4!L)EN>N~Gr7)VUx_>T)0h#vAhq@&nYceOAsPqiTdDnud^5-!(ttGsCB|m|N7c0oKZh7mGJ3obYO0ZOP8}r`~ znc}I-atY==HD@KDRNkSO~=F_4> zE=-?MmXqjiw(Tyj*lE!^YU*gj==vxz89yXwWbe zz=Ur;n!&XvC2j|FCaN}U#YjZgcG|+s+tNn;3eM8EW}$GM_Y9qB1R7=_GMFU`^%;}? z#!c8ua_jzc%+QIhNA4{zjci0g*f~u&7F0OlIMCaZa~6MpQOnA<6ZfoiT0be+^Gx3+5|=Dhz_( z5N*8%tK5({DT@XhHc0lIt>Ys)^$TgNxE(dUn%%pftHysciwIKd?1MP|(~~vbeL+DU zk3msw>F0`#*&}H#fd}k4(;-(K@|;6-Z@k#-ATbB`4MDVEBlU0&&aQ>2K#tI5TtmiY zPUhN4lUG3IY2DxWSRX59)FyoOMgB2bX}|U{flOP~iZD&Qivb8k{s5QbQww4C{B7P2 zBIM-;Zr)Wr9Z8Xt)!^lObX{|Y7jwLo2E;3vvi^42QK!`s<*rpTlAujN5X zU;eWkU!%eJ^0JZh#eXXN`Pp|z63%@8lg3Rpt65?5W_NbQ1O~M39mSl!#mc?P`uhH! z&dk<2q_S5uTDG~0OM;C$%6~NtH&>mlHwfKiEmT{#V`_Kyr_6$M%SMD=o8HtnLg4r$ zv8#gpJhz>2F=qiTMSF~rUEDeFGy1A2S2Td&qLn-)6zz5 z!~&g=t4=7e+4tle7kzRpG59OSDwc4@ywh@J%CO$w=Q{h2Ugm`$T8Pl#l+em2PO8*} zE{*Np3MS$RAzi00&+Vf*CZ)w8vfxqPZV7f7at$_teZ1ukN8Vg(J;I)ez6#t~H3&)a zpQzhd8fmy<9w*1$A5lhpjM!EU;(#VBLB*rF^Wbnc`*WV94@zK6i?nUj0`JW`MD?|!ED{AH~f$=+dS%^lTv-S zai4H}npJC?f5?U!k~g(~BGCfzhlSQ4hHBXKtxTO(0C-a`7A>E`{ z%O$Z|GLbvtTVNn5VisS$#eS0{!yRWqMYB(EP698x9OwsV~iZ5&ZH zco(@hZ0g4| zov~~VB2$Q3(g^#UflJU$njA=cpj5VOGu;dxtIHNa9q9p>m~-eX>s%1qpx2!MF(c_N z27GxQGY*quU}~cxTUF~Pe%bm?GH;56yjgn_>t40CI}#0T-$7@M=pj~B^EF?75;RO$ zfeF>_#oqNRyXl!xQ$KKoXva#bLsqB6{mjXBH5n@N3&tbE(?$V~kbU|pcn+zOJ(alo zwnL`OwC7{8l0^OL-x3P*YfGJQm)4v+hvVcgWVpQW1MpgK(TzcZxJs^5F07)f>Ed+L zU{PmA{>Mtin?mP6s_YgqC-GBrkWjnaMblxh4_0c>vl?<7iqbRPGDYML1doS*k}A!F ztJE7^7B@tV9K1Eou~?BJ*JXtuJi|BcURV<<5aA5dfKnS1lbL{kzKU9tzKaS~DJooKMV6KCKtqFF?BYpU#6+0;j4t@^u_o!t#5j)K;NF1t@&a{4!ofk5 zw|J5A*m}*swt=Q#VXkzs^O!gjIB`GFFJhJr49V2U zj|UF`HpX|cesd)FdMCC1qOA_}>FELxnttJtg^vCq3l?7Ae@vj`IFAb=YBCr$k_AZh zcG$ra>6+^-DNf`}i3Mf^YDjXi<(w9L6=3MmNjvB!E(5pXof8w?7V}#oq;WTR?bpP^ zhfi#_yZbQJ9zdtCb1$=FKt$s5&K7P+UGQ89t6BsE^ahmP4Gwr*aiZ9}Hh852WL95@EVU+I4qpv+$Qb7D+)doE z32;;!>g!_XyAYwLA)f=PN__VmpyuGAh850ysGCIDt_r#)u!~O4p?lFu#|jFMV$vrK z$Zea5;2hQee?i_=LA|K_Cax)Apz7`&_evrgST~`jjihXh5d3OOW>_QKf*6~-SE0|b zdXLMmLbtKg+6u7oly2o2vYLZ+xm^u~+3T?YF#gsx)@xP|8&PnPVy37K)HSweV`t7( zG;~CaO}>9FwwQA9x{%y*U%mBk_tW%KMaGUpVQ&}uMBZa)PDMYUua?Ey9X}IPWzP0V zXzU5lVvM6Xb9@Bt{X1nIRV~7$*{qdUjp$}{@b!W}D=UNx=WTR?cw@PiH8f;u9&k>& z{l9+|)B-T<#N^7hzX!OsjKTwUh5nY^?mzP0G*OM>fSm-cO#{?yLBsWM@{!d3oc5Zv zwrp=|9F-sPM*%4x{6u4g=0KwYC&k&xNIYda<@bx`Wzh#oK{-%s;gri+g?u$%kBOEq zGc2URk6GS5sw=NfjQeY#HwjsDc`?$G}LK+CPH_Rt1$$ zhIFxX8`m0J?Ia`O0ATUII*2fnznOcQ0N+&DJZ<-Ts!plXTnhKZqs{csvnzUq` z0jHXvfvFAoBsbc&bv*l+<<#crYF_vz{E>){%d*p-S;!79Gh29UNt@ZIQA5#+ zZqCfy-8I7Pha;gH%J-jv*e2yL6-HTt#%VQ8TE+uTXaLtvsBBJwwcu57K9BYL)gGKZ z2^<@+kDGD>J+-h87&ERJf%3ZDWCz!olQ@Z*Ki2+iB>Qey zAgJJB-&ppM)3BateC6UZsKPb$W~aMJI!8#;Q0U^jN6IITtFTi$STZHAyT8&17J1pXv5NxnLcLTevE1nZKL+Q{GvzD7YRB2 zZ{Rodm6^eFucdl5l+Kr_*0XdZ00F?y2Y-Ig5qkiye{8T)C!AwA&LP=Ezk5@Up@fyk z#whs=K{s7B99nlnH`k}SgZ|z<^635h`R8j97w8#xT)y`4!kIVzAeWWM*Rxv4dwv*R z;MW77PGgm-yqY<*nrt>hXcjU?{DwaGRH*lr6}aZas4q|Ivmi{Lm^dBf*gy%{P0Bt& zm*oM!+$N}PaUr7(5zk}YdvydA{u=)h_qYNHk0uYj;aei7NKZ!}iX*Gqd4m%ELqJXl z0)~lERhKRlr*9xT?TWSAWk+O-Ckcc~#K%fJ>~Weqj zNB!sTHDt_9`#qalZ!z&%hL^B>b8QMe4g5QJ6#ed1h9$JSvZ1`nE7cF2^F%rW#8&|$ z`ez|UblITU{w}GCHoc5;Ot%=DY&)c}4u%K`?|q+N|R2uDUzbWZKVL^Dd7VZd{!xDB6ox0klkRI<+0 z!4OxdLhLpau5xO4GnQLD@Y17Q=G1c;Z^qN|;4jRhp;LyXS$tGNm*040!F|`UV-Zyb zFS#W7_Ps0gxl6omAzfUw)EW|%ko+b*AuN6(JH}S6sC@Zh^>PnuEVN1 zA0LXRRe=jwKLFoOnFJVcE&*TPbV-SgDConKn|2!bfmKae_cvM9oX zH{4x4`}9oXOKaB47XOkQnS%1$9zmwippHAN-b>N@W_Z~_?qo8rO9$aT#V8A>2<$k@ z&q60-yla&pYdDwnZ*-OA!?u8|VN#mnf=`a=15&PM?NH=i+FK2~cW{w7uf+qD=Pnev z`w6SQEAqZR8sC(x+Ywn-=eGO7yy~ZG~QL%Y-ULb01&HDU+&Xf|JXY$S?&p zgzh8PK`syz_!s4ql^V9``CL%EV42ad+Ffk7AoCvh_$zrB#Ccbj_}?6TU3yL3-kWk& zE-U*IR$A`DLl;_z0!+IfqW~JET;B*B#AtFeC3-!ldZ9H(`I+;BIprDR*M<96p*=Ad z@T6g*C()+Jr8*}uy1cuLNvR&V6;_jz7!tXWV@Wvi-uQZ>7vIqaReeq#JDMz$29}Tc zGVzpAz?aIKXzK^cU%)(VpSFQIJMQYzb^?_YB%9B0=U?BiLjMx$&F8i%%66e&E6WRtL7s4WVE`kNB%`M4@Q-mbg^qx9ig<&uG6JZaL|a}-gUa(eg2MDSv) zy+(QUK4?jUxk@*_!T`Z9Ysec+X4TWX&|ND4Z7?&DS8u*Z6@xwEM#|P#sMLnxvzTPi zYE;Zf{Gr^!LrIxB1a&6_*O)6y6($be@(FA9W?xIU3ab}Vm-=QuVA`>P;BnJO<sNcur@3H$ zUhZOk`EBI^M~@xyb;qt_^43ObeYGD0){ug{sMOsq=}O1F6CqLC3HK#STb4-LG+PD? z*esfJ&C-t+Tt@lOuo%aE&&)s%l&pOi*>V$SeAGS2uw!&|)VEhqTNJ24f#c#ELWM(> zhHXkG>kCSbwdafXc0Yg!rPu4g8rmOvcJUfM6HX&A?6e6I7Rt9gDQ=|N zdH(0b21g3<;bgj)B9QF-7};GNXsVsElCrf&U{JWPg(_8}vUGw{96=SVs=sr2mO+JG zf4B!{=vGC8nvNC@ENU@+$2Qp7F7-&Vw0o~brCy{P73!^qmkV55 z&hNdY@gNJ|Q)0!qk$BGB^DBUw50Tr}`J{~{E)xkpgnlw zQEdh1u}Z`fIm{!M7h<+;Dbe0o4eO~6nAe20uw}XYI<&<~9Dl{nxdy@^I=H;g^6kgD zBllOWrRAt!0FUm5{7>C<{5?|&cqTx9>X5*3yhWmR!fJ^1v68lqP5rqA46In zo5~7dS4BP^bqu6xniFiLk7ZN$3QLQjkGM@`Wd{lxak#8}clt|ab0u-VjrUGs%#(Um z=ndW#g51ua%3}5Q=N{ZEX9?ossX5$(CTClajn4X{xlnVAZBlL1&E;#0RWpk|P7da; z5>UR%h20k)5vFYtpZ6Xo+oa?iS2}54%7k8_aoi@pzmR@&jzUa&KB0qY*tL_qj%}iK z41W`QdLY1K{O7FSplZH_iY}Hf+MdI-t^Ca0q%r}^EH(F}&+gi8!T3V-dFKX@v=@{Rsh#+}xr4*elKCUtT| zTnCgV_>99!6DRb@y>9t|>X>R_3^@dcJ-|b1-rVp1Q7=##XYO@hx$z4I9(n~Z2i%jM zQAA6CKT`7JwT_BJQ})nTJJ ziyQ@uvz4*2FiS4)wXmI*_wfx5?voCqm=u8Q?Ll*Mr}LrQcj-D69jXiYM?%b99r5>- zeH@`k%DLRBZ=hOoTZjo9#gp3KwifnG=!DSb1J{2!0dmpr;~AKGu?rH~+mbis2*if2 zE*7(D^i+R!2Ab02m*zv2BlA5~@3du~ue1Y;A09>@0Hd|nvFzHt7Q01;P~^05iD$vO z=AiFmH*OtJXZwm{&Qhp!B+jnFG3i%g6p8*qmwhfoxYFiAg!=-$DVCx{g-YAO7I$6R z-PSljg^^7in6qm)RrAUp%+xJIP~#b+bt= z?C9A=3l)_{;lC=~jR~W+g#7LhmuIg$Y;B)^dYpVt&bk0#aH2oQmfuOd?vG`LQSK=b zE}LYfhCzwp(^jvDG&j)(%7@_-%Ic6r(tbSe4)Vs4X8boHtv}HV@9b5w%;Wre<$iZX z#WnSF^45l>Rt!9De{7_ZFO-1&UJO5%$C0=CX5<|u=fLVNh?Jqsqxrnu{>r|rXHS$o zdiXpr&~3M!ar4@a=9t$nPAJ#B98w$cs`zj_Dk-0@NEBkFQ5ajf{<8`J62uPR@B zdxw>DXT0coO5{nmkao8LOY@LCSHH6%3InNNPt^kc=-6FCA>`P;&NXFg-JJ85VCnW% z37f~At%FB5_cllKp4X^EQo8jjRWuBe{!hz4!e6-R`2U^$rzg=`e}@ib{kh}UuhHM1 z8T;(+Uz-!Zu=?ts|NWOA?!+IZI(R23mGG5rTjPWa<8rHS7v0G<8I=4{YtL>i2nd{@9njd|fqRoFvK>W8o znQi{7yuGEK2Ycr!5gaCRLkuPL&wo63#P%hb4H(a~4u`pZvTYMo-#a_}sfELE#O$VH zzUrjQ+yTQvAFlVb9qWh~bk@tzbudrT+3VNpoqDeOXz~qO)^Oc;ync*k1V)#@{K!CXUk3FuD(NK-Uk}2P|&6Oy%$w=$AtN zV|2&14QP>jV>iOS;?vi0MP1e`NofE(7XYPa&tSpOxu4%J@x`pDG6J`M52#p}VVv+1%%cQY3!JB^T;M{wMb{RQLgEd>9hYfqHf47B(6X>?*XZ1h%j zn#~UJw|V^is`l5&tJdy$bCUsh9c(+u`0MHQ*9#_Boi{tv ziR`J-6iKHGQK7u8Z_N+rB@yT&2AH*rWl#6r6o_tfh*}5~O8yPj0k>kKU7WL>aIHSE zsIO}xsrIfVzO^q9Upzcg6S?@tF)ETc=fr;&Evh(TVYzU<0An%1m{8xyVk|s5GV!tc zvACS=|Hs&O2Q-y!d!PHfcf9vm_}-g0HWX&Y09R=a2uRJ`aYhVPL5g%0LFv*$C-c0* za}dxI0qHt4LvNvn#9@R9RcRqW0!lNq&>=v=cTj;7$;rqcaL};NK5MV_`>nP1K5M;3 zsbj>*>T>#)@AvIz4pbVm+9Da~P+lct!*Tq`hso^vKFBpQ-U@zZzEVjEm|K$`3XN?P z`9zSKQ@)@IUIw&4(e+n*SsI(BVt?~8_3f>p!F$@FoJB6i`8`C7eNRgb@zk1_^j0Xa zu*vT)f^`0--&TSt;wh z>{+z_ockx!+wME&XpXK5 zn|G#&m#sW$tLCHKsK-lHT2T$M zMlrSqo)XmF->L6M7Wv;$BbK52RPDM;@HbM(((K3~eB5>gR#q9S@4`1a&n>i}IORj` zweTtSlijlB15Uf6{AFY0v*s^=G~>kpkk&C2movVYO`k|CZ>zoBwqc8vbbCKj=J{Zy zlEjH<+s5QKMg{pA;7vIR?!|1V`1vVKt7BmyDC$X8NR4r{1U>1T=;nC5Nq1YcdE^##}s&{IESfyTI z|C+^^rW17zonOB0#d({v7!>=Z%I1Sp&Zohl9D+(iCnkhI8iXc{FIcPImNv`%Kzqvx zMPQqJPUzBaV>Y}g!i`U6w)HD6&{%)#fDc85T~A(n#ujtnunf2!U>6~9>tmZg2gN*- z8by!JLvl1;v~UWNO;*XCb5L`aX{d?6%6yKmiGMbrvD`l`8ne*(X7dlu5LF67#_rL_ zlN*eJPc>O3w9H+se`5p{$>f?##kE&HekP8Ac6b%^lHTu(K({}`YLknr%PQZ13ic0l zB6`}Sylws-w8X9~jJT^)CkrGw%XpVhw0pTI4HeOGIYLKXjjr#R2maI^Q55(nSLXE9 z{fvl~P}WPcar{xK=}jHLVY|!aD$D3{OxWCl=n}vW)!qmldXXd@vmcc!q zC#jC%MZ9jP8E%C-;t@cP(C6Fg>c{Sf)D;_hp4a=3=O<-p3{Ofz>-zRwj7qz|VzP>n ze~Fs=10QTkjSZIV{6}J)jJw-@Y4=V?viDh^_Xio4<0cHzss-0-O52s#tuL?Gj<=p9 zSm}%zwL@F<=AKv^e-t&IQ2pNeE6Tm+*3QpGs5mxkw0s$tdH4R-Spf3tcpm=(Z?4(L zFWj2$j#>n=>y6c;uN>I8w%M^y6Mnc8O8)0Zfiec#vZqN$@INuEbKt5wzkZ{jOOfoQ zaYtoy+<{+f18xr4na&q&>a1$K*?~CxBq|=OAP)LNfY63-#%qA~KJ6awCozrPC~Z&e zRa^Vri--R9B2vkIQclcFXbbi-QZBE~9OvdFKp4jvZXTD~kH>@2G%AK%19v58X82sH0xlFG+ z7e_T89PX%mQlk{68#8-7OHNW1edmMIE0P*&m7F>dFrBfH2c{r0e+9X#^ZmL&H>ugM z;q(kyI>zOoyQxqeig@@jX8?H8d>MSndj3mG=@8~rRD$BVBLz~NnNP$ToQAhDEIxO_XSp{*=MXg4 z@-fo$T$w0#t?wHB@F9Hc<}F0-@m7}em{v74n)&%I1y@|L3T*q7)|cLLzLAH+hp%TD z&`ux5mp8=UpMNi&L6Z05PRE94=-@Xro7K0-P;eKWJlM~n{0WLkuNd4d;Hps z+sk|_opy*-n_>^iQ14KT4eIKZ1A$G)mYpUiO6cRv(a~8O&62<~uA3`5^RIU~@l)m%P zs;*RO^V0xs?b1k$H!o*sh-h20vd*5;PexRUmF=hm$fRMW(8T#ioinLd=CZQ*G6{fR z^a%;onm}t5@%h50pk?Nkh=-Gp`z~KDE`DzRowvNQt^aJ(;=Lrjz|E|M-^OB>wCLWF zglLm_gHb9q=y`&ak~n@*M;UBZj~AiV7|%mdz$ivcS0QofLz-je5+^H$*V#>%O385y z8S_JSVBcKcCSVWtyL7jph4UNTXF8#B;Etcnx*}ZWG>K*%NSHKna?fSvwAvU21_y*{ zvVQ6+EN}L^al~;=I!9`)+|YEXJT>^*cZ-{f>gTa2Vn0%!X4bkqUPuB*IISKb#~Zv# zjP>q^YcD`4PR%)X!IHgmjPB&0UUHx#BnL-;87m3-pKJO*ZEr2)^k?!hX zI?nVSB1n-#pU-BgasJ>BxS+TiI)8{Qh)9QY+k3pQLpw$WgqY6T)0~y|k@aMx!*gzk zyUN)H5mVYcd()stn6Y8ym?n4^t+y2JI(c}av?ot3a zwQ}G?n>fFRp9vxT>rdZ%tk6wD(?!J@99r156_!EBKY6Wu2YfvW&gm3i^z;j`g?PH& z{<3=kgmMr_ONBFnA8&E>B0X`DE`LHl0Gb4D&D@q$eCJFK$6SeRuhmIi?V%sZ9;LD@ z3>pHYM9(X*J2hD4G`vd#HUPRg^ksWqqFjw*CBN1&w(+8gtj=#^A3pQ``}c3d<39rQ ziW*}zLOs;e>L425NXFYg;m2p(^6yiqHH;gIu3Kyy!<}Xtj$iP}$99F>tmz_HvTB*< z4>~o!xKu(K@$mE-LG8tc#UviCUAsqGwXeS&4H?-Cku+D-P+k`0*k|TS(tRw z>kpTlz?xT@NqOUW24!K5zSveD&sxw6(<)WzflVT-cV}sQIC?#U%c*H+gl0ugkZWev zb=?gR4R^+12W*z(xKNmsl0Tbu+W$1Qksr%}elLj3!Q&}R+OO>q1}A)1pMyV1geM<2 zDZUu+ntBZ@E+HLpb;M)x_yI=5(6fW`8f(8T>IA%1ge3OmyAN7~7IO;jroXdKNovk< zB7u?Vo6vKWoiuIcL~0j>bV<{&IK}=XH3Q|`k@6vjJs7?CQYYm0R$2s+lV;p@0BG8f zhF)?V_|8%;^jm5JKG%@J2V0aqQ=1{*8&*XUQ`Tw%)$ z78QOM-!;2*&(XHR24fhc1;rPqxwFYFq(o^)g`BBp(KLslM*4RoldJhYPBzw#RmE3L z#_At9pQqi^;>z8ROmCAS#&&Yj+a&2#>Sb)3Ha&mk_vV3H>r@~N9O+1{nwiwyXh6g) zz_wr~?A=?(YY+>SY3kbenreuuJoAb1_3w!Sk26Vf2JDG{Qm3E!bx=vdBs6N_QNz zSO(n;^89e_w77gdh$zvwAN&AZ~3HSx4vJ6UaV zcxIZL_f2q?v5I=ImGv4y3p0K}K`tkZwBVV0$5-?G;+^6@a@Cq@wZsY@98TRJk#0x- zCvYZ`H$ULx;2z@WHR5;9t60sgHMYSqj6Ocq zv)EUYfBGn z@lM6uR7@_Ym2?DM41yqS+58gQPfi@}aHN@rWN58rq#*{zK&{CRYKoL?qQa;S_m;^9 z(V+GQf9wtn)_Of0_66~%H7soje1H*`th?NP!zd7A#8|Ud#f5HA1=o<$e>KdoSVx^>pT+o=Xm=UI*f~frQXzj&y-Ei?0>R$%MHl6#) zyn_?ita((tY;@cHlCBoi(Gm??*3|%W*0>j@{b<=~QfzkDw3a2IODFY&v2zSFd%?o7 zM<+m*P)&1@;AA^XI0vhJ$mHSH^tcXKEuU%IpxMw|Lx-fQ_c84U>F|9YB*C&59`D5e zXv}Le)9R%fX3UZJ!`ID|#r3E_EPENBl)ma)bx@6^V~u8vTVfcP)pOJq6rpwTiW;VV zoa7yuH9<@r$D;_1Ez?>C;5R-wicAc6r}>48d1W%{#@MZ^s(K(XW_BqV|K@8YLNx%xHlzW~3`1rht3?qgIhOtEQGp1P)GQ?av;X&kOg) zgYT#tuNbLn8~sgWC1e~}d$xlEZ`wb&!r5=K@auH`m;+L`@1-zHY^FTEzakJVN!JAp zs*Gp@A==A}R~8vmCWDrV7p-F{wp*`R2ZN}XejU%TymB+ooDTQ4z$0!VLvw>u{!Xg) zOQsFChtEteo_pZlViw>#ksj-g9{P=r?^|r1{ujXe`+Kvj8>c=*mC&cUM&_F75+ToOZBZ6O!CM|P!uy>POc7ygjBwiy=vu?hoU}dKCQYDvwX9psSt(p$k$?*nFR5 z-X)(oxBp_OzANB8C_m6uUOh2rJz(Zzq&ZEVpq{p7&<1?uG4F9?z}3CdYC5`vUR{=d zTx73Q4%GK8Bu(zUtHLC{xz;YeQQJjIEJ)^>rk1EJ)z4m<82BSFOzUc5S7W!hmF<$J z>vP`uiI{7y&DD7{3#rgsn$+riGp9V}i0Tl{yZ|yRzqqkw3nO+}ZNjh!FVRins(P?Z zHhu~_nI}c}iwpVigt${RvBT_oc&9PjRc(spg$@tZf_qubM1Xk8S@C{{`;U&O^-XWdx0@i?P*sO_-2x zsh`B*JAdbQYcr6TU(PTX7x$6hSmKQNZe$@7;Pl=d0t}LN(^wo{ z7E$6|krI#R+q&2qb~7ydZOVXmt!pMVb*+Ej#xk;ZxQyTS4gu!Aa;>U)so1(1ag#Z3 zkp4+XvORpimrc%aob!`lhY4E9Mz4^;(_n+^28PZyVh`Nl1%Tp^$A=^n{MvO1a;cB+ zdcj0IIo`cJ-N|m3fY8>uUpx?sl1f zWXeAB{o_dQlg#ftOX?0Zq9i4Ae2$r09&vuAuYBw8{d$$hjjvUd9!vi!?ZEv#u@(>i zU-e%)6ZQH^_aFF+@wNRIhip%2%Ir=2cP}r*_eEwT;nn&74h`}n@&0$2yZO2(^d(d3 zsllobcgPZx!^gW@^94p9KJos0;qmSI7=VXr@`*lAlT##h5bE>u6}$oj>@R?dTnGFd zJwHdh*L$)Pjnowodc)FfyP6JQ{&(~dQot?lU_v=9fqRPHi)2%}<1V0KzC~B?Eyj5+ zaxE($HfOs63~Pp?yj<5-Jf3N&wP7ZP#l9 z@{&)8(y!`Z&rsR$HbU@W2eZa?=I-TthgQyB-0(xJoB@@R+iK|z;9kC+?D?bBhIO#h z-ppm|3;}#l=sMyh9hGVo!x1S^U;TX z)s=?E#zGd#3zCAI5WDLF0A@!L5nUVxdSjfkzuyMm2f84So%Bz_vdfcXH6uwy#2Oh; zx5Vvku>j@zagx!evspzeRGS#G0j5!}_BWU5dEfJjmHD;sO+2 z=~QvGRrDI+h&nay1=p{`OH9B9$K4#%1NZK&nx0;4SdB*Pa|H}KZkGfD>xP6tpt&jfdr(Yh1V!Sy>JUkMqQG=M{o#=yBsxy5OHZ9}fHkQwikg8^dk ztk=#ev=^0q;H0kSPe_6eOF2!I3dmqq^Zw{Wt{Mzj)xczt=IGX2dqtRltrl=KgijE}&zee<>WZB*n>tmpg|4N!%Zt&Y;t*ND;%Nb;LrwQ1QNk z9f_DGY-)!tArQZ+jR`Sq0KpQpj%MgtI_+O?|yfgK=L<%L#8_rBF$Ln@u77p1O|e^n0zFdp4sr0 z;QY`YDRN>evF&i}0Dv#lt950g=J&Gfr3 z2M{|$0k8@+zzlx;T~wFi-7NRqQxJZ5BB-_9OO7dKI#KLNu-*I{DMw_qF7$)Vdp-xF zs!}#0qI2}z!%h`={W|!>W2-%Dx;Y{T4HwY1U@u}C0QWL$n_vK&p62OCw6?51GmwG# z0*OYO>hC4!#rCcZ&iqa-Kn6X#J3F9*1oC3Tc9hzWmD!MAof%8-!%yma-b9i#_1tA6HvLSg|F6f@zC$bx58yJk3l>8C z32U?5NKSr?d&KhYVG_os3rRyBZ#quBEur>9MZ5ta5@Bsuxdm_$X4=@?l%pEKH}w5& zq5czmr!lsLg8S*sXEBT&3npycEXk>S`@>sj0Y>`uEwM2cO#CnwX-N-s2IWZ()p@BJ zNg5`*CkrMHXtQ{3$K-*yhUOGmGSi2&EO}I4p$9=W6}eSl&^N4lmE%*P1QgK+=`an@ zwB3dg0IX~}(r9k^cfHCb=!sD6O}+!B+p?iZ_{dRz934X|th1zedB{fJWVwSTG7rQb z*l3o9c(n9Y54Y*gjUx^I6K6R=<5dRs-7jfU8zsntOP_}go*Qt675!7yJT z$i(lplTqzs@9?mXPW%a^XKq z<|guPY|HAC3-ihy7yc=!L#1Y1Y0n-XcMyxZI)E_gi{QGp{=qJKKl%1tX9@Dq+hx!J z;83)qcELbtz)WSLa|`dWiz|X>DQ&Ep;yrY}#8@Pb+FYLhafj}cDMJzH22A@R3{NnM z0vu)*B8jowQ;_c_SVs!~!|FNJ{^&nLm4a4g3y6r`A8u^N+W{i_=tYl`N$n?|Q}b5@ za}-6w1Y~*Wa1n9oXh%J9XXYOx88P|SvKsF@yCCl=Uld?}AX5|vs-?)eJf;BTSbGx$Ubr==t;EqQFhieRAP_Gj0;p2{f6!5!bPFi2B9fScKMw~b+i zhw2|VBUntF&3lXC60{rB;+?IL@EVBQX`=zigl_w+kE_9&G6V#%O5djxKiSos*UZ-N|T3GF{?FEF=7P15RRIZQmvU`HYB66ij!2A|W8VdT+ zu4`QubJHky-D0E(um2C!=2xfc{1$#3+)7Qu?*9G~XA0Afn~7r8(+L(1?uMS)o2}mj zi*RGg3cUZAxia$zKY&gQA$q<@L#X zb$=2~%Si4>gtB2GlBqJ^B1=wOSn9GjTYrCC_0tChD%PvggDSf@fnidssq#>_A|!$V zA};T+*Gz{Vo4#7r8-tbbcLseBJQ8!?O?Nooa*<{xwl<9wf+5$p+e|}SxevYENux17 zAv3W?UXD6t2+(IoUDE-h4;=7GJsrM^b~zzq5Yq#+66TZs9U^GA@9hYHL*Fq)f)N{$#;Bw6MW5Vbgv*{$in3v+SnXsXb5} zxrU@AfRgbkf2c1aGxAGrmgU$k75(@R6i*n@Sjj1>xN(U2v}##uADD~aE>I-8Bu1Jr z*jvxhix>URdga|k8r-gO$0-Kn%2`Dd`GlKGOHeUMsFXV20qyM(^)nKhsYpil9|H5KoZ;roZk) zH&5?vhwQPaJqW_~vuTqU@sgMi4~tqN_Xrud3N~ zBNW4(pb0pH-|`n4DL<#z776As%71z&Q;YUL-ndTVB}{(3Pd#cQ#mn~}_J&^*F5da_ z`tP^$IwHzgCZvOp`Y7kgC zb?%b%>&yR1{pD8_s`?*v^cc$|OYQEF-yBj)s#DvfS88!=N7{*?H}S~1BZ~WW-x&bd zpA(;)ST1W{Sb)N!jv{Dz;cx3tQ6kBS)iWa#QKYjB=dGIH>ZayL|4bMmy*5d6{-nQD*WCKfRlqhol( zRzmc#WxM`02p5X1eA!=cyFP6Xbr^4WSnac4z7UKOsu)-opDz(q7UC1jS1 zar~B`QZAT%Dw?6>LkoB>g#AY+7CD0i#BH|}gfKf#5As_83N9}rd*^FuxWSLw<%Tvups~Ph7=oK{jHnJa43Jd#kFDPOkY`lKj zQKYBm_%5V7d*}M)q#iQV+2_#UNowe3i?0l&f%j{i$U1!FE;wdTw1v_MGAYgW46J z4s{jYHGPgf)W-oSR5i_|rw5hTKSTT4LoKm8yZ^OwQ~oQ82TUG*uJY`P*#zkej#v>8 z>Z3O$*d%dZ{W@x|BW8e|o}W0#n;gr77oOl79ybDuga;S9xU8gL-}N%1sz7{|X3EEt z6nuXH3`UBgMhNz=*!s!q)pPRk?#Mo}40^}n0Vt8FT|Z!~Glt(hS>Y;Jx$WL18+h7% zlf1WE+@IHg97N$p@^(C{!ANy4T79{FEmYH7N_TEaFqlvZ2^*$HV#m~dMrcjtq2AAY zkP6QMg$ghy#j2_bom|ouHDIcPbvG(+5D^IZIrMl`besVe2O)hLv@|~W$QoS zKPfshcM~)$#^y4dqmun9k<);MRd8X4IBM0*GBPZu<*6wN4-nGb%!m6h98>BKp_6}f z;w1<|5U^{z@iA1th_ybKW?4`Ry>6uqHPZ1nM39LOw@}j7;6xB-ydg8>H8P*U@^yAB z$Z}v3c?6fl)-|Qj{GZfv{EIy|v@=s=gvFLKp*ySq^ak7<%f$MCh7ufe&_?i_&10Ml zV!`vtF9yAw#Zv>GArlV88HRyJ4rckfUquI8dvk->xdzsh2&S{#|JX-Z6j#p(x-(U6 zxNb~O{ny0TTMzZ=PaF-#3umk#kadWP9=Otxd~tj)_@LBHkn!NY${2oWG~ZSE;*ay9 zVxiNO-AE-0puQQf9GIP7aBOPm2P0u9ek5cuHqSXzC5f!b(nBqd3I>(J2T2B=XEWw0RdsElWMn0$B*HSVg*DCn zcj{6*TL)_spd3n$;4~QJ|78<6G_YM{enW2T2PLCnn*fwK)8#Bhub}nJgy|oR&`;9)s{SEBl0a;a zJs9FHx3{V2%Q56c2Vf-!BM9k+%4%g-t0!%mm}x^#1cIn|U?8QM;KrG(x+||CBowsU z={yV7xYgKM%SqkwH3Wfwo1oXuUi>0lCv;qhhm6bEZp;b!gT*bA{WY!+U;K#7^*CJ* zHR@}lIXm{u{VXBED1~iV6spzK4And5A4z6d<4G7dgv`w0YYG@LP4xI_F2M_#ECCCc z3t?`}XOnnuOBF$6MJYI!Jbdeve<60|_YNULhry1lP{w@%#zsZ86`nk&rl4qoGgWpb ziJv9qYcMH)Pr5mgz&bFt8RCGewSrAC_gEJGxU7W8(!o?eAxUFOAxs#9W`DkXc0YZd zT8#X<`Kr04!TGPeV! z2|KP7z$mOHzi*9JzF&{;;#A1i@s8Bk|#X!9>wuukUu&PiWCPyK<6wI5d(g0t{k z6>#K`&vLAEmg5-jTNW~(%~%6+mPc1zzS}pVRQn+vOC)930YBMS<>HKAOzrUrb}|% z2>yO9Eq~CO(%MM9$bJt_1$G7pH*(!!Y}EDce#yo)I>LY&3pv2}9jnZ+I@OZ>UcY1cVJhE^L9y zxht#2V?wfnXO6??tZzfFWLY!p4fU5$m4f$ODFrLHF$ZP5=Vp|`4c4C{#|%InT)DfR zGmCv%7Q*JsrIPQbGyCBTz>Bl4o|sybnLM{n+6b+_U6d?&@A1P-$-=+8+W+?}F})v- z?|*{R+oN`+WAw#0>79Q|zwQ1^{zmZyeEn^(n}Sow{zuHx)BjG)e4zP%XA}Z+-+%a`V?3Eu&i3bA^bg33i4ESiiui9vQ9FolnhU zaea)~g3p%bo-2?Xp@J`|&*~HnrRrN2sz|J8HWXL0Ij=#T|J~p3W0q8V2rY0=*sV9p*k{#-NVHLXVF3crZ8aV zcs)Q_yxdU6@D7=o%-WPU`WRWzu|OHA2#miZOENrMB_vHxEKx{`7J$K`2RFHo`=!D>6;w(6lD`Yj<9)9x;i zE1;HM4bD^gd77ScLS7jGW-h>nhPLAaq4zQiA2KktS3s=5xD#iRsoS`W5AeuGZ}ij? z6oqVl1B1(OyDuBBW3?prEIdl!K?<%w{eD7n+Yj2gFn?hqL%p$&rJt`JG$$p*GzVM$ zx!ErB!xt{&#xze|MRsZ2Pu~BzBm!bd|LzQ>JM$upPwrD3IMs301v%pmn8Bh@AU0*y zBjB)s3-8A`jVHtM&^Zi2`8V81=Hqo^ea*r%=ls06KaaHu6yV1R=fEvgw~tdKD_Z^H zUR%uY3sk7!@FKRN1Cyy+prsJ>u9GYzGmdkH@1ozEB{~{PD*^ zo2`&Q7ofrYei?T!b#3-^yFQAZJS;1a0S499Ouz!@+>3h{L~u`q5M2L7_@ouqohBLO z2M^j*$t&3!Pz5KlC`zSI9y@|=o_>BqDviTM9OTU<;MET>Ow85zIPu5!X8K_QlVp^y z)NJr~GtlHv`|)O7A!`1V2n)H)D?^l)rY-mG9m7g4{*1y3+>pgJ%|xK0V>F7vLWpC@&oZue|~`DIG6Z%wR5uRNFV?7V!EFym?3>5UE@ z`n}+Qec&dYAzDC%&VdVbR&X~zS0eDUMgZB6QR~yfSv-t3FL&04h@$C^2U#@MwUC zNmPt|w&?TlZZVC;CLzg$!d{s10JQU)?*4q-C^~*Y5?p<~k|97Qu@R{;!!y_CVk||- zE4D%a3;u>A^d5!#;pqYIu^$S`6{&GLbFBiC2{o-R(}Sw*?|8nOY3>lV4GG|Au%t8K z_88(eFDd2V^i1@lPD80mf*|XpobHwwS;J`h-Qf}I$_>du!nkc_1AYUGbJbqn!Dt3_ zm?#Nc78t6S|HM@RWk%KHa2Jm$?$F>2F;o(pn5DGJzARAb`s>qolfyx@4=n+ze;M(N@k|5w`q zY(t<9c~WnVgGv*~%CV1zlvK@E=hw6|TWdOzH-3Q%U${sza(TDEa8McGjNL2>{5r$M z5PGFYz@`}V`YLswgirR;_%mX-LkM30|B2#OXu-!Hc{|zqdXejW1LOZs0#@K^-kOA3 z(|74&J^ox1Ctw?>fO*t5+K%D-nS%Id@QbT@jfxVCP7d!knzBK1yt5GRv;Q0%5Is#B z+EYdQ7v5}o&TNceu?(u6gFFfn=V$HktkeyEA-w-I66R9aWt>wfg$8(;fIc(W2E#GX?;4ZdS^&g$^|+r6?%v9b5j-nsi}~XJJBDk*i9}!J4^Qqtzh{Ns4MGh@0(RZpQkb zM?ydo>;(>h;+`blSNz@Gh-&9?CaO;$H8)v&aE1<#$_I1*RO0X*1spAr@m*EkW49Vf z=yiI50+$hm1TOEr2Rhdj%;N~5IKCIxfSLO7r95W`n)QnLDei1K6K`KAh$;$)Yn}{G zkZhLUy?PcOD&)`}kZT1qP#|t>y(c#Es8vOQWFWqVENDSrbyg+>NfQ&ru0G)y#J64- z;v(9Oz&Xfoej8e9QKAARuJXIH1jo%ND?Dt%tZBIUo-i=y%ddEhe3n=|T24q)uO!=^ z(@@~f#|g^0yR3p@YSc5m`IC2TVP}w+V@uffZ}`YSP|2xRX`;#HBOPDV>4f z{xU(~J})`~!|~nBCS*CLoEDzBrHH~gwBozbX|h+xb@H^FQmXD8Q;<_s_>1ggF!Z9C znCP*q>kjcrl|oLf0E3?JkfqWo7 z<-eYZ{j0g+eqtGGpA8>JG1;e{Xa1p|!17+j4zmaU*Z1#*|GxY6fBy0}ZF!GB z4#c%*X5fDQ$6pmRk~Ipe>GKo!ro1ma{>Q`Na*+a>?F?@Z^8?vY?(OuOgNo9Gv`#WZ zxRo#L+$A=i3`_I3@%iu1if#s6 zn~jQnQJWqt9rC`N3IF(}&BpHpn%smDSulC0HwY-s!=%m=7#)|5Pf{dC-8uzZGr30z2xhi_HpVnM{8(c))(=c zBM*_Er!NZeEzITM)6Oxh=GHF`$vV0b5_;oGt3kbG0T_cboVhH~Ml9W{EbHc9e1UxR zoe-a~@VE*4uP3y=F9%Avj98O{dgsf+3u1E zZ5B`6-m7>-Jegs#nUXRD;{~Z?u9LjPQT;FcXMWi`;8%&*QXQ%spkqSX&KCpbeZ4=Q z5H*mM;aO)al@FJpCISQ;-zq#^^JsXs`-`*|uZ9%1kSs&tvF(O{(37m7vo?55eHMw6 zu6a|2b7q2&!2FJZkp`eGkt zLY9T4+F8YtsrV}P%a_c5?UMBNKjfIeM2<6TKj?5qORYM`32N}iL?sH6$}2{YM4P0m zx6^pPNP(*NTW?`=Cq9MGo#O;mJ3%WkYK;k8*-BYzm7pcHQqaYm!1V6fM||@rM?8R2 zCv5u8`ta$uy=|VJqNV1%AjR}2Hrg&t?`Dv}U!SCp&H{6HnUZy=HL(8`U*p;j(!{k*WuVeB_KWq*%@mmhG;GUw*TszbcK0{v|KuL~p1C{w znr>}^zXobz%9aE`!QlFpIVVtC>MoV+5;C*$S`Zv<-6qHiE|Z97jF6$#*;vK$^e^iE zHAjkdnG_HxQ5rr|)hSXr+kFTDz@vzyUi0Rcrpz(6o>LD9y)!u>VDQ2)QXiPL_p@*k zdQcdQRXjFe*M9zkXZ4U~73qFA3(Y91zdcYUzj5lm3 zh&yr>psImZ?H5EjM*Pe8z$iqz4`g5i9WB1u3dGqw_AB!8v% zxxQ>`%W<_?Um=DH$VF{8zl3hsWFl&VdX!k{BK>%5pW-MFI z;Y+Ev931)-eFh>TNQkd`LjeFC?&0O$oU;2Oi#NYYHs~c`rlA+U*}M0IGQU(*lF8@iA-hAV_Yq_Zwe^MTfZ zwLr%LtGEoZE;2P)U73&3NGyFFWX((aQ)eUB8m>JnF0GT~>0WAOKf|aled-ta-QaB+ z!O=<4@4a>H4i|40X~TIcZ1yO)^9yK^OV-NUwCmOA4XGa@Bj=U$Cg z4oL+HAtwr(PxkkeYOzc5?a+Z*Xm7nu5SWE_8X0MycI`aWrm3MAFp(_Gs%9{7&G(pn z00E_*ei&v+qVkylq2apxl) z(F}cb@$KoZFNIm`UdR0@y7}hNdzYaJt$#ySODiyPM^h$-_sGjd57^vKaIv5 z7venvsb+9>T)kaBP!Uoy(kx4OQ3$dn>74?A(zNhBWB)T^;-LF6(vqn#Ag*`_mwKT_ zjb?upYhPR*`DC7Nd8sAds$0+va2cq!ET=2`jM4pn#@QZ4aEHc@%Oy5Y0qdNBU&%24mJt*Tc6MZTn}gJ`@@d zN-rPC6l1Imx(`eW6MviqT>Pd{ipw^EjP$N$OQ$EL*0bO4dV{X8N>;)rz5T*fE399~ zJ7T#oU+;TExL%saGy6z48afC2MY4O*>0PPIySW6n&;AtQWQ?*-Vu*c5e~y%}(J7vn zVg3Ow#=XYT*AY@mPj`VC4oX((dzB{=URK7RmtqQwP1bzFXTc(yYoMzD&&GUyRN7zpcG|s{i-tBz z0V8*XX-px=r!kApTaMGwOix3LeAe#RgOV@{rBEbX&)UXqyc-X<;S~yl;M^;G%WC=O za8o!QbOq`cA=*M4L07Fli$e=l$((<|rPH0S+}!EMnAC^jzV?uZov8vC-0r2CB~|`2 z2^QCt31@H=W-T#Soy1*rmvHTY5T`O*0Kqmf3F(^2jW-gN%Tl|88`>6x5IC+Y7e4-a z?aurW;#NDlADZAO4V4a(k<;L1yjIT=s`nOfy$7@~q7F_qZcCZjkcXCnvJ`;F9@Ndq zvO_X0-ph@A#`-~kyWX7p%PeB<*x$7bGU^XyDsCZ@Hq)vz$zovLgqr2B6u#)ut-GB_`3>Hy_S0vGNzx9=ZaWhq#5DyJl35DzD;Jg!@ zQq=J-(*g{DLnx(Lj5p*RxS;6O5MqrH6rgVd?D{pn8~oq|Irm4}q&u-Y~?qV|haJVGAVMyMO_ZP!$nQUG7 zZSbw`y;qWEQ%Nn+D(PVuiE>FgWB20PiTbHgoh;p#Co4BH9EBx>0C9M94^+JB9nMZJ z;mn40o;eEkSriKhs_Y_;;8(+SEKg)}r}C?9SMLb(6$bm^p)8j8Lsj#w2gJMC9AV3HL51IF1J-AE1wIv z!xuiqMgzz2WM{|TJ>V-^xHom(^yVH3h-;Hc##Ag= z7Le^5GL?o!uQ>>n(Qoh_5kQn7YFj%Bo^WhEeo<6wpxsT+^YU)>$L$*?I{Dij?|t<0 zgt}NBIpB@GuzNgBg$K`t@uhWv*cJzR>M_Zf{seohfbqR1wJ~B&u2z;-HFIxP8^08q zf&xU(!wIG*cSnr~!{39N0{BV!?e*sDL1Gzmn(nosE0nqb?UcLNm{mwfd}nBsS<9s=R>BowD>VV}hzBI+9ca?e8qc zq%H~JU7#$CZ}QeH2j#5eAh{frsLWT0e-CVJ(|VbrQV7vzom9X&YkuT(NhPNvG%jQY3S$b3WAd1TN(qDMZ@Jn*_c|HG7I$#3FeN*CZMKP zSJ0p4|LxQRsz6px81ZFbbO;&j7Dl!`DR6xR*e&F6H|Yrtl0)+3iC9-=ksI%CK+2>x*S)3ts*ZY7QaMC&F?lpoWL*?MQGsGte zEyZXhz0;LS)al)9Qg|;ClcHDL-Rn1y5*W>O7KZaUuV-*i+2b0?b8TebzKMAiiAq^Q zA~-1^RI#K`vx5TlYHjM`3*>n%IcQ;9Q-DW4Jnapv-o`h#jK(dQMB-7l7mLex)2+*) zn409_YK*0(i8^`db#-cR$?gyBs5FIh1r~z>Jx6*^9A)}Du*&NnNMmXr5BCZX&|kQv z5+YfVIT4QX!Re-{Y7AlKHTVOcOX8yEeq!}^_p(k|h)Cu{ckh`#P0PxeqpSwhmW|bl zZ`_c`6KY-}eA*w$j+D3dYKeL?`E#s=L9Zjec{d{C=5M`cliY#A<~N<4kIJd~ z(B5#j@%o9|I8)EZC~MvsT{tgp%Vk*#HD2XnKH%(rRU6du(mhp+TP<6sbJ|v~=_>(G z5ISoG5*yE1pYxq83XpLWmTm-G4)HBOUY5RsN}_GAN@qnsv`e_|^!^F{{=@HG0?z`J z<$XuRW4ev%%nq})R)uXa1GtuKxTO^?ZgFEQJ}7f{^3jrcKfTuWwzE=mu+N+P!?r?m zC52z{t#Vo1P`NFa%2`}Yw1g-i7!$VJ23-D8P(CaQt%Lt8AzZ$Co_JL#Oyuze?1jNC zl4e$>>Z3dq0fXSvx}0v4xSI2zH_RQ9Pp5DdHv81d*kwTBk@<(u3K;eb|0B(jsM6lHh~L!eYER^TJU-< z+`<6yPKdoy6WS`;jqvH#;-NCIX>49n9EzcEOV%}E(bv9>E3erh3_5XGGx)j=TAjP| zt}&<0VfuS85x;H&o=C=jGCZ)7YU55-Iqe!S_tsd%)_2UgMCj~muzYLVN;GpL2VJAl zE75uf@H(cT)oymT6AhH3THH*Mo2;Eak38gQ}USqyT2y*(sUk8-rHjm?wckh?m zMOYe+&&Dd}9m|ZsiU(H-Q+#0T0-W4&`)>Psu&PXlJTpu|-(U^mr_vF(kZ_mcxanqg z`340qliCE_9`+|VuL3yad@nD>^JKTvOX|eUirc|92?4<_#o_X8`O;1mOHtaPHk;Lp zd0IYI!q^uWjtaesz;&q-O*h^3)cB8ZMllPDrwiRe0pZo)G`*Ps(r(F0L zX^A>nxj}jTki17{C@4?4BY*xF7uRC%yEYmAZ&a< z)Rs><^Pa-E(Gs-k+vPY9j%maVzwWLlzATB;GRiSb7Rp+bQTVY`z)o5% zYmj}zo;Y6Dz6PPLL!l2JEcY1nz9CgRluQ;Ji#4uPl{MR)C08avz-&^_`mN|jbk_}4 zVVm3lE{|`Qo8sH`AG?oOe){HGLt)g~jar6pS1m$z7yCe*X);X9rR%-BMl zyV@C49|J|CuD0OrOk3f#^>m5oE4>TDFSEpI|1|9C3E_*1X3!+=VKZCRs0nGP+LnDN zn7mv5`-8=LJtyyg zsqM-ZJ6_M(iyc^7&k-u3K{9+V8lbExs#kbh=iI3@lE(DK*}vPB=n1lGlkhJk-f^8> z$#?HQ-v(u&1l7mcdX5dgR1Xm3;V#y{R+PPZH`anMJc=UkPNw>qZ7#8HU}-l^+`MLE zL|kY#2Di-TazbRY<}&JNCdX~PG~}rZft>d)|NLuAZ;tF@i%w!nesXls!nEVSq_wa| z;15oL*65+|SS_X0I~kkVfi;ZpE*rqPUe~0OQCCG3^so%Ch15S;t2@bPjWumad;*J|jU4nM>wzL#F$)3muMSy67bM)kZVzqL}Q>U}3_TNx{-sR!G zq8ouyr|aIPbg9>xWYvZeg?d2?d_;hYBxuIIZWI~SQm{9_sE|5*QR9!D$-KXE31*`f zr(%`$MR~lkf~1Xdp-y7qWj>&`^IDO zac!pU0otFq9Pp>6T;TJiaV_ljIxlfIrDijyZ*DKw=j?}n81mCE82jfDlL)0RySl8i z*c!wIUp9*WBYeO0xbT5#A<;^0iCOLR|2zBgfF{qZ-}jrjcbxfL_~x4#sRf}+ATuCR zv9c37rBwq6iY&6LpvW3TS;LaK-pcetM3V+Ywpu_85KtiO0XkG@L_i_zTa*A22!X@| z0)gBI5Xk$+CY}2iZvs5qIp=qN=RD_m-pdkk>dV+JOd7jaZjpj)0D>7!FgS{ zI}lx8NJF*tqG$n?JL-w}r=Z{eTO#1Xl~jUL)x<2-ISJEK-5&X37zgECa&`LPj9z$c z*M1k5$gBndvulW+gcySCM}q7D00@%kaL={q9=*1>=fHmAbF|5S>m$z7G&uu87wIBF1>)cCDU%4~u?mAB;4b_L_FqAkvnQ&Nv4QH)JiiL4oX zf@oIuBg+LQW2mq2VB1pH?V6O7fO|Lwig9--4`HK*h5wEfLyZkEe-lct7p6sy(S0gJ z=Rv@2@g2KTZVE%g4n%(#5-Hk(fl6SNEl~9z2UiEKPB#s=9zXWH3ZPwzT)rddx4KyR zi>`;XhBcL{wGn%%Vzdrjh3jd?tA8!jG>`8g7{|2Nk;fY7-dL zeSuTG-FZ;M@1A4X3t}!dLJsHqzvv~!mI9w|yO?PywY4D86l-Za45%SPqUgJ-hXenq&lMC_qLkN@H!dHoITH@``}Z$DT-oR#zULA!A%VNln@+y~kHf*wuq z@)AYFI_MxQv30&EFhwJi9%izr4UAwvQE~z4%g(ngxjJ-KRZRa%EbWDDn?RKryIZIB zr5v>-f(^+Bs46)tFeK-rx_fV;Lq=!<+qmfyJcYY@P-P-q##ywL^6{>J)TAW81JWou z97qY?Z!bI8qk~N~ZkBe&3neKEV{d5aER6E9rVd+_NiAH*u6jF=P`k1FHzlk9mga7|G{V9KQm{*9WHVgM8%Kd}Pp*yj**Cj{VJ zciySe-Z}JQmT}}0g`BrZ3d?yzOTzlAvnBMZ*?VH!o+}u}6!E#73`zzjth4>ZEHoU+*0KZD+4i6IeP0a|BR4 zp8N7fxvtCc#l3neT4E34m|QIc+ry#TnfrFIC(C|hgAn~4w&;itjma=2Y7$0@`$u@~ z&p9{ra>aQEPle%;R?z>u!%qAloBe&Q<43C!#AL+*GE@!UI){v$%~BVhJs-B1IiO8; zJ2}`&x)l=%*VCr`k5kzb)(;t& zxMMSJ7sUmOezN!CDva-6z?(lmeq{%SibQCC;R7UH2_;cc!Y^$yZXdnhk?nzTSDeFy z5F3<`VM$WL)i*be6($z)&)dw|%kL0-_{}(pLjt+B2Bzha!b%>K!t>@T%9DaVU|Z0T zVPeFgadLVMzW1oD&N1v@9QLxDl#iXWHaInS{Tvmy)HVnP`>#cbZOgrB>3+_(J+nqvV;2Vz>)B4%Z^;t7qP;qyI20J{WwU z9nJj*Y6W@3;BhcjE4t=avlb`=P8-k9__rE(4T#r1oe4H}quzc9YPz%Nb#MdiFT07- zuVQE9G67-;r#K4&U4faU|g!Moe>u|8iE@cn> zI;Z)#2QKK!oQ(jXH*z?QiDFEFD^HMOP#ev_T4YsBFGs~riu4=#3eWID&=7398*ET0 z^qJq+k@LK+_;+7D-aVjlSbEkX^?^d-)f54D39N*GMZeZ(Kh{{fb$&)+qWl-p125~~ zZw)4>g=~YidwFM1UnhM?pyHiegOaJ#{d^rMln z(GMwu6gU;-pmB+@an`W&P6sM$7y*FCs_<>+{RfWkZl6dwn( z1gOMG2C@Nn>BdHg5RRGE=xN6>(+f83xKcaC=G!QY^1)?ahz`>FGzJ>|c*{%Uj4NHl z6K?0hdk;Q>uwVV%5lj4Zp=0N;{<`W8+gjRi#CaCp2O8*pynp!3ETlQ(73FoH&^Wjk ztv=(t#%HbcwT$QX+|0$s88SSPp1SfL4K;R(L#cR`0m?G#PkS%FG*fJN)kk144>Wv8 zCg{Nu-I3@K^ra2<}0qzfDi!{^!CMVI&P7iC8X@(mRn8y!x}^M9Y*Nw z`QI)t=2?)RoejRyIV>UzaEe2Q?_mXW5Ty2_TI<}Pnb}dn6W`DMHv)6`Q5FJsx&Rwz z=HGqLH6d(~k<-wnFeW4sloXwp`G1;NfOg9_MO8Em>j z96|>DlK@( zx_$4>MF)y%mX~WH72CpNF&sSl0|uWgavKbe#{O{WEh7(e_kFy(vRH^3EAln1cqQ(6 zIa|JBms!`Z7y_x_bcc*Eo17zGEe#*c{cx@{b(aITT%Of5Jv7Xl$N`!EORJP$+Xrm# z9cqfWrbMA0FX(BdYX=Xy;g>;5J7J4)NK{uuL+nUTUZh00Hm7|@E9s9{n@&29WS_a6 zb>`!z|Jj(M#TpdtoBeK*sXO(5s%{Luw7H!{>VNgS7u}ct^Jm_PfO}7KvtBfRH_75) z|I55g-SDpE0IxuG&@S*q%I~q5m8pg5|J`Xe{|m9`K3E|&1nnB>ohJ8ub1P6U-MMX? z5?hIIs4qtHQByj>7{@h1m$!tguh>_70gK_F_@Q@=W2su)A?$5r{1Z}ZqnGYt;Qm2t zL0WvMcuFyjv!w7m3}LL4>i25!0lAdx>rupX>w1U{;f=ue*JFcRi1)R)!xtmg_&=xX zTFxkp(V>Ks@Cjh*E91xR7A3Y|+dex5g2WRfkoJf7Ao=@d55lVpmht>urF4bGMG&-h z4(^SX-i)4;zI~Z*mDq51PoSQw4gb6Z9)`Z~o)A{VVEm`LZi@K>?MZaG8XFnahgjqA zoN80@HQ~2^YIUczp5?mxaGqFW`Vi@)egAC3X8Y@P-uAJ$HajMjBq&Y<5Y%9$)gWT& z>_OY9YbIVLGTpSsLKvzD-_wLy0Kn=rSa0w=wIis(QAq#+8Nrbi3dy1-gum9@n-u-I ze~MEZ1+|FKBZ9^2kB>X^-7O~r+V*a(55i^V`E{ef`a@;EX$%gfdC=jvXf zKg~S*nIFQhHAy41D6U-{`FjNuGJoF(s?BCNR;t zp|>#0I0^aWy|(){Mk@nRRn%$G0*52~Q}w5@p<*sYhx;?O3&h-s+3 zjv?lt($T?{q;IaZ0ubs^$S0tsM7RkMRC2SPy*A4c&srS_D|EBC&%TRlL(F5TS*K>u zVXAvjfXz0Gu~6kuyd@7KRb>oI?s2{qp3s9dzjp8Zm+1AgRmwV;c4^r2DTpmX6t_ynyS{dDZIg*dF=qs{4n^Pc$S%Z_zr~Aa*{yfR)?<{L>rtYUGvFQXd{@JwaN& ztfjJE4Gp6dp`^GwzPVcE6$^>n<!mUHAcn-x2 zbj=R*-SizK;%Di%cO zX9&~25rkhAELK`+#vXlVePUS+A>5d?b^uG{a&w?d)hNNk{_?ECL@sm(1$P$&=}eXo zZ#lA0->!S``lI_5sk`JT_wb*6+`Q~)Q$+!Wv$s0+S6Tc{#X%?}!614WD~(%R>Jrgj z%^aA?z-FMLjTwksC?SPyg!QrwFuXm!JNR7GtN!%%D#iN(P%MJk6I4KaashvJVvT9+ z&$xc_p`Q3lxMi>+{Tqv!Nj?TPYLjj5iQdH<68VeliXxwzP9WfLDXIi>_4ShREmGb? ztTtBTq`~zL+4zBQ6cA9$uDb=({K`N&@*V`1S@wP@8GDY{ZLyu1l2qZ$?2N zO9qFD^Eu*=81|&+B*Q?e#kHw{wnmO(v4lGAI5}}jSce^x}b}19kWd9VcnmRaM z%^ty_g%`Uf$yXyYAF`rAANVKpp0N>F3-NVRt=qAz8R zTwR(kZde?wQ_QHKh&osnA8MNGv%9n~NJlsH?r#C7W=>rqrsDCieY2*-7Y^Lgz+!<< zKU`qmZ(D&IQcq6lT5WYJN#s)RF@P!k*h0LdmO2B0H z1OiM}DRGPJ2Z2Ml`22Uuiw2oBSmI1nF@udK`g-}R?LLrW7B=~;Qwf%+{~6KAjRzL# zuQ&;fJk2WS?o?5zmI_)-LQEyVg_v1dsM?a1C1}Ix2Q#}%8~POUT-NspAEoZm=;gio z(<>_;hPkm~+`A|nxUs*vh-T>O4LtHqHGH0uJrY|34l^Ta72%R0Nb_OYIjBkc((cmL zm7}`e*2!R(NY^BtjUdz2e;dVePGB>t3`1szBbLPW@jRLmX9!8+;Y$Xsee5D_pTd-v z3x2db0IptQe(sM3@5q4h27=`vF#1H_T#%b+s1}dM82Bjm>JX+LZYxm2t@RvH z6p#(ohK%jQ);h}5KAJlJj#!<5GE?kLX}qd<`P{8KeJrUZ?Z0=~H&`_-mrq$aER=ylxA8i*}Y>{THA z3B-!ge*pYi7cEvfcqQg&9EC7P_0NMXb`K@#E`rN`f+!?xmhE8Q zIv0MYKl7FYRbvM&XO1?G=gedu`Cmt^emqP7pYm!BLWCgj&HrvQ!XpZZOSSsL>iStJ?0=`UP$_j)AdPqr$N467TV%1s5`4LK8Siw7;d zXdk$9zD3zb1j`;j=RW zJ{nzk^9k{Z7Epms7+!wimqv^+@jttvW<@~FWV-mDuWx2;)dI+`95{p#54&y(==JKW z)q<4xYbHs+1=t4I4n`uw)xMv5P`C=;LUs+<&LoeUmG&G>$0y3V3Av7%;t??(VRc%m z`4Bp1T=b&jPd=>K+s&aiCkd-?aZJU&8RQEPDyOdQverHLl1`7QFSM&LK|35E6~l@z z2nmMcsu57M;F>DanIF=nlMmy-X&wD8^ZY(RrNMR#%-~h>h7~AP@OJ= z%)zdTurR+mWn2~t`5l5~Rxi*6H}E*i;gIN{bL_8*#9uii+-1AN*jayHiS~ds|6-Bk z;uY>UL!E1rJapIgdArV?RjZkL<#JV8pzv^3l_C$8KRQ&iE$`fRYB;2y>p2RpcAMU=Eu9 zO8i`!Mc^8^1~L0t*Th7wilbi3rk<%{L%3TGblvQ}*qTQ`^n#$rZ)`PKiI%b25C8x* zJX*)J37aWisoO0*;a5a7$^4G*n@pJ{5B(HxNulPQ!s0_dNX@BRm&w3r!kvx>^Glxqgg2HIk~*+Locz<~Ec(TNq5u7|y;56L96A&>;UAoF|q$0i{n zy#SS@?Y1HkhQUw9*g|9!#kjMm$FDlYbp zJ>MEmeWl|=?1A;s$9RhJbK|_dW7r;??VOSmN6%&qD~>Xu{sg4_#~?Y_sK zS2FJfq-aHd&IsTc?kogB|II}=yQ&KR4>)f<1QpBFavW1BJVU!+cin;3jDHWamo)oxXEQj8feLv1qLC2e&PTd`nO4MXZBircsux z_1$Z7ExMw%#Lz?MYp=7K<8RIyWrB#1B*V&!;7FE=D4&{8#uDxT!G1VkS~ zOhn%uU*(iVaV{Vka@*Sq8bvBNdQY9gco||z;k8WQs6s1jxo%R~sId z%=c&6Xm+aX+Xl&?wjGUOl`o+f8G7kAeeVx_MxARvn-#NStwgy9Gl+s0D0J0h`A7QV z9>IgF*)vZZ@t-qtu?>I3AKmHaByl&kqoTKCk5yI(KIy2gpr&uealaBvfkZbD=J4%KC!rN^;S^uS5LFxTJkHnh_d>%-bR%!q$WlV@EJ&_Y-(u%KOSORVyW3O%Bd z;>pszFSP``6ofd5DI!k zF6(3V<$;g}TS=@O`L!IAbr}&ogM!=&o}ZW>cOu0_uO+XS6jZ^+W9PPW0bm)L8lI%F zg?Ss@nD>lIES>G?*BX=<5CnVi189Xcxf4I@9&j(qW@pGEbM@q5ZJ~8nrOrV1ueKg& z?J+_+kaX}HO^v#1)8pbFA531g13m!NN;)KzVdkuBCTUFPu1ekDfM9<&lLmpC1xXni zKsiW&CfJW>X%6F8UePBKb((Xr_&g^KD*H#2_p}TLY?6i_V@QL@-uozNL~;I8bogXZ z!RT6n66yrSUPTxYgeeuR9`bJBy;)#hw4fvd&t{&@o*NC`(N?2>ERqJT2RF4Y9GA^u z4!J0EJE6gd6c@Bq=Gku^5#;aBdl?XItf!LC4<+J$D%rQ)4@=N*!;k6m3ZbN>>ge}5 zcwr=wIO#)W%FqY9`3bZ}n0X~hnRBy{ynMCdzF$r6m^LjNlt4dgevUvaWPDfXzyMdnoUHFoIv11OCP+Nk&RQ<3K4)3L5MN z@6743zQ@S`Gk@SCdT(-j=+T8|ap2^nOu+TNo{$+yh;_LNKlZ3wg_ef8OM;HrW zt82%z5&~b7P`FB8>oT$-PNhbus*6ro4N<}sprx}&e>ab#X{IC|_BKsO=(%VMPGlap zX~q~Vn`_j@PD@rPPh%X^uvB#Lr;Oi% zTPfqVS3dMc&3$%qDsX&VliZrrsyWGYN2xNbYoZ}a`yfK#cuw~6q)S>FX7JI4sLvP) zC(9P}r6moQc6$2g5K+QImFAU^d%c3K@X^BYa$GOvP)zHNYHt6r%!6F&5UOq%O;~=@ zcQZA)FdB$y-IrT~jgTGMV7lp*NI^8ipwg1Ltdg9})yK+UbrybGB^W`!=6bkDyYM7? zj~WQ%%d!(1hGYz>DUJQ5!w`0;(AO-zYBDu#g99m(Qs{pn-Nbomz*r}L7dRELFBtdf zv0^mXvb7B}XE;omZ?D3V&*62pHMAk6{Cq3@(X~ZsREe@Fsrw>*pK;XSS+yz;uZFkW zE$3H^79XEg-IhUhJO<0Z?BI?a3RzDZjV^QSBjY{Ama{{hw>^bfbFUWb0@D8Dw?}&P zKCElHguf8fzw+7Z-`$)1&7I|_7tj7V!!kAa=baZ1++Y7D=Goq_-mtI#Wpb?SZ~wH} z_ozr+`iBUvTjS9;-CfwE>t9~PJCSov#7yO=MRh;Ct=JI}#veZ1ahx0Layum-)&1L0L*yW>0oy_6K;6dpkeWCe=Gl+TtJ@3v-iP_T zM-=#Q2;;m_OFEw)bvg-!dzhSbM0i6jgtE8a;X+NHR*{&OyDEu6 zmA%0u86#5m+g(OHJ7vf!slIQz-R;H$OWHTuG26S`a=b4!sc?>(H;HveMO$Ev!Zo-5 z&~m`eAp<*PT{hrW6^@ILlDajA>&?Oy?_EIi-Au%+poDM7=z`bRI!nw~V`f^S9Rzuk zdcoQ3FNq->%vNs%^zc2l8!@5iS%JT}iqm3mKgz>UQyNyAmC3BB`OI0_qeY-aiQb@D z(w`zPS9#kUd`@yh9kX}KVJD!X17!O1xq_y&=LKsG1W|`-jq0R~X_b)CEK`Mb5)c$s z5y06R^5##%i3jwRUJli4EQ>oBc9%1W-A{fl(8OPUy=}yV-1GlGecd~L3PHiu3#6UeYE$>1ih&(n&{0f68EdE7%^>!^i(W3Zj1aSon4m8xKtvUW_uH@p57&zD%Z_ z48-NN{opowl7E~?I=i^7w31{IDfTYA+p*5gr^=Pf;xG#AW8HY((hJITpLGRkXwbg8 zI%!k{J$#oS&%MGooB4@9C{!Jgv1#ek8z^sWT6zUFFF3;WfL-<*!BA=i zLF&PBlRHC;yyQa-bahMy7M3^3Si0<>e`?3f)bV(1Ljc2>*lw-X&~?=UJ==Z=$V9sWJskXmkxtoWFoaM2j6m8s*tv{+E2HiCO;yaW#zQ5< z9LhGAn-1wB?^(-WKv$LeA>w_sD_A}DmlDjDm{`~?&~R>fKvkDaid90^LO6=^br3=7 zh%_tnX;Dc~aX2j#JyPFtzhF>}98r_s@lMX4rwG0yRfhwBWBqT7CrOx=XM_nKSss0 z8HZRT2&$~&GAEQ_29!WWA|fFt1T3OkU)iG%r?C66?WA6G&3|b+Y$;QeM+9-ucJMUA z*&yWbQ8l}`>NqOVFkA_DZfbT$F5>*WWW{WiQsA7X+N%B*s|N%|wTIhP(;we{#7M&i zI}hHepgwyx$tAD2*e8Sv=9Eq=<*eK?f;SOv0Da4$Hq7*Xy>xUBI`}U8Idhu`hW>t5 zn?|l^Pu=4`-g~aR{cKugX&?STffBzA8SgoqySg*S;-z(IiL7tstk|*s;Ys@i4xcIGQ-}=dVT!b_&La`k5#d+ZiXM*h1e9uN1g=Vft}tXGbO+ z@t;!ZqYi001OHUf-5O&`>kY>h9V(_MwX^lvl>dkygU{()6Spj$Rl;*2^%F>whFVYH z{jR?5m=y(5ZbaJ%*PRMbe*W-J(OccApQ^(KYXz5US^ax+169a~#bzx9^78A1JvG7X<+RlNFn6TN8SH7y&F;Vp)jsUwwW@dhHIe)* z8AjN>ST&si>z4LQmzyazLwz&!TW5F4Y`?*!w)rVEN=|D+Kd8v@j^%XhRyq7|-=toT zOP3s)CER$YHCGsS3`3HS4Vlv#SHt7JyFvNwmOp%7XW%>I59RR8cy`_4QMFg^-Dt>P zMkQHKVh?LY$8R$`g0y0tZQV@WLpHqrZ!nUkmo7+rX*yGhR2AUG(=#{=n&~&_w>BtbyK7se#@i0 zqG81*Za>c1qaRyMH&cqB^H=1&AEe^GB7RyBLbZsBPQ5hN1-jGQ5abaCg`)P(yX||j z?*C{c_VN6^dIxmIA3qN=4)r)0 z&CgYYrKV7hzEhtdRQjorcjr#kV}PAlN4SOMuG4%#M^{$L^`&#UuX>fMEJ~`({f?W%Det3SRd-Bl8xv^W*C8Z^Yt8zvguI6Go!j!@hA@`BIBE9kF)$^ZI zd*+^lfP*4D68?~g0m=lnq>1K6;poktTf5dF>0^I0y_z%YAn~!!P_)Rqq2`EEOlrC+ z7x_b><|E=9Rj)$RsELobWNR}QvWpwv+RZG3d7O9@>s&Cm$?{mI2W;A^sAZmjHPbwg zg;ZVl)^8xZ9xTq{+mVgGsa<_GmP2ByE>d^AE(u7WVfJNqJ*7 zd>8EHvyq#Ga-ME%Q)bKgj8WF58O}em7-d|PJRwegCGC)k$5I~NhMi)6&oo&o@~(xY zGM%u*%Rt*>8Z#d3_vz(1aXw=FaF(ZKax&&FdkT9KYqjarqO#eRBvae6;&KGNeBzgH_IcciLj#gq~kbxhv)-es?%@LLOR>q}`pOawbd2`Jc6w9NfX2 zlwDR+-v`hiG5=0{dQaUk;O<*IHa^w&+H1#+wpbI9slMsV6ImE_;w56UoqpnT%(MPP zGwJgDV`8@HpWoZz&X)l((;i3AB52r9WZ}EhI=c{=11+ zWz9dMm6&yiq^|Ai+>%mjw68N!O@$}nCEyLNZt=&Ro)Ax^-^=*|$m{FXq(xlztVJVf zTeC0P?$ZGp_C2wY!=_Q(H&mOzYZstWNQX$vf1Pf&OC_&8!bcc8r{ddEEK9s6!#JlA zeaU@XijxZuA(je0LOO-(n~i;v-D7raGHXxxX`i`d^4H<y;$|fG123$`imN|{HR~iyNx`9Yw~`Wu&~xnqEAH{FfYO}MTJJH>NTFrwZ$^d(5)#M5{8}u>R>wi?gA{hZa*c6FeH9PcR?I%@y&*yp=qp5Hwr6 z8{=l$Imu6#4Hg5Ocl7|>Hgj^lKIMlUwc}5|)AD&A@h4f$j%($080rNH$}=aT4{dQP zCqz3Zs8J;H6TT`1`6Xq#PEh??Ug7G`-Nr;kVrJAGJr5I2KRBCYy^rXI0)Upy9zj)U z+if&T7@Il-K&83JM>C>Ky(WV&52T8va+rOyxdGnD1G4`)*Pre#*}C z`DjV42f(tMRkZ@U!ZBOE9kGh2j;gT;{@X@F`rnSB#D^%&cAERh_9QQDVRU3%7ky3Q z>$5t~l?n&al*3w6n>@vXyh2tNEyqkv+#9nW?4M~cfAryg>^|aiQZ0t}H8GMDWc%U9 zHM&iIcE;`_xkW68o=jaw^V#f!&Sj=_^VJk1P4gH-<&&@H$g4b|RDIov^_n~aQxCtx zG-tfCwvQNQSkb#>XQi0glv$S*vmcWHzM$IX7DAoX+HS>Fm&Y%;TKpU{xQRn@tG)9D zt48NO7^6>|zyBHJo0q20Y%O0`6CzY0rSsT2Y^?aDCmWgcu**E>|1$5iT zarfSq;m1QgUFW22twoe~er~5DXUk#*%K!;BarCViu=KSh7X7NBy#82WNc)~-KVtEklok8vHJ7k3n>Se62;dF_ns z6#4o5m-3FZDd~IO*bpYY$J|P!!)1%nwXxWn>sRnq3p?rx^48N z5qr*$rJd*yW%dqvy>I?)bJMF;yvdg2I?6)3Ti*{wJngtDK%Yiu-;P)}j!=w9v$i7} ziZ8j+OEI^eIz#Lv#ip{)xFn=%?8B>T1_!;pu(#Q7$Q>8wrMbqr_}WWm#_xS({Y5?p z0$wJ#yhi7eT-%RsfUZ@KIVF1C&F*2;lfEY2K;g90Pq}XtH^jEN5}k;bv=V*FK3sRS zc`iNxDP;{o`49*^`Lqwj>WqB*W1YZt>U&ajPs|w#&;qb+rG7mi`|T$TI?719V||GU zIX{%6ii*y(*=hFTO3P<8R7lA^=UnGJXX71I;^Q#Ehu=GCnJ=4EBZJaN{OfKi5dO{R*I z;0SFU62y0&n;o+U?AD8@b~bW74xN8yVpCT8A#L{U1y666G7i9nh;xj9H(p$cu-Se_ z^Qhghl9CkA21#zK9(>7vv$9xefBBeZ(c}jEA>NNPus5&|xXb=%dS<4c?0fI?55WKk zs_iwM0&1J> z(UDjvzUSsxGI`T?loH*QgyNxUOu{$LV~h>B5_@_cT`EwSS*|5I6{L-nH(NVfEe1@L zYR0=s?_GU;Sw{Nre_SKTBLlSd=ajW6wYm&Hv&cYop7v@>P^yu^zDR?&Be$ZJq!;tmT)TlpPC+ZVp?>7H4AwGI8QV{4}@ zmW1M;M&3UNnQvoL^gy_ZA3~SkPjM31O)@58AKg!(e60l#D{*5{1SkP&-BD() z@6XO#frtwzM&a84Tjy{K7e--s+uXnft)d5bnqa!Qb0)1OvwElER;F*+N5Z%AkpMLR z17}+`09v+*Pao4)4Kwsewr9Z-Exwq(RCa=FZ_^Io6Pr8Nu6e;k{O}S3bYmur~#l6({-{xbN2y z@9kRlORtaLGmOyuO%E1ZylxuHnZS~fp1Pn@G*G|etr=x2!e0^SDUmwb|4OMl@ zckwAJoT(}DDQ%f^Dtl7sd+d5?M6Zfv(Joi}VZ`pb>;T?9OTFJSj`=i`h6J8)`1#BM z!SeA5yA;|Od9~zfLN&%7)HkkV4VL;^N{<<$J3wp-jP@S;uZ(ePjmR?ViL0h5Brhkv zF}c-eZ&C5g)xFW?j?{>T{#Xy`)L6Ft!L2R)_l)G-SC)D2F`s*OV~tgD21Vkhr`^jt zBG3YM7{;-kbl=<4ZAyZ0kd9OYDJq^Bg#nO zG<$p6W+-1R{et(bR#bT0f)Q_QG(Bs!RR88`$sq6Jm1g6)$N2>~ngKW!#qlFXAi4no? z@tDL`nht0XqYEan(g+MAUV;HmvtFlznCYeIf~D%vIZXe8P90Y**YGe?lpl5zIPN>y zwRQ}=pbyrpPUbGpyQp?6r=d{Pz(=G(QzUep_yr?Y!)opM9&RwMSTSwzF`> zzbC4`W8U{%X--FBw#8WO!u7RIY5eC4+x5G@Ec7+hd)5)Mtbb?ANe?P7XL0Q&tvo}L zv$zieMk&;1J+UP%&gda410K_v$OZnWq*HL5*#3tqkY*g~aV2)ojO$Q6Qk3+-Zt*Y%5X!RbFsol4+SYH*%5Mw-lks1EiyMmxo(ik9 z=xyO9U!d2`1$EZq!d39(pvX%Fq-d=nr-A7Xa4fcK0NWGd#EbAlGXk+9;w)+)`}$c3 zvYmD%3Q#AoKnb)>tQXTLnJ8giU5@ia-dS(w#WPNJwKI7E=3Xuq8Oh;cuFd5aeB$cy zZfGHk)Qyc)mQe*DNqpb1Su^Vyhz1jpXyQ08=vMRSy?APEWNl1UU_bSUyC>b90Sss<_ywxJBR3O_9N01dAY1MC!!}h zKgG<1%Py`>sl7QxUTAy3888+J9$aqqnYcb;qGs6J>Q^w;ITkzrX5c5ha*Su0y@xXb z9?xuyl1?s2VyBK%z0G(7$?Xea`sD-17h_5dhCk>ob-Gkg7vjtj_0x|yidx@Z&JPJM z^Q2HqMyVyqKvN7!U}{;Q;xB}l{I|tFK=r0N;xdu|Wl!?Z4rfk>=ijaav&oJS3OJd0 zGkJwMksQ|oeH~YDZ_Zq%<4v^1TfqhO?AtR*Bw>&s8eDonZJQFl;`_c1R+j4p0{P8* zXLKoiJuDh{DsG7pw9FNk9lKuHs)2J#&hVt=Xc!V3vO3yJW*wJl)+28US2?3^nB2Ef zM~}_s#h|k?z-Cc2mB{gxE}yL;J%2d#H)vkZ4{O&LAu(V?6VX^|cieZJaEDe(Lvcxg zXY^_gacXBLUIcQ;QO+tDldQ1ZE#?2^pY?9< zA+Zo^rF)SVtcly_p5cS@-a`X7?skYy54c5ECe{vrXg0Kgh*O+w>&jMNa7xb_;9`gH zNj%;@AzT{K)z=#2nXp_W7{Xq*6gB(@%N-a;{ETGz9GI1ETrZ{DE~iJhEIg8x32@Rw zvvjWAKQd?2vM+~+^ZHHPUF?inF?AnsuH(cD-OHB_qx(0ah+m$@`fntx_fBP^OB(w4 znj~m^GDsAAjouKgJ5$o`%0)AbZ`B>Ut>)ubS6Eq?m|QY?iU@*PhiP~6;4IKBkuVUa zMT@34j8LdWDZ+Ngh?0)-yU*r?7FGqKhE$qnW8MFnk2Aya&9OQroIH{TDmsF`cFAE1 zOPtGf4DV|6pmv?EOee1w%*!V@` znql=E-bih%m*!#n_)MyD%W5j3yoUmSI;jnYk}VV;!iF%HX@cyLlSEfP{G%W(Ms1(b zO-^4)_Put~aV`p5;6Ri1)YX=!J-dT)qPu&lVY|p#*F(H4%bdXE|CE6psm0`I)vVGg z#C;t&bb1^&<|u>8yRg!fH2yhbKp2fSSsolr!*-DJh~Wjl)BF&h^$dkv6x*-QVMvFz?>eSvSK@ zF$dQW4QRT01JcKP9${C@m#B?#V(xR=KtUz7@e);c+-S5fJxhh6--t0P(YNa@Z^zXq zL|k3FPLCc} file + +import argparse +import copy +import sys +import re +import string +import pdb + +global curLine + +# Non-standard table column separator, which must be a character that +# doesn't appear in any table content. The default '|' shows up in imbedded +# C++ source and can't be used. +global tableSep +tableSep = '@' + +# Match \startTable +def startRegularTable(line): + match = re.match(r'\\startTable\{',line) + return match is not None + +# Match start of a table +def startTable(line): + match = re.match(r'\\start(|Info)Table\{',line) + return match is not None + +# Match end of a table +def endTable(line): + match = re.match(r'\\complete(|Info)Table',line) + return match is not None + +# Match \addInfoRow +def startInfoRow(line): + match = re.match(r'\\addInfoRow',line) + return match is not None + +# Match \addRow* +def startRegularRow(line): + match = re.match(r'\\addRow(|Two|Three|Four|Five|Six|Seven)(|L|SL)',line) + return match is not None + +# Match a row command +def startRow(line): + if startInfoRow(line): + return True + elif startRegularRow(line): + return True + else: + return False + +# Map string numeric names in a \addRow macro to numbers +colDict = { + '' : 1, + 'Two' : 2, + 'Three' : 3, + 'Four' : 4, + 'Five' : 5, + 'Six' : 6, + 'Seven' : 7, + 'Eight' : 8, +} + +# Parse a row macro +# Returns (isInfoRow, firstColArgs, firstIndent) +# isInfoRow -> True if \addInfoRow macro (3 column table) +# firstColArgs -> number of following arguments merged into first column +# firstIndent -> which first column argument starts indentation +# Thus: +# \addInfoRow -> (True, 1, 1000) (never indent) +# \addRow -> (False, 1, 1000) (never indent) +# \addRow(nargs)L -> (False, nargs, 2) (indent 2nd & later) +# \addRow(nargs)SL -> (False, nargs, 3) (indent 3rd & later) +def parseRowFormat(format): + if format.startswith('\\addInfoRow'): + return (True, 0, 1000) + elif format.startswith('\\addRow'): + format = format[len('\\addRow'):] + + if format.endswith('SL'): + firstIndent = 3 + format = format[0:-2] + elif format.endswith('L'): + firstIndent = 2 + format = format[0:-1] + else: + # Just an \addRow macro, never indent + firstIndent = 1000 + + # Remainder must match a text number + if format in colDict: + firstColArgs = colDict[format] + else: + print('ERROR: row format macro has unrecognized number of columns:', + format, file=sys.stderr) + sys.exit(1) + + return (False, firstColArgs, firstIndent) + else: + print('ERROR: row format macro "' + format + '" unrecognized', + file=sys.stderr) + sys.exit(1) + +# Parse arguments following a row macro +# Passed a single string 'text' (may span multiple lines) containing {} +# bracketed arguments, which may themselves contain nested brackets. +# Returns a list of debracketed strings with leading and trailing whitespace +# stripped from each. +def parseBrackets(text): + # Uses yet another simple state machine tracking bracket depth + args = [] + bracketDepth = 0 + pos = 0 + + for c in text: + if bracketDepth == 0: + if c == '{': + # Begin accumulating an argument inside {} + curArg = '' + bracketDepth = 1 + elif c not in string.whitespace: + print('ERROR: disallowed character "' + c + '"outside brackets in:', + text, file=sys.stderr) + sys.exit(1) + else: + if c == '{': + # Handle nested brackets + bracketDepth += 1 + curArg += c + elif c == '}': + bracketDepth -= 1 + if bracketDepth > 0: + curArg += c + else: + # End this argument + args.append(curArg.strip()) + else: + curArg += c + + # Increment string position + pos += 1 + + # At end, if we're not at bracket depth 0, something bad happened + if bracketDepth > 0: + print('ERROR: inside brackets at depth', bracketDepth, + 'at end of args:', text, file=sys.stderr) + sys.exit(1) + + return args + +# Format multiline description, indenting by 'prefix' on second line +# and beyond (except after the first paragraph). +def formatDescription(txt, prefix): + firstLine = True + indent = True + result = '' + + for line in txt.split('\n'): + if line == '' or line == '--' or line.startswith('[source'): + indent = False + + if indent and not firstLine: + result += prefix + line.strip() + '\n' + else: + result += line.rstrip() + '\n' + firstLine = False + + return result + +# Process table content +# (just print it, for now) +def processTable(head, body, tail, file): + global curLine, tableSep + + # Accumulate list of rows + # This is another simple state machine + tableRows = [] + curRowFormat = '' + curRow = '' + inRow = False + + for line in body: + # Skip blank lines + if line.strip() == '' and not inRow: + continue + + if startRow(line): + # Begin a row with an \add*Row* macro + # Flush previous row, if present + + if curRow != '': + tableRows.append([curRowFormat, curRow]) + + curRowFormat = line + curRow = '' + inRow = True + else: + # Just accumulate the line + if not inRow: + print('ERROR following line', curLine, + ': line not in row macro:', line, file=sys.stderr) + sys.exit(1) + curRow += line + + # Flush final row, if present + if curRow != '': + tableRows.append([curRowFormat, curRow]) + + # Just print the table out unchanged + # print(head, end='', file=file) + # for (rowFormat, row) in tableRows: + # print(rowFormat, end='', file=file) + # print(row, end='', file=file) + # print(tail, end='', file=file) + + start = head.find('{') + end = head.rfind('}') + macro = head[0:start] + caption = head[start+1:end] + + # If the head is \startInfoTable, table is 3 columns and macros are 3 + # arguments. Otherwise table is 2 columns and macros are varying + # arguments. + if macro == r'\startTable': + # Two column table + infoTable = False + + # Don't print out the LaTeX table start macro + # print('// {}'.format(macro), file=file) + + print('[width="100%",options="header",separator="{}",cols="65%,35%"]'.format(tableSep), + file=file) + print('|====', file=file) + print('{0} {1} {0} {2}'.format( + tableSep, caption, 'Description'), + file=file) + elif macro == r'\startInfoTable': + # Three-column 'info' table + infoTable = True + + # Don't print out the LaTeX table start macro + # print('// {}'.format(macro), file=file) + + print('[width="100%",options="header",separator="{}",cols="37%,19%,44%"]'.format(tableSep), + file=file) + print('|====', file=file) + print('{0} {1} {0} {2} {0} {3}'.format( + tableSep, caption, 'Return type', 'Description'), + file=file) + else: + print('ERROR: unrecognized table macro', macro, file=sys.stderr) + sys.exit(1) + + for (rowFormat, row) in tableRows: + format = rowFormat.strip() + + # Parse LaTeX row format macro + (infoRow, firstColArgs, firstIndent) = parseRowFormat(format) + + args = parseBrackets(row) + nargs = len(args) + + if infoRow: + if nargs != 3: + print('ERROR: InfoRow with wrong # of columns {}'.format(nargs), + file=sys.stderr) + sys.exit(1) + + # Don't print out the LaTeX table row macro + # print('// {}'.format(format), file=file) + + print('a{}\n'.format(tableSep) + + '[source,c++]\n' + + '----\n' + + args[0] + '\n' + + '----\n', + file=file) + # Might need to be in a source block if not a simple term + if args[1].find(' ') != -1: + print('// WARNING: following argument contains spaces', file=file) + print(' {} [.code]#{}#'.format(tableSep, args[1]), + file=file) + print(' a{}'.format(tableSep), + formatDescription(args[2], 6 * ' '), + file=file) + else: + if nargs != firstColArgs + 1: + print('ERROR: Row with wrong # of columns {} expected {}'.format( + nargs, firstColArgs + 1), file=file) + sys.exit(1) + + # Don't print out the LaTeX table row macro + # print('// {}'.format(format), file=file) + + # Print firstColArgs worth of the arguments in a source block + # for the first column, indenting arguments firstIndent and + # beyond. + print('a{}\n'.format(tableSep) + + '[source,c++]\n' + + '----\n', + end='', file=file) + for i in range(0, firstColArgs): + if i < firstIndent - 1: + print(args[i], file=file) + else: + print(' ' + args[i], file=file) + print('----\n', + end='', file=file) + + # Print second column argument + print(' a{}'.format(tableSep), + formatDescription(args[firstColArgs], 6 * ' '), + file=file) + + # Now the fancy brace-matching parsing to find each individual macro + # argument, strip them, indent the properly, etc. + # print('//# {} -> infoRow {} firstColArgs {} firstIndent {}'.format( + # format, infoRow, firstColArgs, firstIndent), file=file) + # n = 1 + # for arg in args: + # print('//#@ arg{}: {}'.format(n, arg), file=file) + # n += 1 + + # End the table + print('|====', file=file) + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + + parser.add_argument('-in', action='store', dest='inpath', default=None, + help='Set the input path') + parser.add_argument('-out', action='store', dest='outpath', default=None, + help='Set the output path') + + results = parser.parse_args() + + if results.inpath is not None: + ifp = open(results.inpath, 'r', encoding='utf-8') + else: + ifp = sys.stdin + + if results.outpath is not None: + ofp = open(results.outpath, 'w', encoding='utf-8') + else: + ofp = sys.stdout + + global curLine + curLine = 0 + + # Simple state machine tracking whether outside a table (just emit the + # line) or inside (accumulate), with an action at table end. + + inTable = False + tableHead = '' + tableBody = [] + + for line in ifp: + curLine = curLine + 1 + + if startTable(line): + if inTable: + write('ERROR: table inside table at line', curLine, file=sys.stderr) + sys.exit(1) + inTable = True + tableHead = line + tableBody = [] + elif endTable(line): + if not inTable: + write('ERROR: end table when not inside table at line', curLine, file=sys.stderr) + sys.exit(1) + processTable(head=tableHead, body=tableBody, tail=line, file=ofp) + inTable = False + tableHead = '' + tableBody = [] + elif inTable: + # Accumulate this line + tableBody.append(line) + else: + # Emit lines outside tables + print(line, end='', file=ofp) diff --git a/adoc/samples/example.adoc b/adoc/samples/example.adoc new file mode 100644 index 00000000..e43f9086 --- /dev/null +++ b/adoc/samples/example.adoc @@ -0,0 +1,45 @@ +:listing-caption: + += Example Samples + +This contains two examples of automatically numbered "`example blocks`", +followed by a source code block which isn't an example, to show the +differences: + + * <> + * <> + * <> + + +:sep: ¦ + +[[example-1]] +[example] +.Miscellaneous text example +==== +Miscellaneous text in a numbered example block. +==== + +[[example-2]] +[example] +.Source code example +==== +Source code in a numbered example block. + +[source,c++] +---- +main() { + printf("Hello, world\n"); +} +---- +==== + +[[example-3]] +.Source code in a numbered source block +[source,c++] +---- +main() { + printf("Hello, world\n"); +} +---- + diff --git a/adoc/scripts/genanchorlinks.py b/adoc/scripts/genanchorlinks.py new file mode 100644 index 00000000..08b7eab2 --- /dev/null +++ b/adoc/scripts/genanchorlinks.py @@ -0,0 +1,25 @@ +#!/usr/bin/python3 +# +# Copyright (c) 2020-2021 The Khronos Group, Inc. +# SPDX-License-Identifier: Apache-2.0 + +# Script that adds href to anchors + +import os,sys,re + +def genAnchorLinks(in_file, out_file): + try: + with open(in_file, 'r', encoding='utf8') as f: data = f.read() + except FileNotFoundError: + print('Error: File %s does not exist.' % in_file) + sys.exit(2) + + data = re.sub( r'()', '\g<1>\g<2> href="#\g<3>"\g<4>', data) + with open(out_file, 'w', encoding='utf8') as f: data = f.write(data) + +if __name__ == '__main__': + if len(sys.argv) != 3: + print('Error: genanchorlinks.py requires two arguments.') + print('Usage: genanchorlinks.py infile.html outfile.html') + sys.exit(1) + genAnchorLinks(sys.argv[1], sys.argv[2]) diff --git a/adoc/scripts/install-rouge.sh b/adoc/scripts/install-rouge.sh new file mode 100755 index 00000000..76db3f03 --- /dev/null +++ b/adoc/scripts/install-rouge.sh @@ -0,0 +1,25 @@ +#! /bin/bash -vx + +# Update the Docker image and run a command for a given user/group + + +apt install sudo + +# To allow the bash configuration to be read by another user +chmod 755 /root + +# Update obsolete Docker image to latest gems +gem update + +# This one is completely missing from the Docker image +gem install text-hyphen + +# Install latest ruby rouge with SYCL support from Git +cd /tmp +git clone --branch sycl https://github.com/keryell/rouge.git +cd rouge +gem build rouge.gemspec +gem install ./rouge-3.26.0.gem + +# Execute as the original user, preserve the PATH explicitly for the gem bundle +sudo --preserve-env --user \#$USER_ID --group \#$GROUP_ID PATH=$PATH $* diff --git a/adoc/scripts/reflib.py b/adoc/scripts/reflib.py new file mode 100644 index 00000000..13d2de54 --- /dev/null +++ b/adoc/scripts/reflib.py @@ -0,0 +1,637 @@ +#!/usr/bin/python3 +# +# Copyright (c) 2011-2021 The Khronos Group, Inc. +# SPDX-License-Identifier: Apache-2.0 + +# Utility functions for automatic ref page generation + +import io +import re +import sys + +# global errFile, warnFile, diagFile + +errFile = sys.stderr +warnFile = sys.stdout +diagFile = None +logSourcefile = None +logProcname = None +logLine = None + +def unescapeQuotes(s): + """Remove \' escape sequences in a string (refpage description)""" + return s.replace('\\\'', '\'') + +def write(*args, **kwargs ): + file = kwargs.pop('file',sys.stdout) + end = kwargs.pop('end','\n') + file.write(' '.join(str(arg) for arg in args)) + file.write(end) + +def setLogSourcefile(filename): + """Metadata which may be printed (if not None) for diagnostic messages""" + global logSourcefile + logSourcefile = filename + +def setLogProcname(procname): + global logProcname + logProcname = procname + +def setLogLine(line): + global logLine + logLine = line + +def logHeader(severity): + """Generate prefix for a diagnostic line using metadata and severity""" + global logSourcefile, logProcname, logLine + + msg = severity + ': ' + if logProcname: + msg = msg + ' in ' + logProcname + if logSourcefile: + msg = msg + ' for ' + logSourcefile + if logLine: + msg = msg + ' line ' + str(logLine) + return msg + ' ' + +def setLogFile(setDiag, setWarn, filename): + """Set the file handle to log either or both warnings and diagnostics to. + + - setDiag and setWarn are True if the corresponding handle is to be set. + - filename is None for no logging, '-' for stdout, or a pathname.""" + global diagFile, warnFile + + if filename is None: + return + + if filename == '-': + fp = sys.stdout + else: + fp = open(filename, 'w', encoding='utf-8') + + if setDiag: + diagFile = fp + if setWarn: + warnFile = fp + +def logDiag(*args, **kwargs): + file = kwargs.pop('file', diagFile) + end = kwargs.pop('end','\n') + if file is not None: + file.write(logHeader('DIAG') + ' '.join(str(arg) for arg in args)) + file.write(end) + +def logWarn(*args, **kwargs): + file = kwargs.pop('file', warnFile) + end = kwargs.pop('end','\n') + if file is not None: + file.write(logHeader('WARN') + ' '.join(str(arg) for arg in args)) + file.write(end) + +def logErr(*args, **kwargs): + file = kwargs.pop('file', errFile) + end = kwargs.pop('end','\n') + + strfile = io.StringIO() + strfile.write(logHeader('ERROR') + ' '.join(str(arg) for arg in args)) + strfile.write(end) + + if file is not None: + file.write(strfile.getvalue()) + sys.exit(1) + +def isempty(s): + """Return True if s is nothing but white space, False otherwise""" + return len(''.join(s.split())) == 0 + +class pageInfo: + """Information about a ref page relative to the file it's extracted from.""" + def __init__(self): + self.extractPage = True + """True if page should be extracted""" + + self.Warning = None + """string warning if page is suboptimal or can't be generated""" + + self.embed = False + """False or the name of the ref page this include is embedded within""" + + self.type = None + """'structs', 'protos', 'funcpointers', 'flags', 'enums'""" + + self.name = None + """struct/proto/enumerant/etc. name""" + + self.desc = None + """short description of ref page""" + + self.begin = None + """index of first line of the page (heuristic or // refBegin)""" + + self.include = None + """index of include:: line defining the page""" + + self.param = None + """index of first line of parameter/member definitions""" + + self.body = None + """index of first line of body text""" + + self.validity = None + """index of validity include""" + + self.end = None + """index of last line of the page (heuristic validity include, or // refEnd)""" + + self.alias = '' + """aliases of this name, if supplied, or ''""" + + self.refs = '' + """cross-references on // refEnd line, if supplied""" + + self.spec = None + """'spec' attribute in refpage open block, if supplied, or None for the default ('api') type""" + + self.anchor = None + """'anchor' attribute in refpage open block, if supplied, or inferred to be the same as the 'name'""" + +def printPageInfoField(desc, line, file): + """Print a single field of a pageInfo struct, possibly None. + + - desc - string description of field + - line - field value or None + - file - indexed by line""" + if line is not None: + logDiag(desc + ':', line + 1, '\t-> ', file[line], end='') + else: + logDiag(desc + ':', line) + +def printPageInfo(pi, file): + """Print out fields of a pageInfo struct + + - pi - pageInfo + - file - indexed by pageInfo""" + logDiag('TYPE: ', pi.type) + logDiag('NAME: ', pi.name) + logDiag('WARNING:', pi.Warning) + logDiag('EXTRACT:', pi.extractPage) + logDiag('EMBED: ', pi.embed) + logDiag('DESC: ', pi.desc) + printPageInfoField('BEGIN ', pi.begin, file) + printPageInfoField('INCLUDE ', pi.include, file) + printPageInfoField('PARAM ', pi.param, file) + printPageInfoField('BODY ', pi.body, file) + printPageInfoField('VALIDITY', pi.validity, file) + printPageInfoField('END ', pi.end, file) + logDiag('REFS: "' + pi.refs + '"') + +def prevPara(file, line): + """Go back one paragraph from the specified line and return the line number + of the first line of that paragraph. + + Paragraphs are delimited by blank lines. It is assumed that the + current line is the first line of a paragraph. + + - file is an array of strings + - line is the starting point (zero-based)""" + # Skip over current paragraph + while (line >= 0 and not isempty(file[line])): + line = line - 1 + # Skip over white space + while (line >= 0 and isempty(file[line])): + line = line - 1 + # Skip to first line of previous paragraph + while (line >= 1 and not isempty(file[line-1])): + line = line - 1 + return line + +def nextPara(file, line): + """Go forward one paragraph from the specified line and return the line + number of the first line of that paragraph. + + Paragraphs are delimited by blank lines. It is assumed that the + current line is standalone (which is bogus). + + - file is an array of strings + - line is the starting point (zero-based)""" + maxLine = len(file) - 1 + # Skip over current paragraph + while (line != maxLine and not isempty(file[line])): + line = line + 1 + # Skip over white space + while (line != maxLine and isempty(file[line])): + line = line + 1 + return line + +def lookupPage(pageMap, name): + """Return (creating if needed) the pageInfo entry in pageMap for name""" + if name not in pageMap: + pi = pageInfo() + pi.name = name + pageMap[name] = pi + else: + pi = pageMap[name] + return pi + +def loadFile(filename): + """Load a file into a list of strings. Return the list or None on failure""" + try: + fp = open(filename, 'r', encoding='utf-8') + except: + logWarn('Cannot open file', filename, ':', sys.exc_info()[0]) + return None + + file = fp.readlines() + fp.close() + + return file + +def clampToBlock(line, minline, maxline): + """Clamp a line number to be in the range [minline,maxline]. + + If the line number is None, just return it. + If minline is None, don't clamp to that value.""" + if line is None: + return line + if minline and line < minline: + return minline + if line > maxline: + return maxline + + return line + +def fixupRefs(pageMap, specFile, file): + """Fill in missing fields in pageInfo structures, to the extent they can be + inferred. + + - pageMap - dictionary of pageInfo structures + - specFile - filename + - file - list of strings making up the file, indexed by pageInfo""" + # All potential ref pages are now in pageMap. Process them to + # identify actual page start/end/description boundaries, if + # not already determined from the text. + for name in sorted(pageMap.keys()): + pi = pageMap[name] + + # # If nothing is found but an include line with no begin, validity, + # # or end, this is not intended as a ref page (yet). Set the begin + # # line to the include line, so autogeneration can at least + # # pull the include out, but mark it not to be extracted. + # # Examples include the host sync table includes in + # # chapters/fundamentals.txt and the table of Vk*Flag types in + # # appendices/boilerplate.txt. + # if pi.begin is None and pi.validity is None and pi.end is None: + # pi.begin = pi.include + # pi.extractPage = False + # pi.Warning = 'No begin, validity, or end lines identified' + # continue + + # Using open block delimiters, ref pages must *always* have a + # defined begin and end. If either is undefined, that's fatal. + if pi.begin is None: + pi.extractPage = False + pi.Warning = 'Can\'t identify begin of ref page open block' + continue + + if pi.end is None: + pi.extractPage = False + pi.Warning = 'Can\'t identify end of ref page open block' + continue + + # If there's no description of the page, infer one from the type + if pi.desc is None: + if pi.type is not None: + # pi.desc = pi.type[0:len(pi.type)-1] + ' (no short description available)' + pi.Warning = 'No short description available; could infer from the type and name' + else: + pi.extractPage = False + pi.Warning = 'No short description available, cannot infer from the type' + continue + + # Try to determine where the parameter and body sections of the page + # begin. funcpointer, proto, and struct pages infer the location of + # the parameter and body sections. Other pages infer the location of + # the body, but have no parameter sections. + if pi.include is not None: + if pi.type in ['funcpointers', 'protos', 'structs']: + pi.param = nextPara(file, pi.include) + if pi.body is None: + pi.body = nextPara(file, pi.param) + else: + if pi.body is None: + pi.body = nextPara(file, pi.include) + else: + pi.Warning = 'Page does not have an API definition include::' + + # It's possible for the inferred param and body lines to run past + # the end of block, if, for example, there is no parameter section. + pi.param = clampToBlock(pi.param, pi.include, pi.end) + pi.body = clampToBlock(pi.body, pi.param, pi.end) + + # We can get to this point with .include, .param, and .validity + # all being None, indicating those sections weren't found. + + logDiag('fixupRefs: after processing,', pi.name, 'looks like:') + printPageInfo(pi, file) + + # Now that all the valid pages have been found, try to make some + # inferences about invalid pages. + # + # If a reference without a .end is entirely inside a valid reference, + # then it's intentionally embedded - may want to create an indirect + # page that links into the embedding page. This is done by a very + # inefficient double loop, but the loop depth is small. + for name in sorted(pageMap.keys()): + pi = pageMap[name] + + if pi.end is None: + for embedName in sorted(pageMap.keys()): + logDiag('fixupRefs: comparing', pi.name, 'to', embedName) + embed = pageMap[embedName] + # Don't check embeddings which are themselves invalid + if not embed.extractPage: + logDiag('Skipping check for embedding in:', embed.name) + continue + if embed.begin is None or embed.end is None: + logDiag('fixupRefs:', name + ':', + 'can\'t compare to unanchored ref:', embed.name, + 'in', specFile, 'at line', pi.include ) + printPageInfo(pi, file) + printPageInfo(embed, file) + # If an embed is found, change the error to a warning + elif (pi.include is not None and pi.include >= embed.begin and + pi.include <= embed.end): + logDiag('fixupRefs: Found embed for:', name, + 'inside:', embedName, + 'in', specFile, 'at line', pi.include ) + pi.embed = embed.name + pi.Warning = 'Embedded in definition for ' + embed.name + break + else: + logDiag('fixupRefs: No embed match for:', name, + 'inside:', embedName, 'in', specFile, + 'at line', pi.include) + + +# Patterns used to recognize interesting lines in an asciidoc source file. +# These patterns are only compiled once. +INCSVAR_DEF = re.compile(r':INCS-VAR: (?P.*)') +endifPat = re.compile(r'^endif::(?P[\w_+,]+)\[\]') +beginPat = re.compile(r'^\[open,(?Prefpage=.*)\]') +# attribute key/value pairs of an open block +attribStr = r"([a-z]+)='([^'\\]*(?:\\.[^'\\]*)*)'" +attribPat = re.compile(attribStr) +bodyPat = re.compile(r'^// *refBody') +errorPat = re.compile(r'^// *refError') + +# This regex transplanted from check_spec_links +# It looks for either OpenXR or Vulkan generated file conventions, and for +# the api/validity include (generated_type), protos/struct/etc path +# (category), and API name (entity_name). It could be put into the API +# conventions object. +INCLUDE = re.compile( + r'include::(?P((../){1,4}|\{INCS-VAR\}/|\{generated\}/)(generated/)?)(?P[\w]+)/(?P\w+)/(?P[^./]+).txt[\[][\]]') + + +def findRefs(file, filename): + """Identify reference pages in a list of strings, returning a dictionary of + pageInfo entries for each one found, or None on failure.""" + setLogSourcefile(filename) + setLogProcname('findRefs') + + # To reliably detect the open blocks around reference pages, we must + # first detect the '[open,refpage=...]' markup delimiting the block; + # skip past the '--' block delimiter on the next line; and identify the + # '--' block delimiter closing the page. + # This can't be done solely with pattern matching, and requires state to + # track 'inside/outside block'. + # When looking for open blocks, possible states are: + # 'outside' - outside a block + # 'start' - have found the '[open...]' line + # 'inside' - have found the following '--' line + openBlockState = 'outside' + + # Dictionary of interesting line numbers and strings related to an API + # name + pageMap = {} + + numLines = len(file) + line = 0 + + # Track the pageInfo object corresponding to the current open block + pi = None + incsvar = None + + while (line < numLines): + setLogLine(line) + + # Look for a file-wide definition + matches = INCSVAR_DEF.match(file[line]) + if matches: + incsvar = matches.group('value') + logDiag('Matched INCS-VAR definition:', incsvar) + + line = line + 1 + continue + + # Perform INCS-VAR substitution immediately. + if incsvar and '{INCS-VAR}' in file[line]: + newLine = file[line].replace('{INCS-VAR}', incsvar) + logDiag('PERFORMING SUBSTITUTION', file[line], '->', newLine) + file[line] = newLine + + # Only one of the patterns can possibly match. Add it to + # the dictionary for that name. + + # [open,refpage=...] starting a refpage block + matches = beginPat.search(file[line]) + if matches is not None: + logDiag('Matched open block pattern') + attribs = matches.group('attribs') + + # If the previous open block wasn't closed, raise an error + if openBlockState != 'outside': + logErr('Nested open block starting at line', line, 'of', + filename) + + openBlockState = 'start' + + # Parse the block attributes + matches = attribPat.findall(attribs) + + # Extract each attribute + name = None + desc = None + refpage_type = None + spec_type = None + anchor = None + alias = None + xrefs = None + + for (key,value) in matches: + logDiag('got attribute', key, '=', value) + if key == 'refpage': + name = value + elif key == 'desc': + desc = unescapeQuotes(value) + elif key == 'type': + refpage_type = value + elif key == 'spec': + spec_type = value + elif key == 'anchor': + anchor = value + elif key == 'alias': + alias = value + elif key == 'xrefs': + xrefs = value + else: + logWarn('unknown open block attribute:', key) + + if name is None or desc is None or refpage_type is None: + logWarn('missing one or more required open block attributes:' + 'refpage, desc, or type') + # Leave pi is None so open block delimiters are ignored + else: + pi = lookupPage(pageMap, name) + pi.desc = desc + # Must match later type definitions in interface/validity includes + pi.type = refpage_type + pi.spec = spec_type + pi.anchor = anchor + if alias: + pi.alias = alias + if xrefs: + pi.refs = xrefs + logDiag('open block for', name, 'added DESC =', desc, + 'TYPE =', refpage_type, 'ALIAS =', alias, + 'XREFS =', xrefs, 'SPEC =', spec_type, + 'ANCHOR =', anchor) + + line = line + 1 + continue + + # '--' starting or ending and open block + if file[line].rstrip() == '--': + if openBlockState == 'outside': + # Only refpage open blocks should use -- delimiters + logWarn('Unexpected double-dash block delimiters') + elif openBlockState == 'start': + # -- delimiter following [open,refpage=...] + openBlockState = 'inside' + + if pi is None: + logWarn('no pageInfo available for opening -- delimiter') + else: + pi.begin = line + 1 + logDiag('opening -- delimiter: added BEGIN =', pi.begin) + elif openBlockState == 'inside': + # -- delimiter ending an open block + if pi is None: + logWarn('no pageInfo available for closing -- delimiter') + else: + pi.end = line - 1 + logDiag('closing -- delimiter: added END =', pi.end) + + openBlockState = 'outside' + pi = None + else: + logWarn('unknown openBlockState:', openBlockState) + + line = line + 1 + continue + + matches = INCLUDE.search(file[line]) + if matches is not None: + # Something got included, not sure what yet. + gen_type = matches.group('generated_type') + refpage_type = matches.group('category') + name = matches.group('entity_name') + + # This will never match in OpenCL + if gen_type == 'validity': + logDiag('Matched validity pattern') + if pi is not None: + if pi.type and refpage_type != pi.type: + logWarn('ERROR: pageMap[' + name + '] type:', + pi.type, 'does not match type:', refpage_type) + pi.type = refpage_type + pi.validity = line + logDiag('added TYPE =', pi.type, 'VALIDITY =', pi.validity) + else: + logWarn('validity include:: line NOT inside block') + + line = line + 1 + continue + + if gen_type == 'api': + logDiag('Matched include pattern') + if pi is not None: + if pi.include is not None: + logDiag('found multiple includes for this block') + if pi.type and refpage_type != pi.type: + logWarn('ERROR: pageMap[' + name + '] type:', + pi.type, 'does not match type:', refpage_type) + pi.type = refpage_type + pi.include = line + logDiag('added TYPE =', pi.type, 'INCLUDE =', pi.include) + else: + logWarn('interface include:: line NOT inside block') + + line = line + 1 + continue + + logDiag('ignoring unrecognized include line ', matches.group()) + + # Vulkan 1.1 markup allows the last API include construct to be + # followed by an asciidoctor endif:: construct (and also preceded, + # at some distance). + # This looks for endif:: immediately following an include:: line + # and, if found, moves the include boundary to this line. + matches = endifPat.search(file[line]) + if matches is not None and pi is not None: + if pi.include == line - 1: + logDiag('Matched endif pattern following include; moving include') + pi.include = line + else: + logDiag('Matched endif pattern (not following include)') + + line = line + 1 + continue + + matches = bodyPat.search(file[line]) + if matches is not None: + logDiag('Matched // refBody pattern') + if pi is not None: + pi.body = line + logDiag('added BODY =', pi.body) + else: + logWarn('// refBody line NOT inside block') + + line = line + 1 + continue + + # OpenCL spec uses // refError to tag "validity" (Errors) language, + # instead of /validity/ includes. + matches = errorPat.search(file[line]) + if matches is not None: + logDiag('Matched // refError pattern') + if pi is not None: + pi.validity = line + logDiag('added VALIDITY (refError) =', pi.validity) + else: + logWarn('// refError line NOT inside block') + + line = line + 1 + continue + + line = line + 1 + continue + + if pi is not None: + logErr('Unclosed open block at EOF!') + + setLogSourcefile(None) + setLogProcname(None) + setLogLine(None) + + return pageMap diff --git a/adoc/scripts/reflow.py b/adoc/scripts/reflow.py new file mode 100755 index 00000000..cd8709e0 --- /dev/null +++ b/adoc/scripts/reflow.py @@ -0,0 +1,814 @@ +#!/usr/bin/python3 +# +# Copyright (c) 2011-2021 The Khronos Group, Inc. +# SPDX-License-Identifier: Apache-2.0 + +"""Used for automatic reflow of spec sources to satisfy the agreed layout to +minimize git churn. Most of the logic has to do with detecting asciidoc +markup or block types that *shouldn't* be reflowed (tables, code) and +ignoring them. It's very likely there are many asciidoc constructs not yet +accounted for in the script, our usage of asciidoc markup is intentionally +somewhat limited. + +Also used to insert identifying tags on explicit Valid Usage statements. + +Usage: `reflow.py [-noflow] [-tagvu] [-nextvu #] [-overwrite] [-out dir] [-suffix str] files` + +- `-noflow` acts as a passthrough, instead of reflowing text. Other + processing may occur. +- `-tagvu` generates explicit VUID tag for Valid Usage statements which + don't already have them. +- `-nextvu #` starts VUID tag generation at the specified # instead of + the value wired into the `reflow.py` script. +- `-overwrite` updates in place (can be risky, make sure there are backups) +- `-out` specifies directory to create output file in, default 'out' +- `-suffix` specifies suffix to add to output files, default '' +- `files` are asciidoc source files from the spec to reflow. +""" +# For error and file-loading interfaces only +import argparse +import os +import re +import subprocess +import sys +from reflib import loadFile, logDiag, logWarn, logErr, setLogFile +from vuidCounts import vuidCounts + +# Vulkan-specific - will consolidate into scripts/ like OpenXR soon +sys.path.insert(0, 'xml') + +from vkconventions import VulkanConventions as APIConventions +conventions = APIConventions() + +# Markup that always ends a paragraph +# empty line or whitespace +# [block options] +# [[anchor]] +# // comment +# <<<< page break +# :attribute-setting +# macro-directive::terms +# + standalone list item continuation +# label:: labelled list - label must be standalone +endPara = re.compile(r'^( *|\[.*\]|//.*|<<<<|:.*|[a-z]+::.*|\+|.*::)$') + +# Special case of markup ending a paragraph, used to track the current +# command/structure. This allows for either OpenXR or Vulkan API path +# conventions. Nominally it should use the file suffix defined by the API +# conventions (conventions.file_suffix), except that XR uses '.txt' for +# generated API include files, not '.adoc' like its other includes. +includePat = re.compile( + r'include::(?P((../){1,4}|\{INCS-VAR\}/|\{generated\}/)(generated/)?)(?P[\w]+)/(?P\w+)/(?P[^./]+).txt[\[][\]]') + +# Find the first pname: pattern in a Valid Usage statement +pnamePat = re.compile(r'pname:(?P\w+)') + +# Markup that's OK in a contiguous paragraph but otherwise passed through +# .anything +# === Section Titles +endParaContinue = re.compile(r'^(\..*|=+ .*)$') + +# Markup for block delimiters whose contents *should* be reformatted +# -- (exactly two) (open block) +# **** (4 or more) (sidebar block - why do we have these?!) +# ==== (4 or more) (example block) +# ____ (4 or more) (quote block) +blockReflow = re.compile(r'^(--|[*=_]{4,})$') + +# Fake block delimiters for "common" VU statements +blockCommonReflow = '// Common Valid Usage\n' + +# Markup for block delimiters whose contents should *not* be reformatted +# |=== (3 or more) (table) +# ++++ (4 or more) (passthrough block) +# .... (4 or more) (literal block) +# //// (4 or more) (comment block) +# ---- (4 or more) (listing block) +# ``` (3 or more) (listing block) +# **** (4 or more) (sidebar block) +blockPassthrough = re.compile(r'^(\|={3,}|[`]{3}|[-+./]{4,})$') + +# Markup for introducing lists (hanging paragraphs) +# * bullet +# ** bullet +# -- bullet +# . bullet +# :: bullet (no longer supported by asciidoctor 2) +# {empty}:: bullet +# 1. list item +beginBullet = re.compile(r'^ *([*-.]+|\{empty\}::|::|[0-9]+[.]) ') + +# Text that (may) not end sentences + +# A single letter followed by a period, typically a middle initial. +endInitial = re.compile(r'^[A-Z]\.$') +# An abbreviation, which doesn't (usually) end a line. +endAbbrev = re.compile(r'(e\.g|i\.e|c\.f|vs)\.$', re.IGNORECASE) + +class ReflowState: + """State machine for reflowing. + + Represents the state of the reflow operation""" + def __init__(self, + filename, + margin = 76, + file = sys.stdout, + breakPeriod = True, + reflow = True, + nextvu = None, + maxvu = None): + + self.blockStack = [ None ] + """The last element is a line with the asciidoc block delimiter that's currently in effect, + such as '--', '----', '****', '======', or '+++++++++'. + This affects whether or not the block contents should be formatted.""" + + self.reflowStack = [ True ] + """The last element is True or False if the current blockStack contents + should be reflowed.""" + self.vuStack = [ False ] + """the last element is True or False if the current blockStack contents + are an explicit Valid Usage block.""" + + self.margin = margin + """margin to reflow text to.""" + + self.para = [] + """list of lines in the paragraph being accumulated. + When this is non-empty, there is a current paragraph.""" + + self.lastTitle = False + """true if the previous line was a document title line + (e.g. :leveloffset: 0 - no attempt to track changes to this is made).""" + + self.leadIndent = 0 + """indent level (in spaces) of the first line of a paragraph.""" + + self.hangIndent = 0 + """indent level of the remaining lines of a paragraph.""" + + self.file = file + """file pointer to write to.""" + + self.filename = filename + """base name of file being read from.""" + + self.lineNumber = 0 + """line number being read from the input file.""" + + self.breakPeriod = breakPeriod + """True if justification should break to a new line after the end of a sentence.""" + + self.breakInitial = True + """True if justification should break to a new line after + something that appears to be an initial in someone's name. **TBD**""" + + self.reflow = reflow + """True if text should be reflowed, False to pass through unchanged.""" + + self.vuPrefix = 'VUID' + """Prefix of generated Valid Usage tags""" + + self.vuFormat = '{0}-{1}-{2}-{3:0>5d}' + """Format string for generating Valid Usage tags. + First argument is vuPrefix, second is command/struct name, third is parameter name, fourth is the tag number.""" + + self.nextvu = nextvu + """Integer to start tagging un-numbered Valid Usage statements with, + or None if no tagging should be done.""" + + self.maxvu = maxvu + """Maximum tag to use for Valid Usage statements, or None if no + tagging should be done.""" + + self.apiName = '' + """String name of a Vulkan structure or command for VUID tag generation, + or None if one hasn't been included in this file yet.""" + + def incrLineNumber(self): + self.lineNumber = self.lineNumber + 1 + + def printLines(self, lines): + """Print an array of lines with newlines already present""" + logDiag(':: printLines:', len(lines), 'lines: ', lines[0], end='') + for line in lines: + print(line, file=self.file, end='') + + def endSentence(self, word): + """Return True if word ends with a sentence-period, False otherwise. + + Allows for contraction cases which won't end a line: + + - A single letter (if breakInitial is True) + - Abbreviations: 'c.f.', 'e.g.', 'i.e.' (or mixed-case versions)""" + if (word[-1:] != '.' or + endAbbrev.search(word) or + (self.breakInitial and endInitial.match(word))): + return False + + return True + + def vuidAnchor(self, word): + """Return True if word is a Valid Usage ID Tag anchor.""" + return (word[0:7] == '[[VUID-') + + def isOpenBlockDelimiter(self, line): + """Returns True if line is an open block delimiter.""" + return line[0:2] == '--' + + def reflowPara(self): + """Reflow the current paragraph, respecting the paragraph lead and + hanging indentation levels. + + The algorithm also respects trailing '+' signs that indicate embedded newlines, + and will not reflow a very long word immediately after a bullet point. + + Just return the paragraph unchanged if the -noflow argument was + given.""" + if not self.reflow: + return self.para + + logDiag('reflowPara lead indent = ', self.leadIndent, + 'hangIndent =', self.hangIndent, + 'para:', self.para[0], end='') + + # Total words processed (we care about the *first* word vs. others) + wordCount = 0 + + # Tracks the *previous* word processed. It must not be empty. + prevWord = ' ' + + #import pdb; pdb.set_trace() + + for line in self.para: + line = line.rstrip() + words = line.split() + + # logDiag('reflowPara: input line =', line) + numWords = len(words) - 1 + + for i in range(0, numWords + 1): + word = words[i] + wordLen = len(word) + wordCount += 1 + + endEscape = False + if i == numWords and word == '+': + # Trailing ' +' must stay on the same line + endEscape = word + # logDiag('reflowPara last word of line =', word, 'prevWord =', prevWord, 'endEscape =', endEscape) + else: + pass + # logDiag('reflowPara wordCount =', wordCount, 'word =', word, 'prevWord =', prevWord) + + if wordCount == 1: + # The first word of the paragraph is treated specially. + # The loop logic becomes trickier if all this code is + # done prior to looping over lines and words, so all the + # setup logic is done here. + + outPara = [] + outLine = ''.ljust(self.leadIndent) + word + outLineLen = self.leadIndent + wordLen + + # If the paragraph begins with a bullet point, generate + # a hanging indent level if there isn't one already. + if beginBullet.match(self.para[0]): + bulletPoint = True + if len(self.para) > 1: + logDiag('reflowPara first line matches bullet point', + 'but indent already hanging @ input line', + self.lineNumber) + else: + logDiag('reflowPara first line matches bullet point -' + 'single line, assuming hangIndent @ input line', + self.lineNumber) + self.hangIndent = outLineLen + 1 + else: + bulletPoint = False + else: + # Possible actions to take with this word + # + # addWord - add word to current line + # closeLine - append line and start a new (null) one + # startLine - add word to a new line + + # Default behavior if all the tests below fail is to add + # this word to the current line, and keep accumulating + # that line. + (addWord, closeLine, startLine) = (True, False, False) + + # How long would this line be if the word were added? + newLen = outLineLen + 1 + wordLen + + # Are we on the first word following a bullet point? + firstBullet = (wordCount == 2 and bulletPoint) + + if endEscape: + # If the new word ends the input line with ' +', + # add it to the current line. + + (addWord, closeLine, startLine) = (True, True, False) + elif self.vuidAnchor(word): + # If the new word is a Valid Usage anchor, break the + # line afterwards. Note that this should only happen + # immediately after a bullet point, but we don't + # currently check for this. + (addWord, closeLine, startLine) = (True, True, False) + elif newLen > self.margin: + if firstBullet: + # If the word follows a bullet point, add it to + # the current line no matter its length. + + (addWord, closeLine, startLine) = (True, True, False) + else: + # The word overflows, so add it to a new line. + + (addWord, closeLine, startLine) = (False, True, True) + elif (self.breakPeriod and + (wordCount > 2 or not firstBullet) and + self.endSentence(prevWord)): + # If the previous word ends a sentence and + # breakPeriod is set, start a new line. + # The complicated logic allows for leading bullet + # points which are periods (implicitly numbered lists). + # @@@ But not yet for explicitly numbered lists. + + (addWord, closeLine, startLine) = (False, True, True) + + # Add a word to the current line + if addWord: + if outLine: + outLine += ' ' + word + outLineLen = newLen + else: + # Fall through to startLine case if there's no + # current line yet. + startLine = True + + # Add current line to the output paragraph. Force + # starting a new line, although we don't yet know if it + # will ever have contents. + if closeLine: + if outLine: + outPara.append(outLine + '\n') + outLine = None + + # Start a new line and add a word to it + if startLine: + outLine = ''.ljust(self.hangIndent) + word + outLineLen = self.hangIndent + wordLen + + # Track the previous word, for use in breaking at end of + # a sentence + prevWord = word + + # Add this line to the output paragraph. + if outLine: + outPara.append(outLine + '\n') + + return outPara + + def emitPara(self): + """Emit a paragraph, possibly reflowing it depending on the block context. + + Resets the paragraph accumulator.""" + if self.para != []: + if self.vuStack[-1] and self.nextvu is not None: + # If: + # - this paragraph is in a Valid Usage block, + # - VUID tags are being assigned, + # Try to assign VUIDs + + if nestedVuPat.search(self.para[0]): + # Check for nested bullet points. These should not be + # assigned VUIDs, nor present at all, because they break + # the VU extractor. + logWarn(self.filename + ': Invalid nested bullet point in VU block:', self.para[0]) + elif self.vuPrefix not in self.para[0]: + # If: + # - a tag is not already present, and + # - the paragraph is a properly marked-up list item + # Then add a VUID tag starting with the next free ID. + + # Split the first line after the bullet point + matches = vuPat.search(self.para[0]) + if matches is not None: + logDiag('findRefs: Matched vuPat on line:', self.para[0], end='') + head = matches.group('head') + tail = matches.group('tail') + + # Use the first pname: statement in the paragraph as + # the parameter name in the VUID tag. This won't always + # be correct, but should be highly reliable. + for vuLine in self.para: + matches = pnamePat.search(vuLine) + if matches is not None: + break + + if matches is not None: + paramName = matches.group('param') + else: + paramName = 'None' + logWarn(self.filename, + 'No param name found for VUID tag on line:', + self.para[0]) + + newline = (head + ' [[' + + self.vuFormat.format(self.vuPrefix, + self.apiName, + paramName, + self.nextvu) + ']] ' + tail) + + logDiag('Assigning', self.vuPrefix, self.apiName, self.nextvu, + ' on line:', self.para[0], '->', newline, 'END') + + # Don't actually assign the VUID unless it's in the reserved range + if self.nextvu <= self.maxvu: + if self.nextvu == self.maxvu: + logWarn('Skipping VUID assignment, no more VUIDs available') + self.para[0] = newline + self.nextvu = self.nextvu + 1 + # else: + # There are only a few cases of this, and they're all + # legitimate. Leave detecting this case to another tool + # or hand inspection. + # logWarn(self.filename + ': Unexpected non-bullet item in VU block (harmless if following an ifdef):', + # self.para[0]) + + if self.reflowStack[-1]: + self.printLines(self.reflowPara()) + else: + self.printLines(self.para) + + # Reset the paragraph, including its indentation level + self.para = [] + self.leadIndent = 0 + self.hangIndent = 0 + + def endPara(self, line): + """'line' ends a paragraph and should itself be emitted. + line may be None to indicate EOF or other exception.""" + logDiag('endPara line', self.lineNumber, ': emitting paragraph') + + # Emit current paragraph, this line, and reset tracker + self.emitPara() + + if line: + self.printLines( [ line ] ) + + def endParaContinue(self, line): + """'line' ends a paragraph (unless there's already a paragraph being + accumulated, e.g. len(para) > 0 - currently not implemented)""" + self.endPara(line) + + def endBlock(self, line, reflow = False, vuBlock = False): + """'line' begins or ends a block. + + If beginning a block, tag whether or not to reflow the contents. + + vuBlock is True if the previous line indicates this is a Valid Usage block.""" + self.endPara(line) + + if self.blockStack[-1] == line: + logDiag('endBlock line', self.lineNumber, + ': popping block end depth:', len(self.blockStack), + ':', line, end='') + + # Reset apiName at the end of an open block. + # Open blocks cannot be nested, so this is safe. + if self.isOpenBlockDelimiter(line): + logDiag('reset apiName to empty at line', self.lineNumber) + self.apiName = '' + else: + logDiag('NOT resetting apiName to empty at line', self.lineNumber) + + self.blockStack.pop() + self.reflowStack.pop() + self.vuStack.pop() + else: + # Start a block + self.blockStack.append(line) + self.reflowStack.append(reflow) + self.vuStack.append(vuBlock) + + logDiag('endBlock reflow =', reflow, ' line', self.lineNumber, + ': pushing block start depth', len(self.blockStack), + ':', line, end='') + + def endParaBlockReflow(self, line, vuBlock): + """'line' begins or ends a block. The paragraphs in the block *should* be + reformatted (e.g. a NOTE).""" + self.endBlock(line, reflow = True, vuBlock = vuBlock) + + def endParaBlockPassthrough(self, line): + """'line' begins or ends a block. The paragraphs in the block should + *not* be reformatted (e.g. a code listing).""" + self.endBlock(line, reflow = False) + + def addLine(self, line): + """'line' starts or continues a paragraph. + + Paragraphs may have "hanging indent", e.g. + + ``` + * Bullet point... + ... continued + ``` + + In this case, when the higher indentation level ends, so does the + paragraph.""" + logDiag('addLine line', self.lineNumber, ':', line, end='') + + # See https://stackoverflow.com/questions/13648813/what-is-the-pythonic-way-to-count-the-leading-spaces-in-a-string + indent = len(line) - len(line.lstrip()) + + # A hanging paragraph ends due to a less-indented line. + if self.para != [] and indent < self.hangIndent: + logDiag('addLine: line reduces indentation, emit paragraph') + self.emitPara() + + # A bullet point (or something that looks like one) always ends the + # current paragraph. + if beginBullet.match(line): + logDiag('addLine: line matches beginBullet, emit paragraph') + self.emitPara() + + if self.para == []: + # Begin a new paragraph + self.para = [ line ] + self.leadIndent = indent + self.hangIndent = indent + else: + # Add a line to a paragraph. Increase the hanging indentation + # level - once. + if self.hangIndent == self.leadIndent: + self.hangIndent = indent + self.para.append(line) + +def apiMatch(oldname, newname): + """Returns whether oldname and newname match, up to an API suffix.""" + upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + return oldname.rstrip(upper) == newname.rstrip(upper) + +def reflowFile(filename, args): + logDiag('reflow: filename', filename) + + lines = loadFile(filename) + if lines is None: + return + + # Output file handle and reflow object for this file. There are no race + # conditions on overwriting the input, but it's not recommended unless + # you have backing store such as git. + + if args.overwrite: + outFilename = filename + else: + outFilename = args.outDir + '/' + os.path.basename(filename) + args.suffix + + try: + fp = open(outFilename, 'w', encoding='utf8') + except: + logWarn('Cannot open output file', filename, ':', sys.exc_info()[0]) + return + + state = ReflowState(filename, + file = fp, + reflow = not args.noflow, + nextvu = args.nextvu, + maxvu = args.maxvu) + + for line in lines: + state.incrLineNumber() + + # Is this a title line (leading '= ' followed by text)? + thisTitle = False + + # The logic here is broken. If we're in a non-reflowable block and + # this line *doesn't* end the block, it should always be + # accumulated. + + # Test for a blockCommonReflow delimiter comment first, to avoid + # treating it solely as a end-Paragraph marker comment. + if line == blockCommonReflow: + # Starting or ending a pseudo-block for "common" VU statements. + + # Common VU statements use an Asciidoc variable as the apiName, + # instead of inferring it from the most recent API include. + state.apiName = '{refpage}' + state.endParaBlockReflow(line, vuBlock = True) + + elif blockReflow.match(line): + # Starting or ending a block whose contents may be reflowed. + # Blocks cannot be nested. + + # Is this is an explicit Valid Usage block? + vuBlock = (state.lineNumber > 1 and + lines[state.lineNumber-2] == '.Valid Usage\n') + + state.endParaBlockReflow(line, vuBlock) + + elif endPara.match(line): + # Ending a paragraph. Emit the current paragraph, if any, and + # prepare to begin a new paragraph. + + state.endPara(line) + + # If this is an include:: line starting the definition of a + # structure or command, track that for use in VUID generation. + + matches = includePat.search(line) + if matches is not None: + generated_type = matches.group('generated_type') + include_type = matches.group('category') + if generated_type == 'api' and include_type in ('protos', 'structs'): + apiName = matches.group('entity_name') + if state.apiName != '': + # This happens when there are multiple API include + # lines in a single block. The style guideline is to + # always place the API which others are promoted to + # first. In virtually all cases, the promoted API + # will differ solely in the vendor suffix (or + # absence of it), which is benign. + if not apiMatch(state.apiName, apiName): + logWarn('Promoted API name mismatch at line', + state.lineNumber, + ':', + 'apiName:', apiName, + 'does not match state.apiName:', + state.apiName) + else: + state.apiName = apiName + + elif endParaContinue.match(line): + # For now, always just end the paragraph. + # Could check see if len(para) > 0 to accumulate. + + state.endParaContinue(line) + + # If it's a title line, track that + if line[0:2] == '= ': + thisTitle = True + + elif blockPassthrough.match(line): + # Starting or ending a block whose contents must not be reflowed. + # These are tables, etc. Blocks cannot be nested. + + state.endParaBlockPassthrough(line) + elif state.lastTitle: + # The previous line was a document title line. This line + # is the author / credits line and must not be reflowed. + + state.endPara(line) + else: + # Just accumulate a line to the current paragraph. Watch out for + # hanging indents / bullet-points and track that indent level. + + state.addLine(line) + + state.lastTitle = thisTitle + + # Cleanup at end of file + state.endPara(None) + + # Sanity check on block nesting + if len(state.blockStack) > 1: + logWarn('file', filename, + 'mismatched asciidoc block delimiters at EOF:', + state.blockStack[-1]) + + fp.close() + + # Update the 'nextvu' value + if args.nextvu != state.nextvu: + logWarn('Updated nextvu to', state.nextvu, 'after file', filename) + args.nextvu = state.nextvu + +def reflowAllAdocFiles(folder_to_reflow, args): + for root, subdirs, files in os.walk(folder_to_reflow): + for file in files: + if file.endswith(conventions.file_suffix): + file_path = os.path.join(root, file) + reflowFile(file_path, args) + for subdir in subdirs: + sub_folder = os.path.join(root, subdir) + print('Sub-folder = %s' % sub_folder) + if subdir.lower() not in conventions.spec_no_reflow_dirs: + print(' Parsing = %s' % sub_folder) + reflowAllAdocFiles(sub_folder, args) + else: + print(' Skipping = %s' % sub_folder) + +# Patterns used to recognize interesting lines in an asciidoc source file. +# These patterns are only compiled once. + +# Explicit Valid Usage list item with one or more leading asterisks +# The re.DOTALL is needed to prevent vuPat.search() from stripping +# the trailing newline. +vuPat = re.compile(r'^(?P [*]+)( *)(?P.*)', re.DOTALL) + +# Pattern matching leading nested bullet points +global nestedVuPat +nestedVuPat = re.compile(r'^ \*\*') + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + + parser.add_argument('-diag', action='store', dest='diagFile', + help='Set the diagnostic file') + parser.add_argument('-warn', action='store', dest='warnFile', + help='Set the warning file') + parser.add_argument('-log', action='store', dest='logFile', + help='Set the log file for both diagnostics and warnings') + parser.add_argument('-overwrite', action='store_true', + help='Overwrite input filenames instead of writing different output filenames') + parser.add_argument('-out', action='store', dest='outDir', + default='out', + help='Set the output directory in which updated files are generated (default: out)') + parser.add_argument('-tagvu', action='store_true', + help='Tag un-tagged Valid Usage statements starting at the value wired into reflow.py') + parser.add_argument('-nextvu', action='store', dest='nextvu', type=int, + default=None, + help='Specify start VUID to use instead of the value wired into vuidCounts.py') + parser.add_argument('-maxvu', action='store', dest='maxvu', type=int, + default=None, + help='Specify maximum VUID instead of the value wired into vuidCounts.py') + parser.add_argument('-branch', action='store', dest='branch', + help='Specify branch to assign VUIDs for.') + parser.add_argument('-noflow', action='store_true', dest='noflow', + help='Do not reflow text. Other actions may apply.') + parser.add_argument('-suffix', action='store', dest='suffix', + default='', + help='Set the suffix added to updated file names (default: none)') + parser.add_argument('files', metavar='filename', nargs='*', + help='a filename to reflow text in') + parser.add_argument('--version', action='version', version='%(prog)s 1.0') + + args = parser.parse_args() + + setLogFile(True, True, args.logFile) + setLogFile(True, False, args.diagFile) + setLogFile(False, True, args.warnFile) + + if args.overwrite: + logWarn("reflow.py: will overwrite all input files") + + if args.branch is None: + # Determine current git branch + command = [ 'git', 'symbolic-ref', '--short', 'HEAD' ] + results = subprocess.run(command, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + if len(results.stderr) > 0: + logErr('Cannot determine current git branch:', results.stderr) + + # Remove newline from output and convert to a string + branch = results.stdout.rstrip().decode() + if len(branch) > 0: + # Strip trailing newline + branch = results.stdout.decode()[0:-1] + args.branch = branch + + if args.tagvu and args.nextvu is None: + if args.branch not in vuidCounts: + logErr('Branch', args.branch, 'not in vuidCounts, cannot continue') + maxVUID = vuidCounts[args.branch][1] + startVUID = vuidCounts[args.branch][2] + args.nextvu = startVUID + args.maxvu = maxVUID + + if args.nextvu is not None: + logWarn('Tagging untagged Valid Usage statements starting at', args.nextvu) + + # If no files are specified, reflow the entire specification chapters folder + if not args.files: + folder_to_reflow = conventions.spec_reflow_path + logWarn('Reflowing all asciidoc files under', folder_to_reflow) + reflowAllAdocFiles(folder_to_reflow, args) + else: + for file in args.files: + reflowFile(file, args) + + if args.nextvu is not None and args.nextvu != startVUID: + # Update next free VUID to assign + vuidCounts[args.branch][2] = args.nextvu + try: + reflow_count_file_path = os.path.dirname(os.path.realpath(__file__)) + reflow_count_file_path += '/vuidCounts.py' + reflow_count_file = open(reflow_count_file_path, 'w', encoding='utf8') + print('# Do not edit this file!', file=reflow_count_file) + print('# VUID ranges reserved for branches', file=reflow_count_file) + print('# Key is branch name, value is [ start, end, nextfree ]', file=reflow_count_file) + print('vuidCounts = {', file=reflow_count_file) + for key in sorted(vuidCounts): + print(" '{}': [ {}, {}, {} ],".format( + key, + vuidCounts[key][0], + vuidCounts[key][1], + vuidCounts[key][2]), + file=reflow_count_file) + print('}', file=reflow_count_file) + reflow_count_file.close() + except: + logWarn('Cannot open output count file vuidCounts.py', ':', sys.exc_info()[0]) diff --git a/adoc/scripts/vuidCounts.py b/adoc/scripts/vuidCounts.py new file mode 100644 index 00000000..c9e0831e --- /dev/null +++ b/adoc/scripts/vuidCounts.py @@ -0,0 +1,8 @@ +# Do not edit this file! +# VUID ranges reserved for branches +# Key is branch name, value is [ start, end, nextfree ] +vuidCounts = { + 'branch-vuids': [ 4000, 4999, 4052 ], + 'devel': [ 3000, 3999, 3570 ], + 'master': [ 4000, 4999, 4052 ], +} diff --git a/adoc/sycl-2020.pdf b/adoc/sycl-2020.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5e3a2bf4415e415814c9c4d155e3edb33a50e0bb GIT binary patch literal 2468118 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

    ^M-m9 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

    8iS3wA?|L|t8u|!Y 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
    ^wKh!fwe*?kW> z#e58o2os7ff5swV0hVFkwVHbtz)sq)22_zmPuE*IT5Am?^bI1=&uljdzY%1;+Zw;i z3I0kLy!5;JO5#@V`)1wsmz$6xs(4seFE=Fk6DsTinz;HloJirNpi3#s`?J9L`%}v} z5|-9&tQF)0N&{cznu#V3>}Lq8*~?Y&jYSps))@NzvvKHR9v|0!2u6!b1|~ernxJ># z8xX5^nnPWMU`ED1B-xqc8&aYTf9iCxmIy7egi6<;(J+&EK7v1er2&%np;lx^2=|D9 zYgPsD=Vg$B*!-gq@^!t!nS(W~<_C$q<%=_kotA$vvxJKGQwPw=qnC-#G}&59p&y705)eXH&=)*I!bSv z1r~=Mm8F~zaELD;i~%C_4$4gl-9Ok!#!I4A0;

    *5w5X2WuIrU)-}h$9rs=WVG;gq!{1v~1jH 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%0Aeperx&A;VGwqi7=g?BKV|<+$SOx^74{& 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⪼*tC z8qEhk zO>i-lMvn>;h5qK+<#CUBjpszE2*b9eNu}wD=MeeKqBIcXQ$M6ODiu@d{JOK9bqP6s z0Yp2g+#@&uv9$Y)lb08f&b-i;FW9p@by0zA*B=T+TUt?D2y{4tL?bM$PZxivMBhoO zL|g+Ka~pGZf*OAg-@oPjL%LGbzmifMKG8m0HvAY2$|a0jc%9@HW9r98N@{m}JD|X- zP3uTg4F%J=m8$TDPl(8lQzRkE5TO@_WCt-{K`$-M%)U2^geAcPtBuK| z`Pil)KtkFDcuQ{awRSD{awT3ugtSAD#RUgm$G4!xoGNr#k-a{glVU1NDn79Ml;P{6 z(VCTc$uh}1P2cl9>H9BFA?^BA4Ox;d#DHv3Ixg2?l#Sqty0In6(v<%x-}KdG@uRln zQ~anAbmKiNV-aLLIbSj!J5u|>JS);uiS05Ds^(g=q_9$e8gbt?oydl)SgI_@PlS~1 z=fO(VGtn0D>=ku%8|j-9wu^^%SR?=Gz0zqLECt!Qa2Ryrhv}C{>FnMe#=kO+dOVO2 zN+UwjA!+VaUF9+-(3tC#y}DbM`tKPKY7}zQEP^bn)=f{amaN-00kEu+Q3rb4Pw-($uC7T37Co<)&Ttr zl+B)u(S8vWX2{sF?)u((kjsst2Ht=gN}T=JoQdG(?<>p~b<-UjzE`PN-&Cqz zr*t^{dP=AKDCibHt52JMBsCt~2Pc|0oVmgIoV5c#+ESRV9QpluEyTt=f6E;&NR-2p zV5x)Hg7Rl&lcO5-gdT;Q*G{DG51%kc%C+w>)`K|4*+7Fc2YQoI3Sxj>W~=Mxp5(}m zPFYfEzfjWt|?S{d3CPhcmU>%NRx4U*puA zT2`xNGx7i9usk5dd9IOG^X2JCPwI#tm`@6ar$0}r{eg6T6k`VTYeKd*&T49|&c~hE zCQK*Dzjr~Q0&6#%x^1a038#UU7(8j_RGwjQ62X>nXbifidHYO(u5PT7zC`6R`A66& zR9&)Hq?7zKsC46uMvMEuAdn=cIB&!o$-i;PmQVFMDEVKU1i6Sfw=Atx@bpl;{d%&G zH7x>X!N}Vs!OA?J&Ej{PoLTc(>=7~H;8epDhI`B?K_nFRh&S%LNn5>d7 z9UV?&l%2|+14SCk?As-%Y`NL6kg{VZY{Qi|m{Ee;MAuCb?7>NW1$edZB z${fsX-W1Yzl>A>dj2}U(uGg#B(v7nXDC;Ao#l0FVN+=M$GT8IZS$pdu1%94~DpkA( ztw;WofXCbWKg(GENvfV}7prxu8rW8Y9%@cihi%7lk%pEpxHyZ(mgc9oi289lKYqrR z%a;c+Pexk`cz#gWey@kn8e;JC1x3()ID682<`$F}#sb;*@>Zn~>GVJD#Q-o*!;`r> z>F_w&XL5&vXt)K3yOrd= zr;v`}Tt1x{*alr7`sx3!+nvNS9s;+DGJOOR8(D^@IKDDPZWtoOlAB! z-wo2lxU@&0!0JH7teH3ci5Rz07bqarbFm&&Yef+^0kiCtv8P&aBeqA&|CweSf1}utUCff(T~#`sRC`}> z*2hKzlZa-6-Pdx}=jD?p6)RYwEXt{+Sv+m^wZrkUs4Xl71?Bn*sZt$**wIy$?=XrZ zH5`VA`yVqExKj;+R6JaO1WKGz++mRM-MT134JP5M)Xvt;YXgd;enXphAR(fuNf#EU zPhWmn)*F)TP1eCEM4I+o6jcY>7@Ra+Yn!e|53E|OME~h+mOU%eZ*qH z7i_<=_2o-umms*T^--Gt2|3oh^dxY1dCgcVT<5&D+o`gM= zvydJ?vylBV2R^=7^qn14kf-k>;6}A>zWj49prV#Tk{@^d#N|=pqd%G8gf(og{LCom z%-}akSap@qb)KB~#b`EvPjtIMWKl%OWB8j7VJeqsg9qs$fi&&c3={FsNautW8MemI zvrXLB!>=dzv{Jgi&EVkEOFIYfr@qdQ~fnq?*}PuDWV8tkn?8-!W)sG)qA< zx%G7`W1qiI0GpjFRIOT7d}WmsC^OJ|XW`UMH2o_c7YZnXKWt_GH-8#(cn7x5jme{cZRdon*8`VljX8ECT5~2<*K;9(3LU&f=y*P6Vl|W_ksjw z*62u?sxTLoDCT0bF0uNBq=v7EIEkbxCQsKBptpAq8|irfpGCp`VPbP51uTk~dNrPe z7OV5>Rq+PH-V%!=)mt870S}J&5jBL)QPSCWkseASQhfO}_{Tv#BteG%d~(*pC#s@H zq( zUQbhcwNn3U2WcSq3gc6|=g#X_7YmasCudA?oR>?5q|#iUfPf9Q&UW#{>qVUOM<~n} zqPow!N-^k&fGiPiOET^>nvq6%gR50~Z67~q7=)&1R`Dg1)baJfprx*g@xg=VV1vb6 z;qH2)`MwM=tMUh62 z#??@l!~~|D?pYGueMQAQ(hv*>ZTb4&Urf=1L?~Qb8MXCs)qL5@b1F>-R#kjB3Je)& z)y2HR(87CJ_P!B3*`DvuN76MRZvRo)}f z_%)NQ;{UuYxfKahMcw|b@>eK;%?9e6p<)NS54r5BVDG&(j|tL~h%jjP$R6Y2-XB6; z$_2UPcqst&N^L|e=&C`&8Ca}okH;u0Xpsb5W|G+!rq_w}Jyx9swB z4G6~}&$jYDiCnqp;RzG1xl+F3-K4=By0(xYK1w*$8wre_lV?HOzBuS@E@nl7wCKT9 zF8uKR$)H$q3kjKo))G^C3P`hIUfM}RNAH6EmPRA#DDd2k^jIzfT_BL)75he>t!J=1 z^RB>?7$WGp>g&sl2B2(&M`tBtMW{(#;q`|I1zWsgh_{J}0wLAt74t+G#k)H_xrWag zzk22w2)awf^3$}cwfCfE&O1J%Ioo9Zmjae*@*p&>H; z<##wtBJN#PVE0neo;9~^Gewv`w~Fl|?-JRu=(!(WtuJ1=L?C5IY5s9<$@)T)80SM_ zKaVXl3R8k8sy@NOhBR=hB55$=k#|(vYgdxSV|Y36Tb`|TKiX6O_*#j(1^JQf0Oztm zdPKz!+V`AQzzODL5`Po?>Cj7d3U$;pbDphNSMhI<2>$f}Q+>{#U$`F(DTM{Kim5ge zeI#Rd1Fow#ET72>zpC=`FkU6$^&8}HSli>zKG3N^Ha#4^3x2kwa_X!SQkXf9ll2xwD_y-F{;)f#rDFJCE zy{S|N-BrwLt*>JKy(7sw6YipSOhm>Sr}}=nyaeg^~Fda>c!&guIK#w1`|;oHM?A9^*Pt;W|@ag%*G z4$xxcw3=h`T+f0>Hdq{Z{!~QzaRtUqX3%POaOT-+$o522s(>F0NhMz&a^1Hkt_xFv z$0az?)+%yw4tZW6nR(gF?u}qmX%LT2T39=M-;u(~KB_m{>2BFC5Y9EerePp^=OtN3 z!{K`wlNDL}&9M8jOU3I0F26_NUKYO^V#Z{ zl70;782&3M?j8`5=?0!ayuEL;+QO5hR=KG_vP4Jcc@G<>9+qQv@e;h2Z{=&=c{vQv zAe514H$8Vg5|z6Q_H1!Hyx2$gY<2ddl!Y6m7$Cwj{QQ|a3Tb}VcD92*Tn;X9=F)Z*7?f<;M}FFTf;#bp&vC>G;bDqje4ol>HpA_Ln%@0cG2 zpy{Gjb-;sx{`GYtNqFuD<_X2cvPAl}u&W;(Hr^mcEnkt>?^Io_Q@m6ULtDV7Pah7G zJK%L=T1ufa*POn~9r3zCW4*M2)6 zQo8t+jpJqUT;VrNUQud8|KDjIYKIbgUi7w&y{7&IZ_a%3PN($Po?v2P+gOH*I{kwl9$@LiW53>pN6VeaDt^h;w;h_Mt zcY24%PgpAsTln;B0>2xH`G14*>87QNxC#b>)qeo%wh>(VOk$4}=Ci>{udvo^X!=>e z^y^4+4kAxYpJMP*nxG+7mKLU$)60ui!fVB?iusMD9&rj9yo{!w+wJ{W?HjXg}Y2R?sE1_Ng{q1TiqSxU$lL>{_gbM8LXF{YF1)?Z{z^ zHBPP>nV-D(?eF0~81=&xj5dXs8DP8BwN$<5hdfBWgv6+0E6%THSzkmeYp^$$q>ywv z-{5e5fe~^JzkxGv=$U;M&Es8@^I02$@ESD&c9&QlE?fAf=D%UFsHh#cb-l*}Hx(kW zmByENN5cbJMB)6mcsEX@Is6?t>Y!d<6&N1IB9~MZyn?r*r2XEPZhAqL%28m9^2jnW zUtVjjA=&4!tFV+VBWc2h#wP)zF|&)5#)r7|@t1a2Au)6Imh#V}dntRw!G*w7yT4{X zAiT-@kHzAC#oxmdXOF337U*pmp$X4&$_Z<%KNiSWd(xIE?zU~stB3E!m z<^f3v`UYi?U#BRP0GY(8Ge9(-7k5j7b2Vc3#Uy5=uow0A-HeRj?}#kj(U~@FzY3mR z#bTXan#tw3@kW_s^?ZljR}`I4c!$N}W3r-eY}-j|;@`u5F^s<)bLE4YZ!{-Pm3jsE z%Ox$i#p8T73wFfTT4?F|C9y6BO*uI&6w!27%{D4#qQNF4yrub|rW#*SGDI@J-7976 z8VXDjA4d~nffin+Xbu+km+KQ8ETCqL0bFR_@7FexN$xwt-sT^qe_wKP7uW&WlD?vq!XwMHo_;>?XA(1P) z$a%>baTt!~tSpxY@$KR7Yg})MebGz22L5T`rC8>eIrvLrIj~YY7PO~mn*iTDSAmAR zEPdbKa{M_c?Wd5Rey9sf;D5n(;wMRa$+!2!J_r};1Qz>+`kQgDUSgGUu4GR?{UUx> zs9wB@HHkWVC+PF3H6r%m@1~iv#-}{4p|RV9t-_ zm!CeS5x}|>rERFgYax>1Bwp1A{E{VB2`Y#1c)7RJSXrD%0sLaTxkJ3G+|}{!nink8 zuRPuDhg$@Z&`wre%>&GQECQnOqA9|(B-0bKFSfT$9@zwcVhlMQE z8cv*>H$86jTV=^L?0VKOb33Dtl!<>1|HX)`&d1_xIr}Ez(YmM*LzC+$utY-sxl4BEK@{ z5Njh#kHKW-Pe{5wZzj($^XWY9-@jFL_=BsAsrT7?k+_m8g%?-XuXds|6M9F`!lg3+v1m5XTFT%Fhgg@q?3)$B-liAf8?WqSnH8ue z%>yFXu!Zw02ZoG#LchZ+B9?nkyIW1P&ntr6`rJL;VE$@!9SK{$s$4V~pT%xGO_B&p zyjqh$enSd?hmmvSD`dr3T27*P)1ME9Ez_`&HRg!IXv}sNz2>1sl&khTK}Bu_s85 zQSaOt_~@r1ohm?el?i(rFAyKoVs?zey&yov#Z9{tY2z^Qa#B`(+>F%VdY|<(S#@+8 z3Ivd@C|3wiF_5HfMDDH9$~8VU+%kf+uD-SHdPiIeZtzxVTP+=;9xUh4B|ggh&TDwG zb2$&;aNQMjne^asf%yI6$5qjEaN%OIn7EdEX+r*DnG$KTeI`k1g%qR9BQ2oNFbz)K zv&@ZcOo<-^AF7Ix1nojd3t*wB^XOsyD6L7j>_q8MB58UIeYzY(>5?jQt~?b#$#wEH ztlP%a^MveqT-BJ&@@LumlNFmtk*!!)ldwE6rNt5k5jGPGxHC$tLiyze~Jd`X%lP{hqX?I_&N}G z-q4<^S$umNzWu2*+12cryOmAcr8`XKxAB9aiCHyQC|twsQW^$nWp*F98i?F!nIWh7a3@R*0G&e z{>!0l^uld}zpv{<>r>H(08cq_%))-KdcfjHc4zHNjWW0)F zHlezN8oP=MGnc4Uz67ra1RL;o-(>B70I7cOlj}wuf4qzHwZCD0jFDbk+O-P?5}apd zRM=J8AOWEe5Cc{iscLC&QO^HW6%uo*{1=OJm2509s(})dRTJ;1;ea2}9`CXb9?y&@ z!UGeL5_3$6D>%R96^Mn8?HV^%Z;z3JQR5iXY2+T&H62A0o-FqY#t{D){yQ?N8(Zw? zq?QDB9%$G7r&YqQd7i>$WG)Ew2`+X^`W+q9p*cx$<`^TbLKE;yL$(U!MmAUU#b0Xq zNjjooRc@vT7qUhR5oQhlVX;R%qG_c>CB~%Q3j!Bguuiu6s})i8<9SPW;X9VrHN_-2+RxaYVzE#LBE{&3 zzbP}85ywnOf^0(UgTQ{Bjkw6Q6qvdU6gU#&Q#n1Ae@D~nmOLJcq6nou+9;z6DJy|p zStLaF(LE*DJ{a75+N8h9w1bo0>Dzd<*Uss|lqUU9z5FYY6YYL5us>$h+Pf3@a^Os5 zjOVenPc+DWhbDyMfuw$tbWQhL6IrDJA$UC#GKY}65s59v#`ocD6}!2*D87tJy!ur1 z)RQFZw3`*8o)c#%g)a=FVx3EHD*?t^UZb(He)aVVIB!QP#_xrU24}Orf*g3yMfKTDNRZWI#PGH}h$$>Ds44 z7hyQmiHF(J)`Yz0Byg~twX?g`b4%E3u$a42Wfcw{z=~bn3|m{6PU3BZNjD-MI+}Yk zI?>TzAM299OZ^o5V_3l;q;ss+qrGr06Y}Yl(4K1b_HNk=axg+4nM!lDXBFGnLhXf+ zy1MV+*%U~&W8u8bq1^%5skM>rBPYJXx@eFDg&G***%l&v)T&~c(^*@St*4m9&6Ww_ zMOk;Wpfn)J`ZsSr0$e`JA!>!?-cnC4w1{SKabO!G$+QizMx5E&$IJbLFrIcxewsWS z9^86Pqyc_Cvk&u$oP{XY`F>e^wwnC23zSBSsLhOVThDZmEf#Aa)Vusv$#x0C!s$i% z>rdRC?~=tcg+3>lk027^B$|wkV_>%MTiCF;Ow9huf^QW3;Pu%gkJlPf3&$&2<`fQf z#Y_Z%|Ju>7z0B)?!WN;p+-q-VBJB~JCn}9w2V2>tCswe9m&VPTHV6I(&j>&`uN)q& z`{22+EY?%0Co6cI*LFV)z?LKp0=#JTKBdK8D5K><@2H*Ap8OpIfE5;Nrj72-mO@rq zT*@h3@pxzz4#nGLnDPV|nB_Z~iqqJRTgs;hn9Yk&dJLS0KrzXg82Dbt6YQ8ZJG5aE}GA{R7a za(PYjnz$nwE73ixLh*kw_TmLn?>Pli32XizP&rXU(A9Yzb=IM+Tbe~ z=2)(q)l0)8MF| zW$vTvFSb4smDVS3!D5pQ7ck&Z<3(eu_O()h?B)vW9VjG5`Yu;+V}x!RsD5C|NR%Hi z$6sN~otWzM`T)^&7vT8R{dH^kLKCm~cQ9uK(NIi-Jlj^*nNS$qaTX$|uKFcGB&ep( z68eQM{W{pyk|66xpFU6o;(t7z2eO3M3#*?P?ECvJ8w8Upp_bYvlO$TS@=2|XWlB58 zHl@2A)}KI>Rw)}b&#a!pn6lN^V(91D?mZ6?<;F})DcA8!M@!SZXGNE!2kHU?f6|@6 z--t1%B8FM$O~4?LRGE3@X|`W?FRUedT~>N0*Z3@4Ygy65J$-*0!`?x4_MR7@FO%+v zLG8^=CuKe8gNw=MBWAJO+45B9rwA5rTULT7KNZC(B?J0O=D5)I6lhJ%qHSim(??Y3 z`VCmB!2h9srG_E4Vi=ngpLTQXHtZF|Sn;50p?kiA8q@%j`1%#e2PzQB$j@DecJJj_ zQ|8#Bja}spGoKkjZ0h_*?IO(-^Gm}v#2C8Tw>x7b}?FlpH9N!9tId%_YHK@Lkkm)6( z-@NsPg3?DG&Zq4YwTDsT#~g?-SGIA}EBI4)Ai+!;1FE?73{b?dJ1Yhthf!YLj#A<0}mZ7@*CxLt)0} znPfwlXUY(T7_w8Fycstg>RY8?i|(9Malt)UiDfFR;?a zJ!ibhj2%oq$MKYuDjy3O*nCh)iLf`nwAS!@xolQ|uabfzsr)buu!uVnS-*bK(;kNA zd6?UIS6)wtNtttbY()rLQIAc^a=XM6Qi(kL<160CA6;WodB21ASfKGoeBbgAOg100 zf)%26<_~%+N(L@tIZ!o4KWSY*ckYqJR**FRi2B(lZ-2J95O6H#!FVxUd+~+D5$=@q z&xW@;uGiE?lzYYdB)@)eoGndcV`k-=ETsiE)Z${JW+4wust0HH8GIc*A$8;8wv2a^ zC$i~i!&&C6=03is7KSQ;O1O3NOD8HEVJx{h>-N-5X4^w1(|dO=KclR_x&GF#Zvm$E zxk6T(+bE;Cu;)AwD~H^gX@9G!MY)xAqe=9-I&9Ivs*-=5^^^(kF-s;5Y~fh#mMHmE z5nq_>^%*ZL_+1x7#CM;WNaHH27WbVNhX$~ixpqCKwuaIi7K>`(nZ0)uopAO^u|_Au zgmdvMWbuUbkJCHc683p8#qC*+8AbVHckbt_V+$3M*Id_lDGsu5oaN<$(aME3ux1G7 zuNA6~jw>6240U9_&_3_EQPj4opBpQBN4+5-s8ZhxY5}N((G{rn;F&a7$c8#hMmL2O zXS)U%du^7N0%F)g)41xK063k@sion~sB%H|4QI!4 zgu7oZ%c%o=ZAU*-d7+2mxW<61sEH;#n|SCv3!3oeZTy(+ycc95n-wnk8WRbhhFloY z_`eIcyJFfr%%GZJB}`?BXi%+@9@N2!Xta2v2P*_Z26mw?j3NKfKw_kX+n;2yOyTxR z&R>^?s)OT6=0CSG0ncs67Iw7RXHOGqpYA~Ws4tvF{YiitPM>n=K0stR;7 z?0Qc04tB?cDLTLqtQRx4=p&q6mf@$%ir$V-xi&fS3Va7I;ChMz60r}$7GQ9zkJ`Ef zGMTr%*4`cE28nTE8B={8k-Qs@JOp+$eptr4!JD4(9QYny*i>uk(BRmF24;l|U9WvM z9Hac#yQN@|v9G53o+W}K?_si`uCD&0SQg5!W?9JPjgd%iwoh{u#U%Je4^DxGzq zHd#~-H&d8oxbsQ|yBgHB^nQzC8)M?zhd3MWjl+!Q$d!lDA9<*)oor!Xa*Y{^DH=-G z0|8+L4i0YUw+g3H937)hcI;km1Fl8;`E&06Pe`hZ?t;f4$+D z4uQZ*Bf(+!GG2pmipARlD-vGNtH)F!1Eo~!y+D{~8t7S@h%)$31sKL;2DQafoWewv zGS4kb6)|W)CbOSWo^5HoAP-qX?-4$+D{1|+QI9T4v7*bv4n#H`cUvgjCjkl(vBEnjaHiaZ*|GUalmOn>jaumwy)sJNILu3UH>##)tDX}O?7 zHKaGI7=F%)>&<0cF@fGPSf~ElXb)+M{WhxjrZ&fYsuf|8e<9zUnt2%0-UN-iaStpm z1(+~Rdt`D)&xNu~1*a=ZTsnYn_JDZ9@gH_V&%Dh6;+zV6&hHN=^D#s{xYAEgO*T-ws3}Jf9c9oUbd-`KUD~N`(PMgw1>*|KE-5LXS zfDI~S=nuJkq=lk4NC~Xnwq9q!s>Vs%I>H89%@SJJxBg+KLa=!^>AlI!)^FN1W1Y6Nt>bnr@JGF*kcf z(ec{H%V>P-_5EoS6ahgJz|{V(5Gpc-X@9;XEhmjjxwQ3xr6ovLdTcH~rfplO-Y6Jg zZ!j%sbIEyOOF#1CBmYBQKO|k*b@An%knox8Gi*%|8ioUbWt>1pS;0pb zcg5+;Qz6$&J3(I^!F4UYO3Kc@H1qO*z&F|JDg43{;Ge?_I9DJ`71DHqG1sq|S*9ov&E=s_Lu`~&fO!?qidRA!fiN9bY<@pGLEkttvJKh_=9p9LF_AkgXyN9(brYuN z4?*eRg^?j0T?SQpEY#^(L|lpAzb)x_0_>-7jGh}4chQm!mC3AF7RK2hJY)Znq#TJw z|BG2GA2Bz~hZ2A}w*;G^$5$=Pxk3j0z}B$4^2KjcfuoBi7@`aQAGAWDheDb$FgZO{ zTSkq2KFWi`XpHT~d`seC3V(z55dhYmMfD@#GLg_+5nNjBmzBDQBfYb1u+XljDzMNH ze%K!K^`LidGWWQ@Dh|GlP2y^KS?#&<-jH&7T>OD~jLQWM_njyYz4*i>8|datstzF8 zmZ59(c;0*mIE!)Hzm-{p53C8!A1=H?s6YkU@PJ*fZp*=Qt$dIl2nSU+n*~hbrzU)= zx;W;DWtqxwoJc#cBM6C8Mx=^z%r%A~QspRi@J2w+SusBtBh7k>b)(B1INx?V#YnDF zlHyD^YW5{Rr%b*T9IIqpvqyd)9%2pSlK;xgu+_Wh+D$Brx4xk}U2FjB?^(;W=_G=1Rw3gS9BDC*`a$JrY|?_Q^S`f@?NTUquo&-r(V%c(S_?Eh z{#sz5a@YgKgNAGu4~(POEHtR?$E%{vfHS5f2F?K1*8zn@kUyX>o90gU_+c}Im?Y=C z7Zg)nIBsLQ}dJm%Z@65u_+ zP5UGD916zhnLVa14d8}`@-CVA{@SNwXCV++i6Ph}KQi^&q`}<+P-vE^g|04vtZI|# zh}3p55h68CeV2QmCv^?i_4-^D&%eNl+Vd|;g&hP*Ka~cl4Y&7p?enr>ExmfGtED7q ze){A4hajlk2%$8xL(#GKj)oL3aCgg;jfn3o3Ji}#v@gG2Zq~MNE_c|=at?=7L7YQG zv&B5f74_6o60l84z4H`k?wxb}Rl;HpCqZi<0o?Cj&Mc^db0}HcRWe}*q(OTihq(ei z623ZkMMwSSM*yNHGoCZ&pB0i1d_mAfh5Pdp_mbgE)@Q`nq6dNTdw?5}%%J2j=I2KF zJ)U?2G`8fK2zNX7|A)gIm;7E10V;k`m{IyvVRxc|(KA8Yb(x5X>rNZHiynL(<;1fD zgkh#!;jA8CAdS!0;>tJ#Ouy8^n;q!aStvv8g%s^Yi zvKh?Ab!lWDuUrQvAErUxn0w^U^7-@hMgD=t7FV3<-y9f)aweiu4u4B^`CQNb1=HSq zM(K7pL$-W~P9G@DLC^B_@Xjt@1!kaDYe&|NxqQce!MAWY)ckE=m~izWG)!O_-07%v z3}#(h(LC@GcJT)H6J&ZdD@?F;-g^(s&CF@|k$zH2#Ki2_JKL*R`@`_W?&VDYvo}GN zp5Q#5;AwT5FYz^|mgWr$FiAluyYDffNI6#+D4_`(#`8{q zvw6MrUy_AaG3Wkx0DP)uk-D>3?pjV+Xr>Pij~(;*;E=jq3==?;aIO=Z#2^AlXC3J# z2520CBdaVF9t)UN8Z!~)B>Bx{m6^7B0u$MK(h-+o+hQpHUA7_p;62xP$5?LG0z9TYjjDhYUJt&i8`b+SRm-si+DcBB|TyrVhc$MfW&qfWZU5 zaP?zMsgwu41~G$yd(U4p0M{ zO8WSbP0B4Z`#2=0!l<^82nlep@t7}%`HW3OY`-rNanlf(ic%7otcpII)H|kPM@2ag zacOU{keD( z1al3db})mvqCu?AG3_)L{sbCE-`x4mHZVg}Mmg;iWN@Ai5bFZX2gvW)tcG}~fH>CP zNrXgcCj)C{Q! zL2WIdXV^)6?NeXHEd6FI3UDyoyF8m#!vaHsia-Z!#64-?SOgj6)DzH(3P5cRgda{q zbylAhd3Rq8@SiD>!+4PnzK0Nj(q^V^Rd1#})mcqg8>u+xs}CP$$bR7V@=X_Ooo0(y zzE|!3>$)Bch);diw$-CvmIRFWfZ_6xU~CftH!e--&kkzaFbEJZhF8!3U0-`Xari?l zXXSUp9^ai3(9AddbYtd&!-F5}wK&2ZHGN&197K7~)gNQrUKDk^dwC9H<@06sW4pvp z(Z84T?e1GUVkAQynEH4MU$vdT|IW5_l-{_h)y1yLPvt ztu~cwJ9Hy*pZ{Hz5Gpqz3At}_40hYHC2Zt~uw^1QIflVdLK#O5P?blXbH zTW>`-gGc9$1Qv;pi#|c&_(S5bIAgMlx8dcSDuB`3aOJ55J;Swsg@wtMw3{MfR5 zLfAb(=IA>-!Tc}IoD*&*MY%F^o}cTID&vRu=4AG21P`bDP_JgY)@ zO4@py^Hd9LvLk3A$cuk=K-PI9R79gQ$`-bI{bZv%6YEcB4y=mCx2l~JbvYyN+Mqyj z?t$;eFVb6O`VL*1!HgfmC3i81v)7_z)@8ZLAvn-cimrkI)f}xXg%Z-!TmHX-@Y5jP zWW;&;0mk=uB(Ge=d;=dM@M#>{Wh{@s>KA(TH`MK9+cZcKY;MSxsRg|EP^_(%w7xKYs=SC)wrB&R|X+TaR~4 z7(<0F@c3P0@aEYcaaiOdkuYhACJFkJJWgiy4qfN8?uy=3KOs$FoM$*V*x&95y-oUq zwC@6^5&lCqbKh@eP`5Bre#BknZ!1eR$tL>KU<~Ear)6R+H^1xD$-O}EONJN^^u%!| zy7K4`(!PDWgSrj`e*wF!!yUS8exq0l>b~+hlho*M6I_e^~Z+hEw3xvl%o6}Z4&b2>Y&#IYl zUhdaX7c5#rGSV6Teommx`l!R)1N!X4fVmFF#B1JT&+njV9@AsXSqHK=CNmikhN^om zb^pSkoMMeSqdx>*n7klAmRqGi`6ahMtVq$@Cent8e

    P53q(=VhYhe8NHxC!u-wS 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

    $Gp1n3}X7Mb(t2+U*#dZ^Ka~2Z^4y>pe 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 z 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 z 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 z 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%0DWGl$j4rZol~S+UBlG#WSL3$waPg$e);2q2o?PP` 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ਸ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�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�p7p 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

    eJuLe;Ue-WR|NEu5vESwTZ$^ z><-u&2%TiNfT*wo=GG;(7Puv{ia?|h3fKDNTd#zY00W+4U63JwB|?neY6O_Agg+Mu zFp%K}uOo$^YCfEXmSpI}s~$;qgt7DW#WLA38v23yjPE~(?%@?Mh{kYHaDswX!US!I zST^dZD;HUpG_zWuwe~FZ#$n$nIMia=i2XCq?~-qr|DMkg*@JTZD~OLayG2T`M93KCTkW#6Wt&UWKuv9IW|N!>T4QckjqI?wHm29tFSZ#i zidn~&bNUUmEHC-6uhn8I^ygit%%w4ZU@Oz4BTCZ*`i4-u>VFCj6tY|*uAKEPE*ptoE$*mm=Soi)d7<%?N6ii-1 zl?vUaPtE>O8oL(2nt%GP#oH8RVdwn9!f*#VmsTamh0xe<0h@tZZ{hq&{}J-FPNg{( zfftv`ac*p)mI6?&hvj(LG&wk`9fxbGg%T&oI=SZu$a3>oBxoPL;^QkP`Vm77;dk?T zWYq&4OR77Cxw8?81*h6XLoJ5;(!H!iOAY-ds?q`8TP>p-uh%hi+>MHSpB?>)q#CDT zI&YC~volvx+3KX|Z7kXh-6^OK>5tH@zWsFS*6J3!c3OTNyQ(qm8mFTVuctqDZ>?iN zWcr8IItL^ORFTz|@ewE3+xr!#Ht6_iKl8W&sN!07vK$XT$f_!yttN{frKk!(Bj7g3 z8=izB#tA=hI51&yWNI@#g@XSI3+1r+*ySM$@gtVGo<6phI>Lo8Js*p9>NebWx)`ud+WTv`J+d9nvX z9o?ieHTlq>v%;=7;TUoJL!OO1*1Bx@ocgBeKRN3_#IKIXd&?C-uvNf>Vb7I-2d8FL z!0X4r$!E-ez$bt)^?;qGIFAgz#e4+c;x7TsFnNB%gjkj{M7pEJ=>NJc%d7h}vP@F? ziIzQ{gfjq;`rp{?>+FAYBVxDwK108&e&_O}ySIKm#Lu-R-@Z>@Zra-F^yLUF-^|`b%h`<1`0BWfzz29Br;$?#v2B_TJMsZlk%soG|?mY{< zUfY???PhnkbG?7JTulR^wGZa#?#u%HIi;M%*~`+UHN&sT`*D3}d(UvNkzOCn{qcGk zih!;5ZXH0Ze>j+#xGuVF*c~=61&5t;ML(B>-9h#`alX~iPb8XXVz^=G7ua?eG3YUg zoSDN}Yu)urr{3~nCqBzN)>IfG2Hx~6U&U$A$ z#MajSY_P%Z2)1W(#=a5i&ge1~C6rqBiGt=Ryie;S>)R}Q_MXiht^Yvx@i>1sLR4)L-&4a|4C~YWw_Cl@WO1=Aer6B-4 z>Q#R@WB-XIMo1cl#IHZlU}r?s+8i0vW&vR{09{5ron?m?DJ~F*k%F4Xr0`5IaX-z` zy#HbX+l6J!Qlyfzq8DD=&@^B!5m9$GR3Y0$E8pSpAwchqXn_~B*0vD$SF@u?!7SKd zB}TwITy)u;w@*#0W=i+B?64jYs5O+AgaEWlVoD>!{m z7GgU3+zv4n&y}yzNi12CMWQ-HN1+X%-w-_9UT$&H11If`k=~i)PFkk~)m_oZ-0E6> zeC2_>OJb?S*DQ)5QJtLTTK;3SMHGczCTpe&_01)iqg!>I zSiEHm7NLCyDDbZvb_wJL`ReZ)wFM{@K}>(u(Z7!mVj)xD*F1Dw;!Ris;XNz6O!8Q1i) zx0_w`Ipaw7qnrfXWEGiBL3Xg_eXl{n3B!~|J<4a=~)boFz6Wke-PF`;@;Z z!8Q^x^3Hb1Lqoi5gb`@%bAMY09K2*UrV~v>AqO)u8Yy(px0VIkzEuM1zggUIstB+O zt5jvSN_}Y}gCBpcr>iT9f)4>pwE`|)_;g92T_8tdq>rLuTg%fV;@%`XidW-Tngd_&dxGg8C*bXu{fYZ3S#(W zEsVoRq84w2v{f*opoCuU!_BcCqe*Dp!DW)NU;*(x5H087RJOI_70g|T!a^{)vVaJS zT{4_51tR+b#Z7l;#&sYYAUXun`#28a65y=hAntbtuJZ?iH2bm|8_NAByk>O&Togxq zR3`*I6XFVv-u>0FEd{7a-xFk598%f>#KO7FxWcV-mTmRSLOH%^Co}RVzy&Bf4^QH;j!vW&y;E#4D`e7`+0g&sf|0 zyODdd`-aFWA#Q07*wYWls4)6Sf410~ep!zcWm4;}zuj+u-+Hxk`vsPgKhsXslT%n@aD*;z&dTTE1|2uc=Cv`NAqEL+u7qFa*QWP~fu zbs;9g=jS&eLoM3?Sf;&R4g=<9ZO=G#AuGc^K8(RF301xkpH!Xk3b0NFJb^WIxD zv08MuWWuU9HpaXz6vc`W0GsNOdA$^`aY%9rB+SQ03cfp0V((VWRS}4Y`e|PsLe4C zS5;b^;eLo*hdP$RW>=r)jrTO56~9XZk{kh!JpR>6|FT@`ieXDLqNv}BVcfdonHekwp?WC*oDDnhT}cnfy;o929L?Y3sQavUD&=x z=5rd`$=vhP-p>Gwx5M>7dWKEu4v@>ui7mH|KyhjoEvk?%JR>n)Jl?lNd{O$)FvB$Fv~p5U zS&~`&)(hOM(pZCXqSHL>cEv4!a!7Gqv(yJ)e$gWxT^%gR2+jSv%k%RD%sBGXkRjIP z2%h=&nJ%hN_|#2kKS7&}<1$Wh(uhEO$M_$ScvjYKwfmvvh>G&igbF~%+koaBl=(<8 z)jamgF2ELK&q#M7`4~~XyKNRu5OVBtY?1!j(T%a7dk$aR5FjCls=Oj;2cUJAxKSu2 z&*`)QWrL8v(%HB{C~oiC90!Oa_dWjPE)Y?cRiq8K!uOhQp|O z^YMP6)Gm1#liUDZz$>g?*y$ANMwbJ5K>?6>&siU9{_@dgWB{Anh+P?wqE-V)0wLM( z{YWQOXf&SBK5ZZwJ!(`rG_6Q7@7*z43W;o117~Pf0sn}<0Dp7Od~a3k$lZ;?7?%Tg z-ioK202c38nDEwRu6-T5UKhn}$s<7pdp=gw^hY2ScPOO@WgA4AZ+G)y3yfYdn1$5w zOZ&~FR7DfSBPved*V-9oT}^4I#b3iN0+uK4#$!v0gx|u5-!1(d4%TwKQ*j`Idp-mG zlX^;NdJ}Z~&`H=yW<+qdM@3p!3u+~xOh-LO87z<6KVqB`UWM&J8&q=13scPd=s2FB(pOB zjL@Y9o}aJ|N0{Z0O^pnX=T@&4jJLA(TU^w{Bzff5;dr_>xd6yLdXtIb?gUxk*6sQG z_io16qR0Z1(&Fms85JLt+4Y?7YWEG?5o56|HB1rD160mJZfZz$`hr7CvRfDvjywCM z1I@aeU6g_vyj>4L&xk)>H3y1%b}#t^V#V&q?gqJi?Z0h(zLCX4QXUGR-q?Kax8b6) zvS#Za{F2B{^g0;l6!Z4N1L1LyqdPxx#fIcNnicIQpg^_ zXoszD+Is zgD zY8^O+ED`pX^1U#|chrk}7@M+g54X7h+d}u0S%c?&6anN}bD48{eSR;mCnx-8r%hB4 z23xJWfDIoI$0Isir+#JMP`Wd3>390NI=#K!9C^;OHC0pY_5pU>x%PmU=jEWy4}OZU zYbyV-mtkc1PueZp|Gt;G(Ux{TYDfH?WV>$`RgFOe7!FF8QaX9@Alu#X96l0ON}@%l z6~r?mRg#`Kk|}xITY`;8kyNCg+_*NRBLgW6u*?6vf(MWd3iAiEpY8n(8XvMI1s0Az zq-xIr%LLbAATq|?mJ5_Wpe7nW*P+7lZO4Sf>h*JWet7-0z_1rN(^-0a-M(I)zDPvf z1MTVQ#ms8bbU^Zde?5}#1uM&m^Y48-h#5+tp>Qyv+3jY7=IKO<8qQ6j>Cv8M3P|fa z&=#oj88Q7!q+8;VHlq!w+G^65raYAiXNjPM9(`((=U*}adf^9279oSn)v59%AmK9~ z7;EZV-D&6P(0>6{u(q}(JI@RL?cEEdmlub@ZpkH*Z<18FlN&m z7^L0lY+0p_1Sv@7FKSpP4y(A+m@<-Ok$Edv6$?ZvmEGD_cjKg61l?@3j6ANlV;FoW zZPo=J4w)a)z5AiQ(^0pQ1dx1{5d={XcHIDf7HCJfSI=bnSnIQ|L|qhwp)M8~!cU2i zgn>Rmvv_yi1_Lku^S-!pjSZl+%P&{9KPc-N2?y3BM3^lap&tVkXPh|Yko(W*&Wp?6 z?njVRw<_P-<;j%)*~5*!?J2hS%7f>R_1WFskL6euI_`=Ust-!?`Q_v~HSDZ3yR$QM zD1eS@f!kcN2dq>0wO`Fg@+Tbmzs0`0HM=_u|K!lA*2>qY8Lu(vUXlx%j=T-(wZWCI ziQg}YpKiWdB}{(^bH6YXtyv&41xe39>Wf*>sizqi=*dR?aDUM>ldbH=gGB(vUC^5) z$cNSzyKC&|{T*J7D4CoSD?sZqR{O0sdzlh`>a*#%Tv#L};cvl8?g ze8^XV=?|z+ee)tQdeoin@$&Gd-1%`WT{XA5h3H&J(AGRnaa|W@X=r$}lW2h|r?cA8 zhWx`k)5=U$;7Sor(j6t(e>wgIeZC{ zh5%sU-NQBEq)BCVc2>gQ4@EI5t(|P&kxoi&P78Zyo5}n4u>H}UKZhloABd`RaVcC8 zV&id*h2FbBt7cXOHU}0jh|@LLhG-{uW1k^|r*;@!GGUtbk&a-We!j~;Y@kyV5x84$ zEGpmVg4zm+w;>6g_uiR~)Zr(V+YRB3;ao78l2zvfqnkyi6kcLmm!OW1oLXOd_NE}9 zlC?kv4u090jEG1R90;32_{-*?sea`nQaSIOI zK>}fz9k(<*QXm}(hu3i26$Dgmr<$xdQ?>*A=o$4^*p1@NV9%$x`(Or$SU$st zP4F%WFpTWkq!Nj-{&>AVbHU?TuiD5N2*!TW+pxdK3XQk#xTWbZRgyWZBo#7@gpVrc z=1Gju$r`kIpJzKUk5G9+rac^xX~P(Lo|t8$cwqsdy_`?QA3zIb6l~cjx?D7Y_Rtn2 zT-JMFKyoEeAwn0R)My9Re!mb^Bs=ZNYK-a;V5qCM;RJgq)qO~A0*;d0)gtI=9 z&zhQWyU34GCiy$C(53l>{q-sK)4R~O2mGbn2l|B_Kd$u*ds2ca_am45_6)yrj;%lMjkK(5~z0s%CkI zte5TFVY6}HbiiSD&G!c{XwarYEp&=}sVkt7c``MtLe8s!$vtmr?+?59+A=$YJA0eh zFTK<*P7M^d3%Ia$7E`n=pQ3%%NQ%M%6ol^nINi!jkKY;MG?Q7A8`nkrf54FedW(4Y+iZYb9xw++h= ze?e`=FpAZYBMun7y1m_7vV}(+`-uuUc)rRKbd=r45Bor{MOjD!>*>r7L!s|mD#Y2Y z(j>;}4dOPS2wOIKkI*=N=}8pi-$rahNnKvRz@~~q$BTUuP*>K_+%;fBUhL`I#femp zVJaFoeN)4WK{GZ9)7|%l$ zvMclE>8`L>;SPoRHf=Uv=gX_bwH4ox5Y%2cjQ=hhoR~{cg$lQ90Yl%BEBSkKI<1XV zX6>Kn)jZR=pU|bbv`_eNj72Nz5MCySyn`J>A6xwPePXv;!*6&Rv$uFl-_RxouI{Y= zb~)w6)zo8e-ZlX?$8H+p^a5_k6Kg8;klD3vO&A1OnDLg^7B2M;b4-d_An~yq$AQq7cJzHv^qHTyV-J%6c27&Mv7o zeh>dJ_&W27TDtoka|ERFp$n&Qcdl5U2D!FU=xl~vuAU%vQ@z^@&)+GIxhbA{;*?6@ z;~5k~G6iGQ5!$Lz*E_c}-V^F`)_(NSQ$K#HCYre|o+-cG-b$%z>to76Tl=Wa2*j?t z4^QLr*Sz8G?DO5{JD|gRz9SV3WcY@uwZ*}|Z3E}H+*@9aT;hG%iWc0iv@^_PnUf^y zgso-deL5lfGm%X>app?(JxQyeE+IO9!;a9{QwObG#A_S@>>}NU1z-e^stBRzc>i^H zxm|hL`E=j$v;Uy) zxwR+%&%XA*h_%d&O#ibf{N`7qKN|hN8vQzXvqLkH*Qoz21 zP%4lqfR1Ohtq83z*BIFdB)ze5{q;5ey~f-&3%XU8`K`#o8X%3BF} zf?Lq+pk_*AGr^io1q=&gjg;o9d^fcIF(OtbXgx-mu;OH=3l9?tPv>22{nj- zu)cEOW#E3WBGu-R`_a^M$#-@(D-9#7FV&@XyDUwG)7snxcWtJBM0;K*KQ=sG@}T}K z4W4{8b#`|*x8(3>XZ)F?9I-L#`YKbtjG<-Pf6pSpEEaIBPOvILU6KTIcM`$(b@u&e z8yZ?GE8|Ud&!bjfg*=M5Ty6Z5T6`fufhPSon3Xui(JVSR)+9oy`E^C%0b;m9jg*$T zqNu2{zAYa&AS5Dk zcdx2DL4%O?BOvt*HS!AC=bZtCB5YF5vM6OafvfIXDSdD-7X8Qu@*XB1i zy2?WTMqM>gK3gR%y=T!9X$5UzWwYXj9nFi`QH0u@Jwf6h^+7(K+6$GQUf|G;5q0qn z-Z{YKxLXDp`XJ+`eVkHu=C%75I_VKsEED>7cp%sy;~|j3Y>oY-85o2%bhf!VJm>p! zjOmTpts`eYl(Hht4!rfGakkFAQ*TrT=QW+()U^XlT8X)Lc$EI^#Ko!mpgu*|Xov~V z4vvF__trr;h^=lXO=(wHczOvyg2N;`L8z`BVfy%CuB<@CuR>&?7q}k6 z9&fL(kTam=fA71NkUl$;pL+&c0k)HG&R}5lXXU`!Xsg>rg9Xs}z1{Mv`#zsBUru0* z)-KHtieXb?oJ;!%??UcnrZLfK9>=UPzkKJ7RpEGEUUZC?%N$))HQQ7Y;ojySy>_#R zJY&^nLHJ{%&G~K}XnDZUeB6+vqKw@xGy^>;4NIZC$2i@4bT@ z*S)6py{j7qxA6JE9St@Y8$l*r{WU1PmGvhJPv|ET>pj6aoz=oS7Gi%9Iz88D05_lr zP-V0E{vyD8jP%wm(E!MFiiFyIkx_h=g3mv1R$;mwx`)b94sarn5#wXo7@i4%+2w`) z?ol=tw=NHz*6*eQ&8Jbl=`xnp*>mS@Th`oo<^)1wE+j?p#GDT+kS_`Ay zd2@7bgP(Z5%#Ch38Y#gs6F7(FVT997IjJ!`9LU+Nfc|ak_Bn)fet{Xsewx~EFoI$MMMAmvR)1oWz7Lv;}6ZtB2YGIfwR^vlf+E)1BBnPEo|vB!yG zktdmrSnNkO*gpfcopre2AJ_{5Te?K}^q@&!wvQJUxKWDWM#%3VL#McDf|6%TZ0p-0 zxO?fRuHhlKyaIPqi_|qu7pnT{#?k)>Q?2q`J7&}ljBatE?%T_!9NBf$vLM%Bl2TNI z=DPU>@gLnNT}$r1vKKj%1LO!-f%fLrV!8OWwgyI&*g85L({$;)l`At6 zfPfSs>IgiYkdP0^_FZM%G1v5w!L6NqnwzntB$8xi`AwmM!?XnOh(Ud)vIu%qI(XUp6VcOEWJs(u8))LuFbts2kSx zQ?Gks)*KvNs(@ORkUZXxzvp4}g$uuq%>p}2z z>X6gci({RY6S#~IJ60oXN6G+2JA2f0{vN0ODht1oz<_6^E* zyr>P;^+3UA*1O@sQCZO9)D_-!9Bk>&aAsh#%|T;{sEBJ*U2bPvdaHhCcKrz1r++N)0-{i4}t zNVt|u>Yum069H6dnG7#~hP>*tt&STCqO!RY2A7!k^(^kh$o=AGii?RmPE%Kc!R$G^cz&sE?4v zd7w%yV8vt}+TbirV8x|(wli4qnWXktYRQ0GHF-AUz+ImB_f@dXDg%4+l)sM*-RHRM zDr~ly=dfc&wfOZAEz{kpn+zgh`bKY4nL5~4GkXCl#6KbkF~!RQ41}U%8*MqGEm`r5 z^>~-pcMLmc2VyP5z-Mw{XkpJk)AgIb=j285k7Zg-GQQFX=QMJ>*i#1Y=1_@Bj^=7Au6TP`9gouM2}z;{+-c^S!1S(+y%6~>mhBbum1Ozh zb@oXSEl8^(5yuxVXruvUP1S}fD8UjUyI+cOo-JUTpQ}TQX6DosM58hr?b#=q;xr{^ zo#?;j>K*g+G=JsvHSf%D{F7>3jBod+2f}s_y0KB}dyO3#g%Lw~JgA;R+>qjRs!TXUSzm*&i2~xc|h|$4i;0}bwF|aUYde0#jBEIfSO0(`+?*iTWP@>)b z(BsO1_$^7mirWT83`mB4uA@zH>ODm0qd=N=N8dDwPEu=_vP?4}-D- zWFYh}BDe0xM}D?_g|bSO)Cyzs9IvKg9~m~b>(O( zr9?Z4d|Y!c(P+?ZshF&tCaNXNY>H;7qyWAnRlPM3Q$X6%uHo2RlA<0fTC{>i=lsWV zk#clbgl!8qY|F%{{Y(Rz3EIaRKhou=COA_D@|O0BS_xnqN(NIVqYOO1e!M^YS}vj1 z1~O$&N3422fcLecN^=?!2L?_cI?ilF?w=`9|K}Ejjr0E-n!&`*{6AxNZ?v?Xx7z=2iuyh=r!sN-W1<^Z z(hC>nom8&l!7Ouq!6ChTASW*j|5ZU;dqyx$K5~t2$F#csEVIcs`zEUugl93`aT_fxlNpE2*y~4s&~~ z9Dya=pSsA>7yZZnrcxxzyOd!snl|eEeXttWdzYTPmM%hx63t@nV5ORA*yqrJXA+xs zu!2vG8a7Tnram+e_EScdW%X2N&CbUm4bXoV%SV=DwCdGBr}5Y6_6jiZqz1JXcTB)7 z#2JW0nQ3%8NWsLQ?`ACm(!AQpbD;naKt*@i+jw(5+jmBAgkZT>nT3%WQ`<6_JsDUa z7Vm)fD?P^5++V8{qZxU4*Hl-y!kuN6{T@yWGg(;gBNZkKN^~#0l;y(M!l#HVGdvs2 z_2VDlst%bRqO_k-$%t^&%0x)*y3Tj&6exftso=7Nup@7-*;QdH@xYVL=HN5&kNT~8 zD#%$Ig_$9tDoF?5`&K~fZCn9yHW}1wUGz3mL&T&tF_i<{keNFH9nm-Q7ed(naAq-HZf*a2VFM9Olmg=t{N)o5I|OL9Bvg1I^Q=z}S}kA#h?fQdkg8m)M_wtD5A zZXA}Te?b$i$IwZKhk?hZ`V)t{MNQi27VG|wS#Y;GYl2tk?9&c#obtBu4EvCMf!aXa zoT}2dHQWUyla`LRmKDZ3Bp7T4?vauhsYtA62~ryPZ+6{~QXfTRnUo|MU<|%a8>|l7 zEU{^NMjkOpdMw{O0S*rWu_uA9vS}P^MDIWx-=_h8Nl>JxLZ_oeiuRMrK)2vP$Be+D zp`x*(S!!d`Lt%O0)sOQp2ZcN{ADf1ZU`4^A9r?rdKCkVogf8Y0yON?|MWH~8LoVCZ zYZxgSEYuSvpl&o0eZgy(*i}E@Z8c<^V5cH|*QqQFZ2$~%)J_JVQ&`dbI;w$ZTQQiR zrx#$YnuI}>{`xiI%*KNVk5#6$82)Wo8LnQ5HFREOTjl^2O%PkpC4i^dpZsak&0`>p zw}H&Hy~KEH9M&Z3y`bYTIZ37$3B!A43rFff#aUr{(dNt(?cE_4Tq zQQB(sb$qqHo{3NxiF9su;@k&sqx`**5QI!n@>M(pAsUj1;f)7DSR#B`hphozIGkfG zL9v1OFY2 z2PQIUxs1T4eg|;)1Q?1DkRllr z6gFQT*?#^NHm z0?xAq9sClxe71j|^Oj7unaUMX3I&-16W0{Yrd+pFS_c={z%XQiWELAwy7&3KjH7=S zimkIXd~#NMw=Vt4lM%oOZw`_4*sH+psP1XG`@2xsRqw1p=e()81)a0HQ^8;hoioNY z=i-jBhmE4l_8(Cj@G{V9ICxz9TNarhZ~DuD<$kjT_wj{(ZnsHh4!gQjm;*}=DO>D^ z55J*m*t9BgS%s_L0gE71IgKWHc z3`CfL$;SK;*pkH_wqLmA&S5kKyy}$80Y>r{$L{d~NkhW$-CNbi>8x^Eem6398GNTc z&Ns5s?`o6FkuSC`i2(V8hTQnf-a~CtEYC(Pn4oK~VK9FxP>T;$t)8vklM(Qp%ws}5 z))={hu4F1z!Pu-hh;AC+x{Hv20^Zo1is7_3SFZ=2MM|)BGsgnxZ67jGNa4=QL=V)tYYaW5;o;WrXNl7x-0*0#B5`+Z$}ojQr* zuN!F7IV@j%$fc3Nl_qVSZ0?%)IST1AyaJ~M5pt?Fa$3_8ZdgCA<3@UxZ@X_wkn#FS zhz90%)XfMsD)ch?DB8U%)kX=L=Ww+!q9v9net- z=YlSePJ%2V7+xg7ELsVFeGpZpbZijtHhIUNFeAA4bM?U@oyS`5yo)Q7*1R?O%YYmS zY6j-~bO~~`%ToA+_yT{MH27|5t+TEdAV!WO2k$Whl<)Gzp`j2r6`U;X8#GT7+Wq}y zT1o991(QNVOD2T!{8_nXpSFbrsw~Fv>#`h94=NokDJ~gn!_l&90T_oiL?{(#BDfVc zhzg0fGY{`1+w<&-i?ddZIycISrq@)V>ozTScnCNN6b}40f*2BqWVAPMLS>b4a%rBN zR&>89xrVh4c3~Wk5{N>-a=~J)W4ukqm7@f_g(9b1U~fFrTJwVNCdPk)o&q|VRFuCa zhQUZ8&|anA~yVd-;s*TM>y|dQ98dgoG}6P>JSjJJ zjO(OC=!Lsx0Z6|Vm=>ThBQrB5={`Cr$u*QAfDu`Ug`eR6G_7c}b_|VSRVf40lqB7mE-qWiktm zpk+xcL!}K8+L!!p4q!=h$*Ds3e3MLFAwg9p1NX^Lh=(d%DgqZzn0ZUpq>*^lD(cV`TPULdn)uRvE&+L~@s!~2zZ$1O z!A)R(rcpb~9-dH+ABV|A1?2Z8cLINwx>Z>ov&loj6v=`R#;&OeX1V^X_tC9JCsoxY zX=S2a0Kz@1J+%Efmx{bn%#^uu7~fR;lUFnFzOnUoy+7QUv>>Z*oQOa0{*mr@ZR z^7VP~@#RMUO#UG|=4;UG+p}>!xKL*BwK>EbxP_UQRZisj8geBR4eQ$mjt>De;Oq0W zWcl?qeEm3VimxlU-FRZ~<@n%>uUl&mt@&5)``y+k^0P@pu>Z=paZB%g*%ejw0-r6d zvnpy~>WEPKb=c2#J2%I>(F_P>$}l%Rw=Rqj%fZP5pL>P%BeTsimv* zomFLYD-&EaXkRcza6JD!-&sB>I!<@-N#n1ccK6!HjbFBnpYGq@HJz?4?bpfTm5biL zKRw^iD$n?){z|KKX0a0ZnU>b6>5*czEvT$)miiy-TaQH5y&K(|Ay19BWqH$Xejc4~ zJ8NghGsj^@l?o|EM`7BQ)vJPI$n{a1RUJD*zH7hU zi$B2C2_%UtvJsJ7Do!!U@7C7g=G zkGh-}QHH89xNJ>{z~mc^p%;o#6pm9}Q4(Q@wHrq1A{iWUpaeo<&#t$+`8}L^B4&tu z%7>V%5B~@wRz&kC`-5z8=`8O8!Ct+qUA|U&K zl@T~&-kumt)70TbzY(4|+|7YwoU-w~dy6d2J400Jq9VYClAWoq zC~>FeIlWPeP`;+~OH;F>ySrVp#g9JG8{e>U!mh8BlMXO+PpaHSyASrD;_qRra~-;k%}`Q zZOX8)Chu>&IVt|8>r7A}fptS06GOyNZlV?no6Ws)?JVpgy(t!0U)8GoN{d0$hKq&C zYN!C;y?E`|X^mCOz6B=1$&3^aUr!z=FaN$s&N-~kBaT?$t_(9rBk6lwFnzFT+(P@I z$Wbhe=;IsaL>xO0_}keC>k`;fEhUyWCoC0wB-n5eRZybfRy9-c5g{!<5+S+MoNTY2 ze>~u7Rq_}W-#I9Z&?rs9!CD&iy z>E`f#Y0eZxYaRN&@(BmvQO#{SpZ57IpW?aF-wNPRLAQaOZ65q)$R73diU47?Z8Fcz(S-URP=!SZYi@W@phqt#g^(ABGZ*%DPU}2;6(=iUoHjCZB|Kwmg}6pV zm4v+ijOirqHO%SUfCX-N(mD$d_S!AcEzD6(=voCUwND(Ko^&{pu=}=Sam*Y~_RH*< z+mVg1r;U&Ka{8tZ#e^*?+{oCu?lX_M!s@lGGA?lFXqVYmI74AloJaWdr3)j>?AJX& z8zy96Ay{RsG8$`OnJ2S(v;N|hwr`JN{*?H=VWM5v6GlFc`QE)V=V^TzE{#4$v2^fb zZRug^6h?P4T~D0CnmmRwc?x587esH%i`h{Wu_qH2!C|_Ll?#jEGM&dey!M=`>mg`F z0Clu~2Sa=%7h(SdOQ2O33?Cn@HmpRx;&k5yMdILZH6cy?u5d9cq?+TCy|2jFFxnfL z9m@~IhveJT;eFj%LyBr#Oq-pO2vgxDwc1Qlti&Jqsw8%c#Acor-`d)sBU8Q4|HXtB$JNRts z7zK7qQwDR7QU!n{fEY;il+oZ1r|n}E%BUQ8eZtg82B$cmYcFO*@aqrgIPmMvR`goG z_p{4S+Brv8Uk^uzbJ9(p7`r&RM=J6(@Vu#98GI6{PZs@YLnnI|Tn_2>f)9t16G$EK;r>?M#hUC2_#ycf!+qYQ~`vgBb2__bigxDB;nZNaIZ2F{3LizC;}( zn>l>sWzj(Vk|AF`nLk>z9XgSC30W8C* zJOQu)%u)LMw#Gh}q5;tB6nHq4(Cr^JswI4$iJGxi?g}a8>HLE&`A4*}6ONMprYr94 z5hVT~sc#PYvFmn7@G{r z4VU&3V1Wx8jun|L3t^*oHcB=SiNWesV6mWk<5x1iO#JOZ&kO=ZyX$IY$OuLn6iH6g;kpw2b`}RL2J8iLx{(TmOs_{5N@r*|+j4 z38V?hiOD`~#!^pS0LV2^&AzP3)vbk#L<6BqiJe z+ZnuBQCexiz@)--M-#lsu&Khj7-PGoys_koU@%`c2*S_f3<5_bN7Ed&fBfcw6J|_$ z`M0->$GBcPJIi`p5J16hDaummB&0(Sy4#}4rcwTnBW%XZ2dnP&#_-I5ZrSlhmpY#p z^dq0)rO&KFZ~`M!YMT`UQ#{crRg8FzX5M#dDXi~iCpEys`~*@moVA&FDp~S9%%^HV zZa`Ul;WA4}lDqf03Lpj5KhEpq*k^yvQXzT+?VVd$u3~ov&T{lpd;mSm98ngD0IraB z8iNTeN6;%pFD^wl-LqgAy(}H)XXVWeZ_mWqawMJyv@-#(Ww=;#*txGWiV(56Yv>Wd z%SIBcrl;U#F8&^Y>F?XNb2*VopgnRTT<26a(i$8jS`_*Cb6@La#*QJiwT5?8z%pNIkOG1BuSyV`ugdS8dzP-Enz)HMjxAO6}|kh(SaRr z@q-A8{n66>(W0qr)_R!efOUp96gXuMwz$-y2KOlK5e9G zYhQt>gKc+3DUD5C$Nn)48eE3z4sGoqyiY2jScy3UX?@W!qT;I8$O2Oh-a6(DBKh)^ zA2K^*J6TZNOMJ7tsXUyCT^uQ062yG6mZ*+1%~1) zMUd>(VZUUs7Az00o`n>AfD(qx!U}CQWgf4B-R0L&@!X!WLmWY*K)66q24e+N1)t;n znUM@;xsQzZIMwx_0hSHQvzl$#amjSP^$e!a0PO~|Pxjly%fu7Dxgyicv(pR8wv#c5_)&vhedglD zY~&vLq7i@H2kAp782<9Ryz*wp+RjeJDS-EZoV2R~eRQgCAV>j=v+*Aeuz$}*cn}}zXumBL zo@l)d2UB$&mWdg+VH)OIZIvQoUDY7B$RjPhKP$IZ<5+okdS+Ou)@lo<&;c5Ltn7?N z^bt|~QOM;#Xq(&tDKVG=9B@snp3EQ@@qAWjcO`u@Rsl(;*q;Ki&gkTaXv|mR+<8j3fe&? zpQb4CpQNH1ot#BCx=u~oGc3>>;$aKu+~Q(BiVfT38ee?;+b}w}@{pb>y(l zq!~WQ&@_WJ^z{2a>K|{pGfO6|F)mWEWX6cn{)*05Fv}=9;gUBsoVWL&CWY>J&f(r+ zoTu?YwZ251gGxE7Nipt3@9Cl4nlCl|N-8N=xM zXsy#J9Uf$r0^ZdJQkkk3_`@Ra>px;|PLBV8z1f)m+gWl)+BSB-Oy%!uz5X~9$MwsP z$pVVqRlY$T8RYpZY|_1 zY2^JUO`}8+p&IbuQN=p>W!#cpLbY%H;kPSij$Co#jT8P+SxI^g3M484l*NpY*LZ*U zexidIoBZ(ghoa$prM-B;v{w&kUY+k(gk*ea#+f9X5Gf2>CX8?x6~ncoW-$z=fkQA8 z8&p6Z(Z+6ZP!tFD>%%51c{EeZHYgV)6jCH53U_;o)wrf2!Ldp;9J!}7iKGO1X$m?W zl)7^p{9qyAiiR?|V@+$W(#j~_GO@Z1t-(?WE&bLtJY+IupI~-b4ArhMP{SQGRBi@| zBDpEXB1D85zAS!iAS8c3Ym}mq8I_^G^nS_(i%aKs3w?8rOkPo!ZV-bph_hO?ElvR- z@DNXqutg}w3GZkt#f?m|6$;75t87M)^_FxrqTTf-5e0d1(0P3jS4r9rcI?g4DsZzU z3a}cUBR12M>o(WCackc!Pzr%mp#h0>n*6`Dgf;z5mG|8NUp%bJo*Tv}e+s4YH+XFI z!MCYP9`+tS=rCXui$MWdz9YUcQ$eT(E`CT}Wrem$9(!Xbupv))S6Bx$Ad7VdR0k+` zV~;z7R!v1t3M=spOZLMD5|cBT@%%Ds3P)vwdVIJeRP}IddWy+@$k8wc@$awXlpvrh za^g-*)Ix0Ys%fgdvMOvtdC=4@$A=lyX;7G=UG$kaL6RcylYFKY2M!x>vC?IDGB)uw`VW~Jg5CeuIRQZq?+loV z>Y+!B>DF!>1S5Ilj|eiQzB13OO3+D@uIBno&&G~^#-K@)V@T)y#(FR=WI-T-D)eMZ zKv-u+449^gQ1#qNWd}ZGXrvLHPOB>dv^aEH`K9G{s&kNPq@eT|+9OX3{s{YQhQd+? z)QFu$(zRj9=?KKefLhhqnNkL_p;`|~un2Wg1Vs2u+Vm1rbO%+=TP6a5mT7fMCUpXd zzW^R4l&sKOC-id5ga;Wz54gEaW({a6(z8v5TziU6X{1>^jqt+_Q?KNL4j9S3mbQ8p z40qTdxIlv9>Vm=f2JRq@{B8Zj!>Aly8X!ye z$*q7wpU{hnF}2u*iV=&X9E@_;;GcCZ<2=7^OoFOaG#;qfO-9WEED6P2RUvJ#NMfB) zu$e);N6wL`9dYx}X*243n(?!L6~w%iHeZRT9f%8D5Qv;RJ)Bd10GC*TwtaYBV$bw^ zVQYq_x^|23PvAeicvK!b;s;7vPor{XOcMR2DhWCYe}hqqMCi)hFybmOj+nobxA`D!&*U477CrBQp#z=Y+`W>n)Y*u{M&6X?fneb<4dOC}R- z`VNAFzyDQCAm;9g?@a`eknIJuMv}jiXvo>nu2Tdd#DFLp9m6DkU9@DBHjKQ_Y1<3h z2bn4UA!oy^!wH0=6h96nh{NYD*9_fLkKXY$s|9|xJ>bS3=`{ooYbO8muFG{pkmy*D zM%|SsNCh>|S5h-R*2_ZrOn@J!n0_lQ!$ei5>#TcS<+PD?5{iW;C9w&3k{X%mn}_X*6p$X#0zMg&}#jPM8u z4jwYVV+wC>W2Luj4#~z1(8}W9CX`AHR0_Oeq1;sAT!FI4XRL?{s;6K!Az{? zq;xMiKrKjed$5_V1pORh`d<H0>)pQ+A=EI5qEixP zHBUG~aX<^lr_Nd; zbTn_VLKCkRi$-wkk^a%R;IV3N)vJv*orHi5h03};CcNq!)B}(AZ5wXnVrtL}`ONh- z27OnvZTAOgcSdA_&#MX>8=ki4k`kArLHod;b!o>MrgjtEB#f#f!!MKOm|*|MRsi~L zjh-nqsj&LWFcS-}5l01OPEp`b9j(bTlLe=;60nyzdtI|)*X6`30SsDtMYS4e;5O4} z#c&dGvc)Sf`~1SAmn|DBj)-0jMd8FF#q6tSggc{4SBCsjfSi4?cjbH}H|e~`;cY}Y zKA=5<@obrnc3|7frB{5$92seZ^2z;ioR#e+xy%y8b7a91v0i>+6-VWCX=ZX_H1D3^WK^c=A(fT9R5T&_YKX6SQOhkuy!!`f>T3H9M$5y1*_VR&EGK6>0-dN`4vE{^ll<&xLCd>$b3CV#9`k5C0 zc)Sw$!#jY@3q!We03qTBZX_oYolC_>or&p^(-Y;cUX&iF}GQ-=35q#&rGTn`Pku|?)d?8U5E zE!20t*taCkvE#@!vEL*Q8GGTjrz}|HRa9tCX~jH**ha*;%;4|!UmIy7vv%k06O zH71HZ^thgTq$W5k#R$Dfa*>I1d$sa7U{B^nJ@a#v{|97w8kMG@&P+)2^j%4vVT4oh znUbczlNUOw0qOPLqTc^%x74UwZ;I+Cb?NGK`YT(7$JW;!6DEa~izDA>ITP?Gy|jd~ zWN;x4pME<}?~6B#2LlSG)qms@Z3i}e%y;(+{4}%R&E3KE>H7SV#mCss>1prl_)o(Z zeB&Bh{C`5Hj12#&GtAET-zKpRYiikTjQtmh72!DosPIgivsekm-k9{3Ek zh;)vzKCwJ88TscUm)T4rqRCo1GRlYH#GWI~>Fros?6}*Gcl*Qne((8^9$$DNN&{!2 z&dqBj%45c|U&h$0wQ+l8_n3ch<|}}OCtmyh`=+%w*FK%f6ST&E=&3AeTaDdNr5Kn$ zFcsYvBAR3%CRo8kFMXGgy3sr1pBAz{Az?C1kdvvppS}>DwoY74%||A9+Th&O)DbJA zldl6W*0%1am9y}Tncj57>nLU{?tC+9+BVQ((#-l0;esPBHtR*#kvG|Xn_0U_0i2#DuoyHNwo=qUwV*|v z1@xh*4Q==r6N-$J4!uHgcPFh2$EkWZY)(8ScA$BnWC@RV={OJN7)xWZRCpzx8l}QG zkMu;Ds-hUv^bvMsIJK0#ySNylhNgbvY z7yi!FL$PIhx@{-2TbR@PViFYx-)r~qe8%91fCdK$XEP+L6daj`=%ZaW^)9!TFLw34 zwMGCnNNnK7N7EDT(K##%biW2XkMkzocX31;pM?PJGHEp(DSYYMJsmxoufX+&7yq>( z3)UQm6^l#C+WebKe0%d$Ydin&?rYg}&VrT3k?8%D-{4=Q_}#T2hqfB6zM(TBMRDK{ z@)P8`0A9kvAL=^caUlaN{h9kGkVQX^26)paOk<~o;|ej?a>%t=vc=$aV(e3$F}8VP z?4BU?Ah6{+EoeLBfh=31h~K^D4t5c2C)C~HsvH004i;tK3%s)1bO&G+ys86MrbL5g z{~+MY=>fMcrb$NPNoqE5_E$Z}(m>iI#xmCP=h!Xm;2lEF4N!}@NHmKS{!%`n5k@7r zZ$u3dsjl7%ye_1rK)7X)xf)}FZ9cm=h@u8C1_cm{5{N|+Hos_<18-BH*B-nZ#EuqZ zz>9!0?l$J5yUq`K;dNafOHV(G&;2`Rdpp2~pgO)E^N4f0OLK5xD5m|wjlpAdTdZCp ze{0k6EY6}sG9$OqWmJI6RBX&M;zq+|2VdR5%EXy%5sT-;bg(czH#d>7kL90$P!-|GUl zM6y@77KL??HQW{hT0D|gLh+|aj$kto7FB~kTyEuj#$?K@VYRt+vEE3EW*g=?2$9w% zr1kA|f`1kdF#nt`p~lH+LUYD5+4%g-foqozGvy4LTLg7JIi3UTZTIY$EqDI=zsuN0JDdj32TW|fASiwiO&V_$8OW1P#tI1D*Jp#Vfe#8G)xP#inZ z>!#32`(bh6z4mF{bIhrZG48S(Rm8z**fHXNe^RQ05`!o1yb*C#Aop#x{04-zQ0aHn-Mg#c@#XP* zQIZPPNrPZVmWYb+!g zOYvE88r8aoQvj6`hRw$Q1h{;{HyLWaMKwS4>;p3Ybuq^??U^0mkq{@^#@VbQ(rLfV z{YXUDv=ev*5=2%1~ z%wY<*()x4H`t@Zl?cwfd=@h#CAg7=qBIU?aQB^}!PG@M@gqvYAZ!BAQJ87?-3N)RJvq}6eL(nAmKmHFeMKEQYOut;(AN#I- zXcH+3R(CK@^|)*l$%GP<(Pi2}gY;;^1%{240gUcXNUF2H+fN!By9E50hWgZ?{`4+T z@~$OAaU>v$%?J|k7co|Z6t6YVE zaNWX|Eh%xrY!hyI+?Iog89&K1UkGV^h^IO7?mFTAlc{ z+}3mZI1Lvz(|ax(${9CWC7{dl({qDW%ot4d8xVLJklbZKEj>2(V>ef#}|f~J>)+@?9U3D?J$?& zugVOljGYeSxoM1xUMjlfZ!e#?_-ts?O}qMfeLNJnB$M!9xD{8p%hO^bq|xAf^?qB zz|t)@!d{=wu@nqqPCZR2{Y&!y29!12(O#dx-ss|dHPy_;^El$#Ojrr?qc!+)y0+IkSI1?&PZADi^ab}U_m}o1Yq}qi;jsY^)9MIIO>q;e zF<2)AeoJ|}VYa!BR>)Lbyp>p#x6*oN6+dA(he$h0;KW>XbfY7&YEstPD>gaD0jTaK zr1h!7P19x=KU8}b>*nqE?07&G(1c^Fw{=!Ftu923PvHhG1SHB1ao3%vhTg5RiF@$Y zHr!QG!F52-(=;ipR1ry^8G?dS`?Lyw#tTz!{RYHlIO#@Lbq|5h_mn)&p`n8dY1-Ll zxsF{i?hZg8kS+;3SJ;9y8Z7p>cs5I9w(qc$yCf)=k!3+$4kv?CHOeI-HzA|zA@~dp zb@p%;aVLO)Nd4&!RjA5q`EK^#-r&FHMtu>1aY5z~{lTtX4s@8s0LjOgTKJA>?X=hN zv8_h6;P3%bjY)^_;i7|c7?y_$QnTZ6(2Lv^*9+{Amr9_D=UV6X!#!pAgtUX%vwUSv z`VDz%Rm8~x3rX!K=2LwIxI>kIQx1#+eRBDZI2>*axxm6sR?p|%H;RnA{z)lk;JAXu z&c1fhHRyuvDNs0m9lK-f7vKMIXArXtfj1i|Y|NYM*V7wiszb+#5P$8x;?YD+$Z0-aA%qF_&Q+8O7yWp1QTr+q-cI z#rORt8tV~xT|S|2ka3g^lfXN0O>t&-e%czO_7~iWngurf$#P4_OrWwll@N+i>b<^3 zTIww4a5sk=YN}Ve-U=eZ7DOtb1%D}Uzr9BF?ssVPr`8mSHzCLC-4Z_b86z&K5!3(p zjxPsk25(F+67VgsqR!FLiRsDK`|Ru~ynu%ZJI|pD)7}Z=1IYO{fu@i3uJ>Za()I4b z$bAA;_HRW`)637p#s1$@FmI2*k2msr-TH*1VS3KjxLj4M$*2$5heD0UN4^V9zdb< zAMf7Z&%bcaZDod+w4A!TI<&ibJpF8~YG>%T;#*J5oTMt;9`3&0!rp`&M!0}54UE5! zj(^31<)_s`_Ui6G*T&D1FY0P%1J4X&71uz#vVt$cx<}by+b`AA6GYQqz|(eeJ!=Ze zR^!5Yh+NXD4 zAN$Hhq>W4&r7Qot;9W1TKpU>~x!S!@)Lv|4Qd(?~Bi13- zQKwrbi4W^~TEM8HVH1jCVno#;4b$rOr*vz=m8og=uzozUwp0@vCI?L@sLmx6>cNhDJ=mQSiu4|?wklf)w{kS zT(^nUQB!5&f)ci#t-+BUdlVm-0RyWE;$>qc@!zIBa>}#{NG^eku@mJ-qd14!eB@`~ z+bfPYE%9$d3oO{dWfL32JjXp7ZbJj&Q1`B1dwGvL&m1#I8p}=Rj{bLEUmtt+Grmdi ztlpWvv+DgPr9^m%gPh!v^(S4!QG$C&`@W2NcWuGo`Pec>zP~xN?S=Z%>t?X44N`>9 z`uZjbO`5G#)Y#(nw^xjRb7kg0s7(f0mFCx3s`@LrdIYn!EB7ofYs4<$T-^THrt+*P z^hs`w*4dX9WM78^tvA6td}V-ue4k2RLXUzV*^@U_KMR7Pm0`1Moj3raX+IUvf|&4$ zM18-@giZqMK^&KAmQ-~vb}W4vC9q_{`WSdUYhTdJ5HcmiSUE5?3<`Iy?G-p!EihjF zEz-wFe)3XOvEv4%XXdutm|eTMtMd+PPxEoQ^QoygY@{*{C(RMRd@-(Wr>e3g_j!pz7 zZv^W}(^R;B%}gjgqCi5Aqh_Ry(xGxarR+LdCWSA_2sE=v zceH4vfbdRq73<{jQB>g+qB9ESGyFEz0eGUDTE3`3lS8_YOtqxW2(-%8;v5#!f*fIX zd-`iaGj;Hw*wANk#MFp~;{qWpuK$rmK(K-u@C| z@kziEu2oeeW%`<%pY=2kO=zwW|0x1Mn-C`-*W4{ZQr(nr2KYJ9#4TZ8RLo6FlgWNQkoSBMjJ-R@K4!_y=mb@ zWA3^}?L`#gR3XH)y%$Bx6##)yAL9oBIhQ;bmjXb&^$WZWuxzx3SHdJB{`9+4#WmP3 zTYi+3()MPbt2-vkF@^NWoCeD+g4n;2=2}SlUW?;#=Q^m`2Op4@ay#%`jWDbdvYf4a7gySI3?AT~>TW z(VpM=0OfN3gB6tg_f&iY#A~!WD=0h)V9GJd?4ltD3JCaWz`;|Oe3)YNnB8m#99Kp#Gp>*ITE7;4-lNG4 zYg9j3J3nQOB)JItFyJQdi-AV(tmw*;ZQb&bjFsUht7F+5_be8I00>WvJGkV4A!4Lh zls$)Z@w>I$IA-{jH!EK){vp(F_Xo#)T)=!2UG!X&Z4?pOvu9zJ=?=Qm$$O6;*<7bA z8UmsJdV&F53gA%3Hjr%m5POEPGV5%+*AKrA^n=)dS%#V@cnEgf#G=jIcrnTq(B>eA zg|baU=*V4doS`;h6M_Sj2MY|`FbAqzVaid;)h*tb^ zhXEIZE27Oq&ek;`A`TmSyTANnlxm@E(0^ZW`|k_x7xKk;iX{S`E-iQ!H_3;FP@e)uM-8M0MB zxpv9%O^d9(T6fzhg62jYX`vMm>VxxQ+7t%!U`tD-eV$+sWei=r1T5I&kb>!i%=2Sdz>hEoV2{X0kO@ipr2V zPNBUc?MH87No4jOr*zI8QazHuf-~p|Ur%P{JxC@I3|Gi{89nx4DWa3qF9K{_OOz~9 zgV%i5{IyW9D-+~O(J`l&dNIJkV;_*+-xquaM2AsF2g)+eH4-k+q4>lPnQx3thY|hm z%`caf-}MlhrSpS-AUgx6I%ias3mA-`7rBV$5?3|zgD~$4`a}OAe8M5_O|vDV#(tcc zT;-Bl7Dc9IpqsL5$?~D`GVE=}+tRmA?xeIXb+EYVX*PeM!^YN90Kc(3v7C|YNZVpB z@iYwf9PU9jUP3j$+0^FE^AC~8kc8NigjyP0d%DTK%^9h3H@5?ac}v+cT7I5$O?~x} z#@-0!Flh6>z7It*Z*n=qwdWM0#@@VDDotg|y^gyI3s56U5VEmST(Po#+_cw9bUoRU zrQerwDS41GxT&Y!j;~Iy23SQ#Ids8h!K6rBXVnB z6vQf_Gfv`P0m%7fs2QKUP6_fF@jJEGHlA-E_X`H%kvvJ zRV#A)I0K;FzX(3wNq%~aV~_5J_kIr&2xmt^4#w4)GCi^0sQNr#2|Lt_C-ObAn`M?& zcwQkh-tu!zc-x#Od+Qa?)x#mJ3qkbXW6@XT)fkW4-Xlnw7l@qq3X*Lmyju>L-C{7? z^||`%o-kKb?Q~8$XdN_MPyOiJeXGiWcHBm%>d>gMyYoz7m3-eGF=zAmQPqs7rTq$! zRNv878_qeSl9k9+vNN37yt0TgmeNzg)}+)}oU4)=d!vjd_1Dhw_WsK=C|^P zo3@YMz1>*y?MAGjWv(}qugrjjsQ#pNcF}toU}{|cNuO&^Pj5$AQ9m6gNpD01Uv`*& zS;7eXgBW-3JF`osE;@O=J?>t2>%PbC4lbOZ@3(%Vf7Ltw^DoH%u9^E^(J~w?|4R`^ z@P8*_=csJht_vXeoKQbI(577JdQWKqkr4d_0xfKbEF4QGwT5PE&YAu8F{5{7kgaN= z-@bFFGc%1fqx2L((Rrdn>uyam@JC7v<`Icvm7<9B77OGMibCxee3%J((ai%#ahj-b z>utMMus11RL~LT{JTKrjs;4*E(OA9xm+oJJ8cnK>iU)n$SgD*)wh;>q5(#?ZE+Mr4 z6cmqll(!>SmXrbB5uzePcjdv{eg;q0n6Mxx&K@&)bh>F2y*GSi&B7ib7PZX|9+jaf zDq=Vx|C?^GrPKuU#abvr!pMbDg?kU|V>{RNQZOtT_klhd4vFN*p#y9o;=RLae+n5{ zfa9x4@uw}0KebZzjkqtyP#gUjMcAuS=bSNekD8}s>FThCB4$5K1!a<+sj5ouF)2fF z(F_vOLLZTqZC+g%8{);s9V`NSe)2;`Jc0;CIC*wOL0u#fqGz4JB6YkHh+@>^&kQmS zAL+jn*2aS!rkua(LCH-@EVHG?R zYLk4FX$oRP(0C~uShz)kmATI!h1Ilb26fVB>vg^pjac8Y3(q*3Eqzf2klD0&izhhc z&@7kCVu^h*8w_Gepzfz*_hP-E?q?2>d6pj)+vO8dvd_*{mItGCOga*33S72!OJeEDJF(mCVA-q##&Enm-=w zcq(oK6!+M4E-O%l6_0Og7PyDgpNPA6gec|*Cb-g`}Y!a2{1bER*9hWA}@nkjR?g_FU}J~LB_|q%DByof^;a>Bb!$sCqwyK z?Y;R!{}KirRDWpW8bN82ZXW}L7i+vqbeY`)bZAhy=TsPrP~m`=Pkxcd{Ho`q>3C%o z#o#(8Pnv1^_oATO)@RYs8kv4lqfUMcxl3zF z(}LK-$JN)zjH7s4)lJuC9|RO?uoXp5Y%pW*A2TsnRhUZM`^MA^JC1JRUgFRU!Q5^S62e_;$9}V zhrV7tU9Bo!ziHuD%j_PjY{Xj1`|0~+lThO`V}>v^q1CWSGmvo2eOhwLq|uz%D6EC)4nVO3A_H{r;IC*+MUiE+FXy-tB#@V*4xF~=SWjrE^Ri_sJ zeSGY3;2AR>RFTQuy@4x@e_aYx^QYMO*X?G`V}`5|Nh}$&zv2fymT&& zB|#ukp6Y+sSlWHe-P?F6E(ZI}h`O)U{q!ML92n{-ekq3}ej+h2(lZ;iG#^{iq#5MU zNPu`nU(0pX0?L*UxuUPr>jPue?|m74mj2_~YQoy>ck$!Vq(O@PIHpj z4!M({yJ7HopmE;ww=6CF?`JZEs=3Q{Hncl^xBzP`)U_LOSYougKmirbXzv2IGIy0A z0Ter-y9|r19?J4EhU(s45bj0Kyf*(+pVM^nrNgpq-=O<&W+W zo5#!+Z>!FINLu{-{PMVQqPYNkLFfvR5g1_0fH;hieNtU?k03_^fJSF|9<7ttRJ5Bh zC>XKlhL$7Wdhbw5aGQO2;iq!uM*I8#u@F>s(8xh9d@bcg!x4iM?6!;?>v`~G0sQn0 zJwK=-!0&qvp$v?`2+i>j{R_|DPL&I+Q{Rd85>KV=v?>Gvea=#6#9DnE*|cIS$&8%R zS@u4Yi6N1fO`{L;HvNlHOB({v0Y=X51R7ZruBM2!YjlJPd!4B(bU*$%xjO`l$0i#I zdIR_l3rX*!*>K8aM{vrW?5f(cHurbZtdI$0@?5k(r!c?J-VL$5_Swm>y=-rCYy1AR zK0@#?E$A>e0D<#eb0OBY*r`?y=+o9YOOdV19F!nynOxxEQe6M?F6bgp;2 zk>es^Ot0O`^azPpz5eZKoXHf>hGyk^LT2&G-=dw84)g_PNk1HCq933Xjc^ zw#qwhd{>duPzywVGLNr(x99POq!Cvpe+D1;e5^wtoBwpYHb>FcYNWs4Ju+|=rIc^6!BZ~khNO2RalY`_B@k!vABK+Ol!V1T9_6{->yp?Fl z4Qi$J98M^=Yt~r6cWZ#D$q`4^zh?5wbVzS)f7^E!yk7mgbR2GMXbTZfDF>*^faRUK zwG<({UojSvnU^5nol%9+G1U~~tCs9GX(S5;+MpBa4-ygp(@W2+@%P5v*23R!y32(~ zpwZM*nkxaIPMGz9Y=6s6I3H;}p0hzk4DQWXnm#cOD52nxe`t=-5n|~F7<8p7D!EX$ zKwG~DQ{XJ}?WmE60?vts!N$6m$!!(7d$MIIt=-YWZYK`1V4at}#m1Tds$0>0Bu&bM zSYQsx#@s}>zdp-zKpYs(#bjj~^+s5_CToA2F_h9M4QV^qV{X$K7O)&jq5JzSsh&y)h!GG-|Yg1vE zJJ^XLR#+zX;zaihb(cvyKtuWJI<{KOK4)gu z>NpVq&<~VoTsRZe1~Qe^ONm(t__tA&Mq9n<6d^)uv(3qYjV&V zbymhaEhF`~kc{bf7;Rs(YV@@}8&FEiDaKK(msUG5IazX!=&S^%G!^M3`Y4Z}}P>30SRS$LvZ04y7Fvq4FY*kp}#;_hMmOT;D1b z;QQX$O2iVUG#3bzmjXUG;&u_7C;n##ZeE=RutOD+K8A<&@2|*Ak#|IrH3NJnq#$_Vr#c4+GeidJ?EUe!)IoQFT1Phx9er$Ga1e@n#7RBK^C_*-(sDh>*&2! z+fMEC!rX#ge@)Ia!{UKe7mu|cHi#5~3)1bS)WE@qLf#ugRp4R2y_bCGQVzQm$ozY> zYv>Q&vET~@7*e&^=;`5WslGW-tsC-U;|67Ab&ls{%g}^CB(uZ&{8y7Z&=4MU2@*vn zzYW;~b*D(4A5qjif(^4|j@gttapbnhsy*;WgW~KTiNu3uKe52HUs{|Q!~#PkV=_Ph zSS|_5#E4DA11jr0GgM#RnzMgLz%FHFpw|6|91Q7vhE>`BDF zEA_vOoE;l0sw?pW8V2sT_CO>7jgN$p2f(t-(1R?M63au``u+N@(#=J(QO4FJm_eGt zt1fHHN7dr+iVALnhP<2+Htck@6TYn&> zM>6DMOtiacGaF*V7A0I$l)7n;;)MR`?0^zsL~={r>>d72eQVb!K(itxg{@;EO_a20 z&(R^dh5;cpAxi_OZZ(s9;gx>tH2|!MkCf%ri0s$|nO$kS~1$I`8Ci%?u=NZ2$d z;fhzb1qWPOrygSbVrdG#bQhqdtz!&~E#mizjc=yLh?}m=1&p?^ov69ybmSO-(_}{p znA|(Z=?XcVE~7yC)fGZUlcyqFUldqFE~+y*qisQrIU^ObF>xH|U`fiQ$V8$PCEMXZ zU6-_&7AlaZ-dLjcvr{wVhzNVrKma#wU}kfc`XPfRU~RSoHCd)PgbRVUp^KJdW$WAn z%68IlH?>Qcf;N$jKIv^Pn9${n=nzSS0LP`CqY7s z23^8qJUHKS3zk=U;~So+bn6*8Zio<5;Hv!MZcZ=Dh~Vg$U65diMDe2KQAkIF1_hhc z+R}E2(#=jVR7|)2-9l+x=Gh2p7+JPEx|V_$I6Nd!Cr5Ped}kl5mXJ`j|?sY*Sk zlH7u2)Hb#?3-DL7WRxk2Sfh(0QFlHIRcOud9>~|Jwb2SHYqZ!}%@88s^8EQSdHHC6 zD$Vxo*RyXUZ(gc)-*WqoZ+;F>-hj`Jew~hH2kb!Fo%>B~n&ne(@V(39cW+i^|FnGaIx?f*&iB)_{du(Odu!0?|84%f?MD9E z(T6jLqc_RJ@@D*7K zzxjjsxS!R8zDYfHvcmm2d}E&7iViRF!jmf^(K_Hl!roB_G!4RtOk@>YrDw%clxc2$ zrOzJS8Tn$<`2Oa|XUZaKxcBI5hCl0#Swuum1nSufY)9{}U6ZFf{km7}s=RGmsmDSB zt_Skkoc(>Z_bV6}&=Wr|Fxt?kRlB=87}*8rI^jqcI!^c%=ZJP4m81r^Gyj$0s{8 zQ;9`pU{abm(IYrkpA=tHt39LvrMKwD++J;(A0xm0qe53a!=TR>ypPDEfprp0R}^XT zrSVGM4LpUJW1H^B?7LI1hGLEaeVY187uJXaOT}2Zs}bS`NhvqV)6f}xW9K>TNTs{s zldare2T0B8F~%IF+2kd~xy1*#TzOg^GhM;>BGc zN!B=BG&56xvj`YheX=|AtE9k2?FhggZ)Q(|jAJD6GThboi~}cD+`TShcbHbvQ^)NP zd8sdy1SUkGt!6(+2F7i00}BA;!@#7##Xu?GRPZVpD1HiY14W5AgkWr_A%2Lu+DLA+ z*QIcbLMXIyMATH#G+!cd%B>mFJxoK>AtV(=0#m$^2BjT3d`&145Nikpc;Hus*22Ev zLYuje0xyT*Yc_~^fh+hX*vusA9d>#E`mbD zoDhKpDtHe2PSE50;IA7H2l#|Pp8|S!ppULn1!Np*Q*Id>;E!zKVjCGug)-bROLyu0 zd9-QXJv6bke0I)S`Y{aCn)zd^?Pqp-cGhLSZFTyVSGc4*GeCC`n~10DVjQ2!Cc!?x6(Xnn#MPzR;*ucaG>V;?`knnE4 z-VcXTrh@=QpbstLJ1lC}<`%XEOtrG$v;GyXYJ`VU=Hqop&n7py(M3T!H{imM74VLa z2%+f|80)&Ct4JR@$~58x`uYG6Z1rjRr2;UQinlJ1Z=6=B3UdwF4T$z}Wl2=UDez;{ zYzDNK2X@RxH-81;fn0bfmpnNhB zO+&M7Hp?cqX5O`Ed5jSAba5^Xb5_1VXpL4`xYNGYixx7HT@g7;);eSyZkpb7DVRuF zdOW0=SayDX{oF_6ZHjT>yd2OZ7ZXaAh4`jmv&u*jPb&JxKus?Ps7_1z#pN?KD@9y$ zNjdLN9N52+8el`O+VEPd(PlvtwmMmy8&eT0J$uBRRs( zTe$f90<0do8Pe+Ie>=IpEK&c_4WaoP(%#Xf`DS#$ozofE-ywyTpN1aOyt4URbHcxu zQ_pcWUA>~!vHCcg{p4OxucvgfGM;KoyZ0MwmHzAZpibpThEaaF5(Pf}x&%0cv}%Rx zWL^F+y;5(EhA@eax)>E2U;hU!e>uXIbj=IIHl&)6AqmQgB!)_TTlXh#)lySr<2*RJ zy4n7Nx{l5ElcwQ~XzmZ6ZzCFH%Wqdh1}<2%H!GDs2i=cZ^mKE-`_i>iM}FzHQCh90 zmc40?nC1tuRRGq$Ne5GYw!ox{O1z&o<4{`&A;wEhkFJUC{0Cr5GwYIkIedmd!z1#5zzSp zvWSQ?5+?uMEXuyt<^%^SWE`lSxL|Q+s#wHL$&_)Ab-Zkr7YpYC_${H&bZFwQ1xz3dANQ`V5=Bx+>0A%S!~&ys8Q&~Qv|LP7TU*p zN$Ru(*MflYcl9XjwjO|qkZP`(M^@BQv z`Xj0%b1cf4gKRN0_Gd zdm8)#*;0 zApvo%5l!y-opE&K<6GTXfrUZNOSk6VC(VWYwWc2!K4#-t_!Gjf(Y30Y_Wi0?T4%Xi#E6muD=H88rJ= za=X&(oQYh7kRX*cc<0SMGA3<@Ch+hKvry^wD4#1n-Pi47HBn7iYcB|aZCg!N6-9G6 z&;&3|RP6>MY?f(k@XKELZ0;&VQH2Z}zlLGnU{s;xY1tHHWNv0P=3Fo|?7x8Zg=MG$ z&(aZ$C~uWs#u5yrwwY+Lh2BDY(mZX>U$0qMn_ANkDWrcPxx~v9?6UdRvnuQG-kALi zmSvltKH#o}*raWF8G;IX;UPL{HTItvk@AAQ-shO4*;PXhgHcbg2kldK(ok~@;;Qa~ zQ6sHNuQ*By^qDC79$h>8@0usKd)I(d5rf_~MT9=h58l8@fqnZO^6%PTfC4A3+H3R80`iu3X$En&{fc*Lz7X`R z=%L+~CR1+{?CVEmt3d={(_XZP(_t)QfMM!Os74U5762PxDoOzMi$j!mi*tyc)9t~k zFQ(~NmyL_;%in_vDY;&9Ss~X6cpnO>UxNVHrUM^A4raZ3N z#pq;G;j3gT2<$%RzTE&81k8=meA@>>bT-Ek`X=oi?Di^l z`3WkuDnLkWeE(8O8%GL)mnvtN{g=vguhgcZgn5&U-9~YtPy6|a5ce8XywN7zO0ger$uS$nCA;(SIIzpW-11ep< z=}t4NJjK0f9#%04#1s(QcC%`}aam<|P{MQPmhF*^Hf|&SKI1BiJY?HEH$bj#N_=I$qM$6c zB#c(0IWOD{*9lei$KsGm$wmj2sw<%Qa!&UANvRg{oP2`8!!jki-S_6Npgx{&DL_aF zOSxKt>`_i7b~{cmhSNVGyJBxsy+WQcgME%BWgg%y=gf1^qNA<2UsC~T=#n3sk!((n zF;HYfjw#Pbf@My6#KRRaIm6|4S`mBS`qaz=|1QOM7n8zSTmKG;!!WA`38^>+&KKu zkI+iL>gsCa3_@?1|G<*hG=Q4%<@#;_axDIUCBo&{X-Vo7b~783z+l?KbIk-u_?I=2 zp|vO+EvI71*5p)K?$Y>4gRJcVl))aI~Soy1JMWv2OhCt(Up*E_*46s?)Y zJgJ)!d_&|OjSR8552_wOw@aOYthqh;5ECOdIH~j3$JLzn3F2$i1F8SjKF;f?H`&C4 z$)?S1__X)qo{O42qPnhrHX0j7??=HIyuAuOm&oRp0YZC0cxY^{JIRZR2k%NuPA#g|d4)%(?Djhg4Xh#}Dv5%h@WK04c?=0V&D?a8-s2q7hEJ&j=1Z&-n zbg$D!#bpTiBDh@YmDZ^o%`)(JzkdhHTE6WG5^Guh(dAos$t5^dD)Cfx2l$(YQvW{UPY zmZHjx@3q-0&djL|%f}Xx%B|KS2*c1*jJ1vT;;wScuzadXRJ#A$QtQ9D`U||pCE?&M zrUq~u{sDqRtx?-~<&7s2j8C`Q>+?yEbOe1I!Fne69UhO~-|PDuFJ1NR_VDm{^XZ31#&N$}X>y}0hsiyBz&*XR z3+M_al9ye%$+FXC_S))F(Y-mttFZe#?tunbw)pataYng|SF0tgz=GyalZwZqm`0G= zhWkJqY3p4jo2hnBP%fr139PVj zvfQ#FNQZnr+U&`^!SMGjXA`?IA!HFo8;f-<35Qly8@#5}VMDYQ?=Jd0bOb&bF0!r7 zgQu@X05=FEP*O-Qj*d~qo>~>!rjbDa34!7vCo??FAQE&_>qHcMiq{zWjIFxSz5}Eg z(^YK6z^ABLxs{>s250WJxOUn{NFar<>$n9Bp^($=<2$1q1n>m*pxWyfq2Q1a0@Y2X z#q105F~yvKW~I(`ejVtactwgx$@B1Dn%4DaAb^uq4gsG{6o@kGuOsFoEB?O{3AbZD zlqS&=G2A9%iQR`0M^{30vpK}qMHm*IOIf6(p|~_N&AOFibhVzd)C*Bv7iTvK9Bm6B zIouG|_y)c%hz~2jnB*8Fn03{DFQ*41V#xfM@%1Q|aw5 zi%`c=(;%um=#zpbYV4!H7T;+CR2r~jSujP3W5F?oG~q^--5TMYaZ~SmkWMFA^#AY< zV#PoQ7;3W*Sm*U$wZf4l@LkGA-j5b0d{wnfrw*Y675^hCS_5wwq+!+!NJx(=sR!%U zOBAABza*$W5fFGPO7NiFb$RrIzuEnKCkm#EO(H;wUCDN{0*W=Lz8VT<8YqkbpHnw*%Y6qRwWZ2b$Lq!)RE1ac-0;veTJqRvbLm@>-xf1KwJX@Es+x>P z94RBs_x+fYuGvCI?}*k?;fU(O&mHzjh8I?b*hHs}A=qQpM8ZoE<4OA5ZJj0_-6V;D z6l_a66T9F8UY-Kk$za;Mu7Q7`EoMoZBkZ8;=etoy%W{fSV_I22Hu(BS_yTOto0b-1 z8K894j2`O2+Di>pxO)*6A~HUj>rPu!x^eAx+A+G(nF3)4|H;&72W8pn3TL!h)K^M`*MgT0l(0bOL7>Vw!+LHFz#k}fj5L*oA z_C6KTCo%MCrW*JNGu5OiHT73+acjLX@qIa85R@}hiL@CtT~H~p#(X^-61TKE$TUQ!Afd)H^dZZIc6a zOC_Ul0=Bk5NL7PTm0aW=g6d1qE=j*{0#9%pyU%4*m0M`eCiLNSZ%KTq?c6QUazDfJ z$&}Bk`YhVF~E20d77uK^e=$&X8t|Z|&HkR4(xrCT^Kq19Fx8NmxgyV^s zV||G;^umbtTo5g-V<)P~=2p=Q6OLtAI&@u`kCoZOvIRZ3B};ov*+<@@XUBHcTD4Wn z8D^JJ{}B&s1kfPpa@d0Q5iHgmIu+P-B~DW23kA?iKYF&>5{+*maWEbi*^5#4+(N$> z9Xr!TIhUd(6I#_I2pp@!JVR+*X#vuh4(F&a5!w|mASh#TZLgdic`*@gN4OK*FQ*>( zEr$xitpA1uNnYg0a4<<14eDWU)6~_0^uk-s$2*iq31_=kb(B>{ zDq!)5L$kgJDovU`4XeNT93$QAV~Xz5v019!Y+^Ua#BPaYd7O4Akn%kFT&`MMVl_7E ztXVyqb!{cHFp)4q;E1u`=j;7(`d-aH6RG?)Aa(Z?__n)H7F*iB6slpAJ15V`w_;@u3-&}Dba zF}B!YL1iIi1VwocpeT@{4J8`9OCCW*5*0c;&Ro&9Hvfm%B{Vw`cOsXJlE6M@ZyS+a0a^(=)uD)CPoaJ4{$L-0Nzma7R>Uu*=7Gs|GbF@ zJ=@rFj1HSG7SST{SZ{O-ZMZ#k7T}bk^?_T4Gur9bwpd?zWq(soRFlNkim8;AvqZ|vQI?DtzL*iV zF?(NL+#z!@1O}ZTHIwc~L1iOO3*i!I=E9Xv<{Avm?6l`@L-)mrV9FcK%7|n7)Ur4N zi4gQ? zw;8ftkpwaxSzavNq6=R?4BMv3vubU^V;*aDRnHkBQr7QFX{46HTmvv2CkMiDJw^i( zdD*V%#^-b(68OC4YNuYRCvH5aej~AkdKlZL6|T>gIr+9x@1aYh>21~_1k(KuNt{T4 zjwLRV4*M-xXQXj?d3lBlj}=FS5!X3^C8L#==T{CCEOrfJWc7}Wdg8Eiw-Xz* zX~8xI{V7%`lB5ju>oii%iAB+kQ`Zf_^jb|4)cI-$^vDpac_q%*U^OCLZ1M^O=@`rfn)l>jgQKG`kxF!lLSH@q(}b3K&oln z)^3}fhH`w+TUG`3R)0*}Y#zu6MwlIF7+nx$xMXN|AAM(2%2L&B5x3h4JgWh;+)sZW z8=?zfA+(ALP&@Jpx|fwC27~qG7yRClM4>}>Ch(}b$SvrX2o}q9d8R*{xWYV`(wO=< z(-G*YQ2vr_9lIibW{;LOP4%iQUjB&{=k%~c_3K;nKyi8wA2W8yyJpSPFUDoVt0n!O z00?;Lj&D!ZfoaWCaW+(qr^E+5sq%EVLOe;Qx8kK#zwB?pt2rsI{V?(Py>TD#e$j`e`^}5d1ewabm+7iQ zl?2`{>u-2U@0nQ}&JSj|pm85y=|7VUJdq-nkCg2|wCo51T4(0Zjq?MFiX_hePaBen z;XiQ`82;xQ(l@0HjCv#H8Lo|AUiq*Zv;KaUhucik}3#~=cd7j z`IF#U0HZn3{9Cb3@t!E1^9xOEh+?pn_1=0}@bW{&wO#jnsqggHKZl^?V(8RVg|SNSL5ex7}H?-RTFzpc^x z9|h*CQ~j&!o4D=l<864^b-YVj9bSsMS`=KFUsbXac3se*{&3Zy-@mw^f79_{E&;pelvHDWKLrD$PSG4PJz*X?AJCtZ{ zq)HF`;dyD(x!RcAY~kBPyrnLp3+`QKXGk+`Z;=&CZ;}n+t z!=(-`9FzwcczjymDes0)JA&b>no&@2FZ(#>*-3{C&8r8UdfPj0R7y#OIoCI1XNThH zFLAOc;+smt@{6?hxM80`$Fs4!lTr)kcrlYk(g!`5D%RtR0pgb3;c!2lNJ81gFQyGs z?#`r&Oi+ko;MD!PMvPp%2;NVr_* zegb_!I{KXjwIT^FvB#?L!O8rs$7q$s$FY2N6?5lS>k|Cp(isb@8fZY()w5#f`6yIbU+E|q>um?Sw z35?rEKipa?Z%rHM$pnCc2YvZ2Z5op5qP?`9i7`8I;=qT;!31dS>_#!6%vIsGv$bKx z^X4Vf1Ud^@qoKjvxUe)se9ZNOH4NYS4d-8a8escfb4A46U^kw}O=DY+-KMX_^tK(i z8v1Ha^5i0{=AuI7(%}VXoKuf^P%lLXAJo53Sx)v4(MZh3k_#WqCU`TEcwS5z9zKE+ zD@OY5NabyPywYNP%wf(zo)g`y#rUzOPux@W7N-A`Au#cjcn|d0S_iBW> zuSE?MO_neboO&+`5QZ*>n{$b{DyD&%I2TPY2I>|-X_yAq z!c%a3nqI)8)hd>xOkyD_?>f~Z#ERpgzjZ8IpJJK?3n2~o!5Y?OO}Z2?S|a7$LVRe= zJhDz0qz+1iQ>-Q}T4ffgB@?LyRjlSLT5U&U-L_~!FA1x?2cEFh_#l)_NL;nRNW-ES@H|jO*xB-h4v;Y06enWjgB=sms9RvuixPOv_dCE)KFUS_LEJG91 z!UZ=Q>bQatri_dgxTY0(TCH2SR)xd>AOv=c*|KtBotClFghI993Ps8LQ5 zye0yv+uV+CWA)`azhRP@oGP;z=8{u-TfqBA6JvHt2F^t`nGE{%nhY3b)#-*5gj;Rc zT*Ez3uA9rIvr8frAe5O(0aG9mupaV@b2^!AT@qXo!^|Ah9muljLLqsF4helHiW(5i z9h)UT$NgXkaZ2dS*Od3Hj)&E$eGqCC3KHc)R6u6dM9BpN;Q;>^Os4QOCSB8vy8^TPM*xT(H9Zuw9_@sqN zCHrJXfoZvWSq0e5UrPxk{VQy_FuAxmlQaUcL{+Z0hE@+00a<2w%_-@L6p}!xh{&=d zIiY>#^MLSApO$#aSSM)rNG{$dHR+_&CojA}SA0Vk%0Pbg{5jcB+5)Hw249BTI3X;D zNy!Nt$P^*1!s`OF!FA&V76C()mjm#)SQOZbXWXaOA9SH899p{d>YPhC9q%Pg<36nm zry~!7A;$XSw*MK$?z0qA(y;>-;Mk5}-{Nw46HC>n#HP+|&13m8Ea(C4qw)n2V0sT=MG=3 zqgg2o8js@xA2EM0AXi`+r(s7EaoukWEwQ_5$RIz8-?!tO+%$_{Ae_Q_e4BVG2K?gR7Kr`UXgT6Q>9I)VT;E$>#i( z6fH>@@RK0ZUSv8FkHp!ul!JbWVw;bWPYHY9wMkgm3<5Dq@A63o^Y|9XioRz}HZ7+3 zbW)<byIQ?g+<$608QK4P%lUu8oHH`A{=b-WPPYHz6950x{a3W5ow3=G{$bAdGjKuxyB=gZ zl}T0`XvGhvi1vrkMo=KrP$8aeOr1sGfIWk(;#+ypzZ>KwKJSX7vHLboT$AT&Z~ z$`s6QLNv9_S}_oITv)OamW8z&h39OV8%-;euiZB)x)7Q$CX%1CW?}>*+r8CbJfMmc zW@QjqLWxp9AjjuKZU_csK1jjAqVlnvGTlsq(L?(?X=o|ikYpZ{VJ=%Gxr63F$RNKj zqcu$Cm9H5)p-kUITg4~|4a+ zj4%1$K@CsS;{$lUuj@Y@stuw|85>03{gn+gDvg(Q9xszHW@evek3NRswbSM`^=NvvwWIfw z>&r*~=I0Y5Kd-)w`qk$54`*NnT?fY)HbN@Wy4B%~&V*QqAWE()s2xZf*C(gYbifI) zt6Ib0BCWVv|L1@@L>hiVe(OFk#+ zQR@}aX$amO4W(hU2kyQKl?lxev4{&{2P1@uvlC$yoHWi|=#$x_R=!<%wYzR2N=2fb z1qwtmG$cp4eTK6?h6Insh&YJ6|q-u3bHu_4IqOys>Rs zmC|h%ZED^Sv-Sn}L6#C&v4mR+B~0=2(g~ZZU|stB^yX*wGLmSNoc`J%OHCoH z7m0;f1jQ!CPw=;z{{*TPKzhKjkdpdH04}I+0&}QwLdjldhV{TUqz91bD!dnQiM9Y& zgj}oOvrP~Zb7fqjL47bl0iNC^iv+ObEOkF7_h7Cs|DVwE{wkIO+P)ju<99Rk2V!gM&K8g{u2+9s)qMZ>dSKq z$v^Wxan=@@^t$4%q7li6(4hCBm?i|&f$0Zk3hL)qr5}&Z4y!Qt3UPB_5P#4k z!QYJgoOkO(^OPs&_%n0=$NwAqndig7oO(0oeRgG~&6B~RzYcA>`D)|cqAU*dd)bSZ z?##@JIgJ0i9)(saErU+%!%}Bl*g6)qR_P&*Oq%w6~89 z+3Zr6Ig8mek{>(aJTdtM;cOp*$B&sCEbZ3c#toEy=4_>32D9XUAeuMm*;8S`lJLLz z`o9;?b;`+8`G<_6@&r|R0xG9e9!S+UG4`WSfpUdtRX@!I>?b7B4bpK3p!*Rx)}y&pyxyZ!$5dwrU8r_rgpH2Uz< z56>r7yo^R*Jj7@zelxdAi$I+I>RJ`~35cdFf5j&vRPHFiD#qj|BA70+obq70 z+Ei4iC{t6Zq->ijV>;SW)T2_A@bo-AP7YGT)&K86a4I+joDyCMujORW?lsJb_(W_f zHU*oKebrsFv(d@;Wb8wTYx5mUre@VOX? zaxoI*VkOALi;;*IBM~k}B3z6_|DUfLw{FU}UED;txQlAGo1CVnXsO%(SFl7E)$~X) zWxT}t_p(MR6H3sfE%f*ti*|*@T})c}1wXz|v<9+q4~l5YAut|b;Q=Ba*=U_s@Yv?$ zbV(3qH?;5nBJCZ6GYg}w!H#XSW81cE+qP}nwr$(ClQ*{0anebqzdJMa-Kl$P>P}6q zKl|*Tr|LOpJsWF{pI{;BD+YMKj0c=^@Il_gca}AQA#IrkJAgtv`6B4%ZogN=Xi)t= zz|WHwM;+9TCz4m3IRC)>5y;#@5*4ENm=+XDyXD6ZBznth)0g=%MAVL>Z!t9LSX>)-2Z7`>f3Ca1 zHNk&~f&D9Ugbb>LazObIBz~$h!h8ZN-yTbM&gM8uJ?5XD)bE+=e`2kFeAYTCLZgVh zN@)vjpf(r-x}?pm>0=7W*nxzbO64+i{47-8&&z1~MUyAM>AV+R=!YOx9TTb1l<=l| zk`<#+trSPceGCw{6)_`9CG8y4Q9~`{7Wav(1Tp34Ko)}!5}L}1mTepz1iJ~Owt|Z( zNuO(C7I9O0P{bU7z$Ex!iC%k_2-6Oh;X~3d0{LN!oGl_ zB3DBDs^;03*ZrY)3?t;KU0ie6E#Lg-qf) zPTLg(-R=AayFec)!{-GCb*-mQ7`6RWN6+?Bp_>8ie-$Y(K$v8$s4pfBEVHv4lcKlPO9vi5jh$LrIrVywb}?w@OA^fM2x6=fJW<2 z^{;IQOZ+udZY=N=qb`xDxnmp+d`t9Wb3+i-2L!`wZ3HF=Pb)Ds9<`PW`t;vj z0$4cyJ24wZw*UE@kM_U1GaK^1y7NM!vZ*7`p&(QHwc4SSRdo~2yy^5qU{L|mIx1zd z%JpRZ9yoT1gw&x-{825gS%f+WT*2a7*P>DNIGT2E@8{<*V9#&GDmAP!?&;F7J*rrh z#HAgnjEB`N5|)JWrwlsh~dy175`4}&w!dX z#gFHxP$F6NeBG)cY3f&6wY&QdewX3V#h4SD?wkGf9Q~xC}sU zRSyV0qq_aK^&h*T8yiZ_8e`N_g_Evt{PQA?^Sn54<@{ICzHyVqL-zS8rtK8p;G%5= z>X{*p=jiLD{w<&*kJNzxtu7!>T&uJvkTvmT6J3CeN64SO45RyT@)Pz`f@K9r!0X0M z^V~eqr^mde0nZ+mA9gcyY^Bq@zxr!y`{;<=Ry`++R&B9JNa9*G>zQE{YTW0>KA8pj zb)l&x-RaZVT2!9kY;f&+Y-5EJEbt~WjDqj38^P#e8AylPSD0WnPj$ml?4Z5(7H(7> zb6@=IGR)Y?V0kiU=DUs%hjkJJg7@CD#BIRH6o8juAs4F=X1t90bVF&z7S^Zg+Mq{4 z``tTul8M`lFoi?SX8n;;7gGi1RB91pQpZR3qNJA$j*#T z#Tr4A$BG`$6)IEjMi7bDRkFN#f8&+4xM(=pVOk&T<1R<;F|-Kw%| z?0=#p6k60VA_=WgR_LFNW!+sZer@F~F$Q!l1dkmC(G~|mT0+OtT>N0u>7scpqmIi% z?Z$Z1&S<-i+PR$1W?v8gs(b2L_p)=S{RI_uARbL6kjNRxu@bu;p}lM>x@mN(kyZ1I zR{Ie7%C1hFKo}4jz5I2+i6+WddmJo6s&GhOAwYsbuMEK?qxqM}wxIyn2#d@|z?^^c zh&p4q{lzOr$$y{_HV_rJ2b~)G@j`{=RzsM!C}-txW2c1{-L9E#_;Aa;2Qo+rar$#2 zXn#kC073e?WE~E!po>*?J>JhM`V#3XO$^Zny7||7DNk2aQ;38Z)$FOAb*cs^zsb9w z;NQ`=^Qh(z#0P0`M^-s;jin*lMBcSA6w{66N-DnG8S4&-IuI#0)!MpZ)Dqwpomff4 zXk7p<1IPq`tY@l;G_~>1z74td_a^XZ*Ly@NF_x4fU~{R*4jZ%biNriHh>KoH;aY@B zclX{!v7{hb&q0U34iw2(ITN`}jmma@1PyQd1^`#_H>RoFyB5)(ncqDXz8$@#%Khyb zXaAo(TBhNptXiu98_NWI%9}AyPQ}nJL%hZ@hG3z}Mtvo2#IBc?ewN{5qMF3Np0#35SNF6p;kbAVnySRDvSpp1)Pul3edo#Csl;#K^zw zNR=I!LJ5==)T5-C)J>RUsJl{AlqgZjl|@XTnKX*$brNSSX#0?N7jK5s6&3``zo8d2 zTXof3cgGkEOnGR9=162xayUR~ksI7ciLn#V8E)@CHP*6gMq2K+hLv1~G^d2so(fz> zqC=C*%?3g}D1{FX&9dOnfv!NoA<1$89TBN_1Pf)aKVy_p)cXRMTAZ z+=sP|fW7Fd^Qan{?{n+0cZ9h0!GLKeW`)ja#m1{oV2TqgZdr>aIU;Lg%6_peu1C|w z6B<;KRm}nPd&1%G90`~7Uy1p$aN+#kHs;iS!@8F6Q~&&eeN*1e#Xj0Tvg?B0FrvXJ z*1IE-O_wFMIAw%q*)idiGH>l2dwBi%m~7TM`bB_b&{?Q@5Rz1BLX|T&3crA+yP=h@ zJKM;M0W+t~I~06V+K$O(v&}`%bcei_T!{V&mU)|_>o`gei@E(7`fT!}(+@9nS-A(b zW!l&A%Kd-_Lkwj_p;GA|!+A#E+fAfI82!Ev@SU2Le!Y$6>LVPU_Y4N3m^FOs32|** z6Pv+1cH^c-Hek=nZ0=SDVQwqni51iPJprrtTcUU!0y$dmx2*Gr1WYa^MwJ25EWPbB z6O^?!a8mYWQ%NPwMT!I>^CcA&m3(573AE^m)aWte#Nz@|DmAjm@V|(_=6$9o%1G=b zI%&~OMs%BqRNI$w)hfY+`j%B9Bg`7?S|;ak&IYb;;w;*pLV$3|BFN0tUsK%Zn$D56 zY^vGVn~HZgI0+UFuU82CACuiriWiX&V8@Z4j>8v1}`r#4cq)u zriGARNxjATY`A20soc|8V2w9r^0IVzR=EtO5XA1rW5t~dg8Jru%*mz?yu*d(>H&V0 zapzlgLrUEq&)9&OI8&y9yvIT#C_^ey0ZN$|a9R@;iBW+ks7zj4=}d6GkogfSsSOWF zNoLDAa3_K+E@4C^C`2j|3CeTf?z!l3mh5ygrlA*>IOqDlSjoH`|%Wl zs68~bhhgDf*;e+vs143C)>X-Urt-3f9_ZK1(Yy1X{&4+p`Lh_XX5X&8TLYzsi~cuj zy}=!Yt&E#>b)Vfgyw1^81Jv zqDe(o#~Z=j8e-q*fkqZcin-pDF|Q+)AWAl+FFU$EcRou=uRAuRnaAEL+))!)d9_J{LBR#6 zj_~Yi@NEU?gjaa%4x{wQA!D$adi-XRh9tEb(R&!i&km0|)Vn0b$7#GoB3U@8)yFcr z@9A;)@K5mL(Ka_++7tS2QuF;|r@eZ()wLiZ5nhp$&e$kW)QEeSDVE=u*X*hM9D;#z zXgs_S=@RN(r~&nkwc-_U`r*Fe9t1ktP07(?t&OwrbSg+K(&rSGQ4;o_>c(NKR7j~0B?b-HT4Evz8LAL$eBMy^Re#w?}t z&8=s9l(xOX$v%&r?6%>VM!RUcW2!+VoxMND%^fjQcd46PbV>WUjO#-YyP1u2y`=Gl z@SYR(g#m!sg}Hy;i%t!!n$?M^S!B&3szF&FEs|<%jIK+RnE^Gk8h^?yn|t_hqdjx> z|9a+!M?E%jMSF7?Dklp=P*99Z2nFmU49w|va*H=Q$8XIuG))usHOy-jr1cs2llDc}t1gybbHw*n3Hq!m}o;14_^Xf5)39nycR{JJ1?z zi~m#XodQ$qIs%-^I`ZJ?9i7|0E*Ddt+K-EE4L#<4oIdOjy{|p&An}gnz-oeGNkppj ze82(E|K?i5Fvc(9NbxcHjsO}FwrZ#n_4lx8A;AWFfq=32`^27aYkGvXQyhG6u^VQn z#I<-4|^aP&Yq=W?;ykW;Lc-Sly)xy8IubW z<5R)u8geXh@`w z0`bDjy>Bd^{tC=e|5Wsk?*Z7pi5=Gkj!8PV#PeIvP|_FmRw;e!uP^Z8sTU)oeCuo? ze@7M)mqLiEyBmR-ch22-@s7tFZVY@AfBLN3<3l3yn>Us?Wb7BKu-E>z6Q4tvATmrN z%UmfQI2($hJ9J&Ch5ZdwbNiHKeU9@d^PB3{d}tY-7|eX!4m2O(RM-!PH^HxK_uC(k z6W|K_|L(rR%?ibk~y(XaztB!8dGFW*R>B(yb9!Z{%Pq$I*2}tREMh zH;j~GhnLD38-NK1_f^uR6Sgg3d(lotZU|I& zNFs$_#wBU{q|l5a8!SgF=cGwjEhnXq%|cE~`{hR73)_O86UN77y=W;FY+^4rYNw#( zT4m_7$1M};t_o9QcFoE;3$@cyTx=6Z0k@YHkX`?4t>{Lm+f^CcPHDCZS@(u=cxYAy zMARJylFw#SgG$5d&R9l!sG{|O(!g3~y4>vsvuR~T70z-;(T$b<8zfl^{pa9tE6vdo zZhv|pP!VRjBfwueI@sGq79E0EC5w*@aeZnDM1mD|F*MfDu{PF0IpNwcCLrX}%VwH@ zxPv6r&~1H{h(Zds?u?NRnYf7l#IPv*L@b2gHbQiCHKu7aQz4hJJN z$K-zCM`0@{*j_lf6wV9AH|ALg@;4keUs%PaTPocFr`NO+tUE^!toX$KR#>&kj@|De zl;~Pi{7)dGC|}DxSxF`xgP-KI#r{I$x3FQ*Uc!cSwl{R)@-S;&;(Ks^9HckX{jK{+ zL>wD}C>jm7@}%F}F3Gl7U)Bv8@WuYDobFh-i2WUaP-Y=+E9is6_s8gA_WmC3uHiFw z_VUl@;p*_a+wsr-zTWqT!~4;Tm)VDx?SM@39=^Zt_vypwdt(o$hxgA9m%F~%LXTL* zpjaQUB`HnnBgp3-F|1p@xBrB5!qso@%a_^7-QT9ZZUHB+;s~kVyS^`*VBcg76^r5% zK*g8be*+Aj@rvOPK6m|6M_$*<`E~Sk@$PQr+8-kGjB!mM)3Ma#NzbvfuNISi~R+nc_n&UVh0U^R5I4JOS&H%Hl__ zi$k2>rdMB?w+WT|K#iV8Mw1kCLc?({XU0||!j~YCGE3(@|2M zj|NA#6jvGHaTejy7+J+&QtQL}*TjJsA$y29$s<9`)^cymIEN--!JnR(0v_xnW?`M0 z0RzM3TFR{A+g{RVz#$^H+B|!D;QY&vFdiPM+`%SV)Yvqkao0`ig~Kv7^m6p@a_aGQ zt&hNNER@fYy4@1FQ%_v9khvQ{hrD0&*cxc%PzIswF^ z9F>vj&*H!!SpqO-<(WKD7iRWv!0F79E2MkTgtu`oXH-}Xzb}syxSm>uk+99>stUcT zl@M{!@DXW#(lQO-2M9*v$3|B#%Jb>$cX>X)U!Lx7Hvy{`02SFYQW6>j0j{)JMXM9d zXVqyptuSnZ!<78Q@-xMFz9pm@?uq5RqGplkkauON0K3{>qE$O9QIpr!@$!ion6wox ziKwZmqVN(?OYrENb28gtl8fGb6+n`U`1&&`^%pB_1rtTVqfLp8qeeytc-;T%)j~Dq zx7s!@a4^e?I>f~`FvEzHt8ES+g6R90I_5R_K)kkc|NZ*?<5JrlMIfAeZHHf1ukYVu zicnX^P^%i5W_f3k5&f3n-Z}!RWCd7M%J$gq+gV&{^FE9VBbszy>Ds1M4E)4=eTv-L ztZw0@Wen@|;Rw6EKe_mD`Md<2tS(M2{XIGP;zcG%Piy!8`~EFoe@lNCPZx(k2Tw1@ z{z{ypSAZTJMQY9BWBBRZ#@OD|T+0pR`i^W7p59(wtu8J?MbPJU0KbRp-{)S>5Br@C zIRWF))ycoRvln|K3-ex2J8>t6(5^oIU}!rX?$6!l>HR)>Va^_+Xw>9uCh{>ot*vA4 zop=9Y!Kva3ac%0o$wAva9c`LDZ7ywTsuikMx@z&vS7`rt)Ke@J^Istq^IstbTcxN* zTeH~dmEMJVsZ=3dNEiCQgA~>DT+IIq#lL}TC8C*S5w)bKmk((KZm3)9SNfDbrT!m5 z^-HBk>0xS=I+fo4pI}|}VWm^)Oe&Y!weJ6O@KN!&-h4TCP94+@j_Q@*(-y9oU=X|7 zPM&A<6(IHY!SO(-Hm`P>YNxHOW}+FjCqTVjTq`eb%u_Z9>OhucCC-V(9_iD-$>2N> ze!*;XAp^l2+`h3_#OyhaB$?0-0$fVSHC74PBeYbi9k|OkYm9Be)n`m0A%s{YW|b_G z-3fv_X3U*5G09HcDr$7;JR7q(4lRUS`e9YVCONYsS7XRiMhMlTCgGMnG9!)xH|pj= z&)^-Zx5O5yM|KMc-Ivw_L4oO;w+$yxn(;Z#Q?OfGMboJBjq_&Va&DiQ!{30SYnpIP zndUZ&%KRsbr(GU#H5-cIHUYYqZX<=>zihb6yE)OBG4LiA$ydBd6tm)6ZwMG4O#<*nsP8!+7HoHj{nlM#~NOn<_A&6)4IQ$m0@bX5@?TV#SwakTck|&$%ULcm$KKMFg}Z zH8c}Vvqkbf)4)SLS6h+<4D~MIX1gxnmg?pGdxdZ5whAnb0jA3 zjT7+5%IiAtITY7jF9s2gsuJd~CaQ24~ZM zfQ%ZwU;aBv&%*Ja*L42hDgA$%Lt^6iA5;3#Y*~BUPNcBA4>TS!21|<}UK^RP8s~wVjI`pe(l{p$@rHMC9U_LQv z5KEj|Y?4KbRs{|5YKYo3;jECf@t-tQFHJ4Zl3*)h%@svvo zqw}h1$hV?rzARdWB%Ul@g*p&{9_EV+NNprAaeoc$H-X1*jE|p6E1z-nc;( zkh5tJR)&WRxcV6#h?188cWmW-RmQ3FusNNpb2Ul_`6IxBa8iujezH!w9VuivqvI-p z6Bf`PnrZD7^b)!+|IgUwnRk zhL>kABk1q(#_s)idjC9}KAnY+Bb<%1L#>g2eLlS|^UL{rCXdszm;2}L@rSZ2HHV z(q?Q3^?Eu1$!yg|@FfF1IHVrm@mo+u6#c$KC_nL^xo z3_JpS*sY60aQ?^Wy2T@3G5foJkmsW z`@fC*JAMu+P!tp)U`sSQF!U)2`!?-R)IECq$mP{fX7eUBzpZlU%|8O@J|Y)wDrU=L1U|?C4;+5 z#N|hp=%e~LL||Q7b)vvKVS#_bc06by`!BBH6~N0`@q`MnR>20&j9##cc&b52ac%&2 z3gowqWl+$@Gp~UtZR9q^6>Lv2R25uRluSFD^`?MiYvm@2JV8bp4*f~sNGh_7qKZ64 z^|)s#bcx^L#@PiHd5Rc=-TI0d7kNpcNyMR>x7L~jwu_XS9cA^g2W@UqNlVBu_{toY zqLOBP^%Mr2(>XLdNI%K``!AXlVN5I2#68lk;N zBY|aan3EiK@HBFvPykpYZQ2V zwg^Ma11Sk7ELsE&hzYuCQ4sSU)ar_>S_Kv2-9#K=53uY8RbrleLJ_a^nDN390nDeu zE4G<`paXriX_fhc?q^bJd(xEvga++hSgXX4^D3GNb!TgCkR?~*=r)r|yl5!zT>6^z zK|a13e}p4$v0U3Ursf*JbH!ovfc8eSNvO{^9SK`hTusbtk1-IV%x5wUUEIJAC0K^{ zEohlHD>vr?dKy}w!cMWSp?uW$u%O53m|<6$FI$mE=L+z^Ey4;t!Fwk->s*?k{;Xhu z&u6r^X1L{&OiP)&GhNJyEkOGXEHijngg`wyA8u1mrMRNt%;gReuQGaBhsTi2nA zB6+o8L5nk+g1scZ)S$X`y_Qp;4!uhQ)uW?Y{1`h%_>xw zmvV|;e3F@pHB2%IA9N7W+^_ApL2D>jKB9$;YG|4hG@0)v8y5ncob45- zM)+K7Gc`&(FYIVdG8*`V4>a${wCMb6P|b$PT$Gg_Xjw2e0iC3HOJpyVcL0J?i}ofq z=w?GTN$xVlJ)ve@Dh!9+^FATJjK7 z^nqV$hk{N#5(RbjhsLo~V;-5DBJ0QSP|T52Ca2*1yF3zS^n~RhV~E+A#Dd&>m$D$2 zgt_Tn1`lcrO1ei`fcxgI5}wj$-n}qa(_NFHg?XOABX3)ELvu zx?=D4x_*1E+{~mNcO;)H6|1F9K=NMmahE;POY<=3g0o;Ut5(9zhH}-r!C3^5jd!8xxBrkl~s^0PvU;1ABfWOt^etw$- zh$MxH7+@(1cJ?~Mb*EghOJ_a7%1P6&r$Eo1EL|a=KQFc<;MuiUc5P-rlEB@Yx|;R@ z;AZ{3Tk9`lKVFy=>Ak(Z=kK>-3D-94bL9VuSQv7O|F2p^N+(|zw_h( z_hf8Kz6BP0fwC zpZOUVRITs#4-BS^%XNVG{_H>0Fg%E>opKzRh`_Im(vPp|X}@w(bsc@#CCnil5b>G| z5g%56_xRLd4NZh3R&aCLUh&Skb%VxPb?jG!lUvu0#m+!W;(!{LX;%0BOF3_ftJVUM zipH-zwG+vAmr{Bse26eiiT{`^R+}Z2Y63<^@}w`zIY5SM5GUzcs;42g4|LPe>(XwW zqIEW^r@Gdcb+E_su=K}b1*$G!Btas^F5Qhn(Kek;H`#)tT!)+N5r5A2hKE$VC>YND2_wTg}ZjK z%hn}8oUp>fu5>=8J)A|^ScUSt(0;u(na9YVsMi&YhxVJ|fKFT-YAJ_I%VJ8QE`EFG0wQ@@eX->Wl9``L91{-dkqfTD+2?KWo z%6h8sk{|Lk7njCPjZ72)?uM%UU)!Hl+pMmte-quvz)xwO+Q+G!djmy7Gf~5HXv2_T zDd`dtC*Ko*JQ~t)eS9^E*k;S=#n0eP)XE|n`Kv?(S-l30k)8R_6B`5BZv#0IhP?h{ z!Am%AvyRsc-?p_K$px6l{G>|6iw7>Ftr9IUj~gSHjNMt|q4Rkt5g%M3_AFKN&~u@@ zpD(Q7J`v(MZt)?KVVn-Yz0!earJn;Oh1*{E4^l(DpzUlJslThvj611k(lB#C74ita zZ>(1ErO&_^lgN}b)B9J)s!IsPtR+uu8DLu6Y14j`*~)UYkbSU&d40{YZ%817H%-*E zE=fmGQOB>*lN~?}tyva4U*_MLo5)3sm`h8{TV6Mt5C%YE0E0%4Yza(^dWXcv&tVz@ z;b_MY6!|L|rE~P)Nue5CEWMz#5gcw@&3K5>97RB4!4|V(eFDA&4W+wb$cph%5V|(x1l(+-XbRHu74d9uPf``7xh}g}h71#J6#_r+`hcHswynoAze^suqBj zL;vz>OF*I=$&jt!5}-X>pG1S1A@Qf8n^iT&j7&Zr$(TlkO@_d-E$6#~&h>AMu!4rJ zV)njo$QZC>2DVoEo2@VtL+JX81LP;ePD)uiLPY+Lk12wJC4Gb$_(vG?y?rh0z}aO1 z!F&x9#^{g@2;|oEu^t4HWKyJ>Y~@cxiGI{5q7&oDp;AappU~wiYLZt)bX9hIuBk*2 z1(s$a3T~7)Z!FTtjh}{KiNS?8)DdRO;N`MlNa13pBhuSgh0g-z z!vxqEn%hGuU>vQE(B;0fP+{M7SZ7vpF4)Lu)dP?zd7JB<+9necw5A36Cs$;(w@K0M(8wh>Um*q7VB=#Ou5f!S7rkp_c_SVSI^m6EG!9lsIIRorA#bS+5myw6 zk-ofq&;Bf^(LI>A_|PniB2AKsZyK$Ybn_?uImx#WIO4|WzYcG}8Eic2Ogy7t$xj2RK&YfhqX|#$c z_#}M#$Ouk|x(^s)+`}@S=RVVw=M;`tM5O0s&sg$@-Dx>~V%H(W=^V5s$({b-J5ys1T`pR}^ zQI+0xpM_yUy}(XuK4_eEW&%YPNop8kfPM!A8~{5f1qLT+;QpedOZ~~N(tb^5 z1R;HNK7DBUywJKu4kDHw$sg0HJU+)o1UXB^R`SGL|HIC|y{Wp6R4cjyf#5fZf0Gys z|H-6h{(ZLaCRBc&`H|6{is&i~|g!^Y0?KV_|>+JkYpop8PL>gO4_ zHE9x&Nx;T|0M{O3*JVF zsFGt$Wg`rok-K9e=kzAxNnPaeTDQuMnMUc=$PzkMbuC3oi1i9rDB~anjA!#?YBbHW zyuQ)m%BM|cKdB6S6b$LhNAnpCY4W7%Vni-AyEr0u2B>NrX%jB4XKU5t!eR_X|1sFc zBF?I*po~Lq#{PqxVi}Hhx+LozvLG9+GNsXztce?=*IOolx+dsm!exn{~oUkMjWZ zM;_LoVJ=))wPv^6L?~Q#QSUo=8 zejM*Aq3bu0X_Uo_3M)J-9qhAup$~T40Upon9=B}$xOzA{W?^2tKX1l!F}{2MdEQX} z#S#GCzehPz*n~Mj!(9@9SM3>bAzQ4PkC2!q`NM&XTQraDZ;p(+SxrupoDfJ--JT7TUX7{WD;9Ep0#flg^s-%ax3SpO+!^a8|<&W7M2`BhKDw~POMZ}?iDeFfma zr}ZB3H|l@_c7ft+G7}j!7WPXTIn%GV&$qq1v$wBnFV7zKD+vXqR~VOxD1Fn}5*1qi z+1br^6X$1gNj*k+c@am4EQjiTBt-`ZS(qGG&63+pF++^N%%`St-YXEx=FOubN^7>S zlR{U*mLO)EKhI@?_$kIw>y1vhCw6#pISXVJb{;`HTY&ugY=|(<3&`#pYZO9uEC?W% zddhy8!^`?8py(bmIH3sM@{uw#%*6yjZ#JyEhM z6^4)}jzuM~+$wgWD;osQk+_g2E&@k%i=A2Z@VIp**U}<&Wk?Hqo-eQwQ z1LMUB>ve0e=s-)1VbkCjW^;5(vAr!S-541T#0_oUE22S>Y`2m$4FdVUS)(wZzj&4z z-skNe+xvfp4VUS#4j?H<35 zM$wx1nMzNo>ovL7L4-92lMCh|irq#fr%%=cl*LS?tWo06*C6$pUNsv)>a-MO4^38r zZ)56`{a6=l{P=bVa{Rq(3AaW+hgOe&8u(qK{VFX{ z+p$hdUlLo*S^R}q7S?M0fHzK89~{2CApC)bqSNgj&0bHAcfZ!a^ap9{1T6ixZshY@ zuQa(Uy0*@ShabGw`*YCUTHmj3hi6~HhcVUx$_>hCWt&6QH%RlZDavq^3nze_EU|1C<9CO1hMDKS=NnP4t56d8&PM}#54 z5o3$7#8~`CBEj&#qQUULf@D}CED@F%ON=ST1ap!h$?!iCaKt!bY%w;Nn+#2cCc_h9 ziT@H|nEw@Gj4?)-qYP6a4|XcI(GlccQKWsBp2&Z)YPz)^QZGZ3JWbSyM`2`C8gf}E zB;8-2)zkE_c`~iPKOO!)U7xme<81OzLNc9}To(giGTZVQ-8^B(`#-3`tx(h44Q8QBdF`=I$0TGVz><@sXILNti~R zT|(DfNgN06EaU)<#`U%M62XUx$dfNdggVjok`xJ=xU7#!QIZd(mJ$9!i-Jn+BSoXl zq`+Tf*^V)Bc_?XEsPt@x(L&jZVD%r-BSPi3~~;#~pq$eH{aJm1oP8 z{oR9yX9oeHq_c7TMG$>{A{wj}{p867<>}zdfe6yLRn1sQ!J6o^d&K0eQITeXK4G8F z$pXo-w{D+diKB(JUcJ@~8MPdIn<+9;J6ml`NfxCnj{RL)fzV4fJ|^>zXeu< zjPc2pAdEc4NaERdiCMG&VuX?8C<}@2f(XEy*Sm)w&)$7Bk>+xLuN2NTo{YbrvgGc& zLc+Hgih?^wyj;J<{>1!mPN_l(LlYM6v?QFkV&u1Gg4>P(0kuX9&z;;>@3L^xb!(R~ z32zlNuNBR6Haew20ufGfNRq78x4#0Rik(AR3_!HL(@DfEW{XYvPepq_CCbf1VZ%HS zAx(MSmkHp3=yFpHb$ zso^PAlZCfZzc9K{(#u-8B}4Q4D;L=VE}H8FIKHKs?g>0zL3`Nf*bv>RAfWYC1HV}s z3M_ipqdrE$>q5eIA4YN_uqDxkgyds|{)9devl42O0?)$SI0VsjyQhFo2B z%fs)G8vdI9j^(m5{dc8TPR9SSPdotUpLAK<1E62XzLX3J29ZGUl(yH>E@|?K_(A&Y z_B5=>Ae%QzMdDKDb=@5UMuCKMF)X`#?r9V_5HJd?agDKNnEVpv)*6xMbRg+ymxmori&X5tgzvAEh+p{ae2t$P4_#D2SZ-<$1 zSdC6;bd=uCUhNKkxNsR8T5!<;1SDaFDG^|`#sklnuDiM7$tw8vcr$B{9*wgW0Xd?=*BZPxsn_n^OC8RN zQ#T`7&!$+R(zfM*Z{{eI9rE{-!`LI&6o^MmlE;|x%}sNlh~!};!6(X*>m*Xch6u|{ zW{|!nxZHS?!GtacAR~v2Uq!(?IZ33hE&?R>5xyg*>Grg}(;JaynXDtX?hSUMb02tP zjv(Xn01}-vgCWc)51VNEQ;OLOO6;4suh~gB=qy#a{wbPEB9!_dxTfG)5zlL5dcJC|PUwgZ)R8Oq1R8iTA=eqzS4Ic1WwRyTa5H#*r zO5`Dum-VuI+GiUVPAzh6i3BI}qNiwLWo1;)QW6cYwg(QOP9-Ta#yaAs=iUbk#E zOO5Z8r$L*((AM8QB|;#~z{r#G*vZf1-tTct{mD$}4JGyxO0rq0fHX+9h_9&};vIWx zAy@*2u(RkJU*V*NbF(ZVRi@WKj%cBd(;6 z{^67Siy)L*MP(dM%NV5Jhn&pX!=lUYYleg(hX&s7`g%(%7lE4MHN1*us?UpPI6EX0 zReAXHt-vwU5nQ>)oTe&L{!LGd4VIgnKKqu%hx_bcN6mE58=cu(ur7J5n?aw9z=#0bf(-!a35eEe$&>+0Tz5@YB*-8SlJP-GArCstgUlJt!%VyfluJO{!(K!qIorpq zU=TlWI{;zs>X0VVhy58v%)HB#KBc|PE3>$sowrGJ4O(|-<;PhsW*~%l4qn>G--(F^ zj}}+V5IAOL(v$)HS{77>*>QWkl2~N$e3jACh0xW8vF~NDNOe`ewYf{$%|js{x2!9N z6U8hKxu)SCaG!{mxJ(+U{!vQLzlXY=K{I+_wnK{~lDLTY!=ipU0vR)9T>^bnSMuc8WMfDc z#;Y#Pwz#Pxg0CxzQy^RMrauC-M!&F8!1ud1zm+l2TRC4+wu4_@EW5KzXtUp3?2?_HZi~`|P=eVT-rI==k6GC2u@WgvFK~HkSP=)ZMny)fZ;5tVNstEhv-G&X6(ut}t#%sArLV~5 zq3M*w|pmiJ^5^O%}Y!wnGMy!A;%}#|hnM-t>fT0rfHjs)Qn&|g4 zof*tXi;KIUMO*@^!Jp@gbMI!^_Y{h!u0D?swpteF+@*qAr3x|lPe6IxRAJoaA| zaqiO0g%L2n`e<#{hMzE1ZNzq&$t1Lm+6{5AMg1n)O;uk?ZzIwkPz;XiA#`!ne{GR} zZ4P!7&(z`!L|$P9lLcfxIt!AX*7}|{Y|>6aFlGZem64kjvrk7-l@G+JaO$=M(@Bx2 z_FQ*PX@{5T4~EO=W#_nBI{64MeU|xZx!@9`>~B#2Fc(HiaH?1=dxN~3JQ9MLN0a-@ zx1$OSrdvcMIeBr&y?6`A&FzBBDA*Q00-ID*$09`R$?9sNx4HEJ0l1Kt4XH35$%x?5vPB32oNA``;;_WB_a{s>kh7{`ITW+I zchRNwqTowaj*-vEcl~d;kQl$C$&z87fTMjsu27VdDupoB)n zcz%;u9&$y&&>cEG!M)9_6%%ZkJttTQ5}5lKZTc(L&g|&C(m4(jhM7^hFZhC0j3*g2 z)RgUjVLOv!6wf#qHi*WD$33b3Z0?v6Bt5t~H)!KVaMDM*-uBqvWV#a`(+y#Hp~nY- z2G_RQvQz)V(aGMxLR)tG&2)idSv`|v`q*QbRz`SiWo3`MlW`j3M=9v7GYP>SL#(H4 ze{7AHN8glqUk{pbiB_nSBt>CT0VcRtSgpFaF{g|B|Df$1gJcV^Zoyl&ZQHhOTeobx zZsC?~+qP}nwr%@W_c!l*J@Y!=^pBa`Co(eDpFAh?MCRTr)?RCK{#j9HGUe>yQ6t5{ zmkLA$+$y^WVd~(e*0#KK|HB+pY|@#VK^^Z|D_L{f1SiIx-W~+SQo%;i_ z#SZq6hQyn0ZX|L059!42eHI6lvYvw8lS&rWfm(@&QZ+0=5){Upf01=&F{UBFHXi-p z#%%IPsu-^+z?|SLqzX;!Gng3nS&ce?0FLH_hqZXC^U$m%ftQ`M2 zGyP93YUjDyO$zn^LHW;mS#8f1=N7Q|FT+bA#C|Z1GpcH~UpGsM<`R;dezQyyV$7^Ucgw5Q+z z*4zPFR5XevC=>=vvMae+X$w3G{RC;Rk^o$i$6CZ2i_4o60bfpDZ!rd$%{U?prREE9 zvolrf!VDA|l^fekS&JyjX9UKrvcoM_vEkfA+Bn0#DYkmUsnYO0^&*6uzf7)Y99*=< z7V_B5GqX7q5R5ElvIeJ{IRv{a+kk8EsU>I*aYgn}Toic|?EDqz$&w?ongi)Z7iZh!JX(bAW@J=fYMpW8RT>}uT~U#@1lzYkrWcMb0QzrIZVe3RlI z1vIDgS$}oB-pX9)(X#T{R>NJv3_ZM=Y^<0X$NSNpu>(viiL_sD)|=Ygk6C-Kb#Jv# zIzG3{sa-c`#eHmfJ#T_|gVu;&gb#(Lia_x8$Eenb18E@VEYms7_5eE8`-$L=2+rI~zmrK$R#vK+6@#1$gQa2VV zh`%CI@1}f(_lX~PZ~w%zY5MN!+=4BL9VjoJqLzG6H<+$HDGTAAqjmy>x2auu`=8L!Z}1z~P~pMNAa<}>aj6E~tW4d0LtGz0X zqYZW@B=JOx4u<=B)Ul!bjZrs-&_IXw)X}Ny(6zF#p@0nSsiA+qr+p~@)Isfkpy|-d zJ3x{v6i5-YqX|)pqKatq@vArebjz;E&(ZDum&2DM0bo*LsB4j)f)G>MH>czeZMzbT z&1^&z^m7hb(nzhaq$1DM76S((@z6Kdn~R%=@`NDa9anVDgov1sO-clOTvi>{!vxHTjMFVT1Q9&5pXRETww&AX}r;^N`g-nQDGTB zU;E_t*B6{xIu*DwOxiZj)@G+yn=uqE+rd%Eu4;pDO*r@ zr5QycJm`5^61~*sw9YIe;d24YNdy|CT^9 zEj`=!{*|I&pUtfe-Orlui#D>;A!qZpfzFOLvG1-zIi>NdAh@0^Sd@f$ry_c()dB;> z%t8yEvd5C8e9dT&vssf;koY_aBgAwg^hx?Oedd0%pji`W9=??SqO?OLMhmR|KcKWj z^#Awz&uQ-ei_#9$Pgyp(U$fFppR}xZx26qJfXT-cWr?srKRRCh;7-pry}!5e&YGOA ze|2Z&oBnqo-O=&jM@LFF+Wo!5!+o>AVk|W;zYYkM%#VE;H)Vl`ZZy zs48m!W<5Um1a}K5+_+ZW?05y7`b?8+^0(*4<7QrLI-vMvJ+6|!^r8&F?G7>`WVEBP z9j*pw@g7E!8MeHx8D+cQ;D{2ZGAg;N9CZvAqQN{N6h`YjZlF{65`hE$Vw#h{4f9JA zTtZh?t>_&??QKq1du!70p+BiM(CWcKsdsNtUWvefo`GZg`-2<$Y42=(2C0}_2zZf0 z)X=Ov*wwO~@UDg|F*tF|dj&qjop6W(9l;eAR00-)`^XR79epBiB7C4ZM5u;0hpCf5 z?;rIz!C(A=nHesnA(P1oK zW;=o%tM&GGBhc`vVw)*XlU&capOUpYG+%*Y^87~uO!-}HotNY#q{}vsARJw0@9jJF z@>##co!cX@x*M*0V(_Gim`6WjW&PRdA6pEVr`74X7cd}vKwY>`@!WH7j9jVPr5tfY zQX-{VgMK1V8#HQYf?A0Wry*qUTRa~gzBD}+zhJCwwSC0EjUE9xM#HsCp7S(HMbEAm zRBB7Do#rQ}&Ck!_h#+E6);5Lq=4JV7*N!7iTDW6pMthFB6%RMo)}nDFNxycxByHB8 zxii4JBBthabJ?+?3z`flUu*92TDca|flp`Q+@!R2OXO9x5O+q2MG-jj#H+`#fHWER zZ1#qvK#~beumY-K!WT>y=JZyV`_wnSXlNXpIJyHg)TuS&;qTufQ^;}bpskO6?^4U7 z9M`rrNS*}tx|(_7#{w{;P!-h`A!zdhXQ4_`bJAXc4x3mSE>O5mYxNGBsA*#HolJ8O zh~3)YYrhCnQi8qKAr@j$UH616iwW%CNgnp*sX}3f)tI6%Q9mXWoxe|Y1oEOf%v1j0 zxD)596{LUtFpHtsqPolzU0Fp!wzB89caVto2R!{3&fA`(1Rl0QOEEdIU|*|bb#4^m z!^D*kNXEpW5t6Lw`jEWv)vDAv)(4Gp=tW-u^Rd8^qlGy)FKD>57QUd?4cBG=T@%gD_^%6H(#AHXPGkKbAR z0R#RtP&}}ENgIw9(yYi*HF(_I%*MO!`e21t4NVX5Zt>WtMyw4>I0m(E@Ytx_;;{XG zJfeHHGKxy!xT)6rQI9MKB!o&rxfa2@h;ZzqbYa=Td7ML5kN5LVGVJ*4jdzwB7hJd^ zX601Xgd>om-1~(S#pA}^GXuF(f$eud(o8;v)~fkGcu4@uecBH~9buE*lTAmkPa+Z+ znZ^mbodA7ruSS&5Z&xKfjtQ7FjrVq)zR0ymBO)+}WNz+o28~bLY!HB&_xS2FC}EoL zwAS!6R`6wkFod@H{=(E&JA+bWyI>af;lJ&}?d-#Mxz`@XZHX4=ryAwfTAu_IJ5q>A zwkzk?u)!|HG-(W%!-Yy}VY)zJLJ5mU=iwrAJ=>VvGry<I(?F3P~xp-FtVAc0-n;#HAt-&ffB)p%6Wv|iyjNt^y&iQQ5U-RWH?x) z0jOwkftY)dSE2-5(DI~ZT<|cx^V)`{Xq=l7OP8}A;$qBs=7>*2BxE2%R@EJ0%-IA_ zMv>`zjjzD(+QmS*VJ)jcdiw|9th~OHQI*Y7g2qB6Iunl#W|$d2B!};6kG;v80I5-Q z8`n%asl+aSY5?cu86!_=-GJ7F+^-dC-O#HmXcE0+C#P01m5Kh z((IwFCX?F*lF?m2wOo@inf^|2BJ%nDTiF4X-nw}tNrOe10g40pfd!RUEAled;?2nV z?*>2D?zb(>Gq6E?)<-EWaCY&NqehUoC9 zL^+Mx)0mUWUO5_g@dHgzHqr8`NYyCOa!n@YCfUsu9tp!>W~!!oA+WgD&cv)b+_AVb zciGdcx<|7I-S#Ej=Bg$rbh@5RFJp^=8HjeIf;D=UR-{uhQ&$75BpS7IS$ZxzGNkhd zGw0s$48yeI;iC{dhL^kT))h*u0#REyCJO-Mc&?xc&fp7?%=wlvX1sr(5o{34c_l-7K^Nb)94&?OpMWrJXehzrV3=fR z2*pK%(=e{=EhYbs{<7wu>>8~^)FA}KUsB<6Nk0(j!p%eK9EH9uJWLChf0?`OPtN99 z&ZX)pfu88X3(A%NE|Sfo21uG7c#0?>0Ipaaj;QZ%t6N{%v$(2bnX2!(nixM4csr}j z?3}X_?4l7)Zw&b{DxTJ>HQo(xia^UqNNT=FI9=|voywHXc_?3kb?$OYhf6P?dKU&Ebm+Gh+` z{)K%Tg~avgijwWP&$7F_a7v1&tQ%Q!q>wxiGpoe_bpmgO?gnLOb z5H#Yt&zMn45zoYG`VCFSuOhMMLUsobkG#UX%xd~#?Iv> z&8X)$>K)c@TNwJ_s6aDI9*2@pRdFq~T^;RufVHpBNP};j< z=Df@l+m+F?BM4KjE#d^HfzX7S4K?eFcHr(Yeyjj7TJcInl_zYO8rOC%oy!F3$F}w= zYY4Lqb`daJI)(@oJEcMMc5KwYl-dl&<}PG7u&te=jw6Uv>OHV@w*ohWdBYQ*;J_0P zj)zpo_ceS!x;uKjCBk3o`z2GUGg}eI4NdNt{5QR0E{|j~vVYlcr;FSUieUS({n0>N z6-V)Qc_yFz7(}1jYT*`uJ%r+r-nt?ReqsbD9aR;z|E_``f331JV6{5Q%|YuV`h7vE z2TOB!aM&g9*-H27py!hO&Um47CDpYNeD>s^*VN2lG;->#2kfMyf0_~|wHBM; zIw)8c3yq<@h;Qt)M`K4+V1t6V`<7g`C{XO-z<;MncmqWG@|Hg51_Svn9xJ_AiGL~O zYBER$K*#16{%SMl&1&?(!#%;bYjuqs(d{%3O4XU|-yTOIaIXByy2c)RGN;NNp(EKZE zeY6nGDB4R}b;QMe*i_-dI6%M)%J&LX{=xz`_aeqb7H^R{{2E9Dv9wBzzv38h*r6Y8 zV$Xg2Q?#^BSbc`bir7NA%N=9SHFsN>m{sm1q&s8&mM{;{H>9sgV2xG6V3-kTJ>ZMR z=iHMFh&WpwF-Y6(>htYPQ}+ zzDxZV(DFLdmUHTkaui#LF-eV_bKFw;E^L9N&@Et}+WHq?{q3s?6vN4AZd$_P3AM)< zgX7O>1EmgCficPmVzqp+W3t3K9>QQybkj}9OO^5^7>gXcNx%0c@H96N^TBQEK;N$^ z@r08lIPF0cVmXf9riOU{LIgMhQsj{Ua(JhIzS%9TcXz$ovtp9y=mGctVZ~qqRG+Uz zM0wQa_VnfBF2qPNv~xR0vPyh>l=m%x8fc&QGpRvNsb8L^1KB>>3+S%6T0QV zBAg-Jo#lS_SyQLLXdyfij5K_C{b{a!0B(8FYX9A=!N&L>`@zxwiys^-(|@eO`G^KKxPOsYtmb2p#duiom!@HOg1=vJ#nH(N-Zw+k+}N&kNXNnLRpY#>ggD&dN~? zCRCiRB6QVZ^s_l;w-v|`6{+3?QbH=*H&;z7`52r0sA?LUJkdP`c+4JG70~|bz78}l zO(xP3U&e78wM6nd{9CD9M^JHu!Wkkr=5&Q1IKwgWAGOO7ddzol1@-vO)=MXFR6 z<|ZXH%937ns6vzX&@_Q#_jfFijaukw9Lkx&yVn-!*_FM-`yW;{O-WHW%njUpSke`@ z_FJI$m8{bGYBCg0CXkgb<*MsI45Fvj+}6_E&qLdyidv9Ox3NgS2O^jlsf$e-V>ccE zt9v-1F0z54qKjyBiLg|`e=H$t~Ruq_Y<;_*A7O z2BC?X3eePxOk~uF(XCPmaly2DYFyfAb-A=8`n?=QdJy;eMt zzU*8d_g(tpz8E}j2SL8D_+yO~FEoqc(I z%@C``k+Jvr!$^_9GyD)`D%@cP`P=c;$Hos4IkI&b~vzwmVFE0<_qT7G=S-sh!!lbecXl0Fk`Z{S9aeQ&Bo?X}N znd#BoBtn0m?)nvl@l#O93DQ|*XoC?pgu-uW{KhiyW|2enXeIX?trp_8dY4Ky!aNlv zm(7#o|J~phbBj1))nHs9hLXnw%uT7a*8nWg8u?fP&1DDarY!Z6M8O{QSdxUw4#I6A z3auj$JLI8U&@Zcxo5)z5n^TLM2tS_zIFxF%s0kfm4}32CUvvyrd5GP>lhnM1(Xs)Nu-sJmkL85B_{I|JuoAIkin$&( zK?YffTpB2$&i0yskt8Tq#e-vlyPXX9z<8z}aYF1BLLp3yl?mTfgaHV_IU_Qhad@JA zOo5JGpG1$2y&emEyco`u9KNtpZaQmiw8%%CiaEObce=OQ%&bYnCk z8JE3qrEdhlA5bWvIS5i&&yBBRlaf+abcm0U zP@u!lf=E=3s^|9pr+a;)mSWv@4)A_K;%;!p^sy1U>9CCbQHvfcEt+w7p?Q5u<2jEe zm@;=o;=^%dBDjdjKavK;BMfpbQjO3Ib&Mf)yDkJSe)zyiZGDtMS(>JOx{LMJCZrde zES3y+3!GZ5X;UV#P@d(R@U%+M(633(b({KGdjz)c@X`Uu-M7_~gC8DWHVzrsr~Ajt_GJ`!|U!soyBQ3z%eB`Ed^>NCWdvG2f>QD3U+gled#^F6(G{WjMIk$pbP^%sT zNBn7rjf*Q>xa5BGm_?&^)_w7QJFTa|VZ_O={%!_uc34Fm_L>8BGP<^a`p=F|Z*Fa` zmQ7f(G@UYQT~deaw3y(;fo>&Kx4TkVd#5rg@-esKGi0&qHorZ#o3bCMoQizSt@#J) zZj)wUJY|1fL>e5erB#H6VJNoM%-DO88HWsGd;%m|CbQHZmU)s{V;r1m$0p8x3KY() z;j0XZ7P+uolyLO^Iytxb!Gb<>lznUt-W8oJ4|tuw=2E1C3kAsxa#%g z{O$;- zFHt8gRe4E<>c1Tl`;N{(FTcJnHy0mS4_e>T%lq~JbVD)!gk4Mr+iv4l!LG-=(b2M2 zKer39eJy(l^&~z=RimUQh{*Bj&x0eHy+atJvpv6`H)~nZkbB;9T6JxE^9DS3Z&cdW z_|yJv;IeWJ4*puS%kFVG?Ekv`^5FVrobLX3f7+j1RC}M!y*>ccn*G8UPcQ!yAtqPK z{Cr`v1F&{KJUqng7=R4M4>w~0Fc6G*dUUN)rr<4chspIXD0NwBP2PRA6%y(Q`L8(y+LkA9VpSpXausLyf{jkg#L zMbv?X{cc(NRxMIcX|_ttBDd%tHH*XTq$?`rN=U zw7*C_iG{N}n%WI-&|X%Hu%3k?qLOvKL})9V2|(!`I(ok&OVq3|QZr)}6-({-+$7>N z>&Q(Id?dj@yqym1QhZ3Xjb@xO=4L{iI?i)>M!_RPT9AH%0rO%(A&hvXL@V_sb?He< zRa1e-*I%;6z5LbqA(YvHn=>elLS?8(n?xlNoXxU=u}Q;*Fn4*)t;*89D6x6P#xCvL z!ZU7a4W30Cf3%{;x{1U@ql*2b$T$hCj+Us!LE;nrBFy|$QcLR_gRx3FAVUu=4J#8G z{juSmBZzwjXk(sU)O;-}2>?}5`c-xoJ(GF~_SqZ6l@asQN!55mPOcuoDEbb_V{-LCc4p|r{ab2J=2tV*kcSC-~1)i{MMqXF3+4I8*b{*Kd08IHo;2m z(d{AIg*PpcCyFJo6Frn28$KIGy${i>RVo%Z_`CFjo)fymT!YEyPSA>Pj0-7kbrFmE zMQ*vLw^7tC==IIN{)8%6rHnyk^5Cz{j_;3|MIVwqlCGgA-{#)(de>*X=b@dq(hVJQ zqH}8}tnWPdA*>F6!csZnJ)aZl!beUI6Y|m#iB06Fi?Pw^ZEbu#oFBJ4z4w29p57ik z4OiRZ4sUuuJ;@aZySl zm$3{R{CzgI^_%{T(e09M<||t7&hq9gT<*I|HgEy$b(zMDnFo`C_s?l?HNYJ6gh3&f3CUycO~c+ebXk1Ww06xCa294!#@LYK;uIZ6sU> zgv_*=r&JZv9<->rlR%ipvoXMeR`uhQ_BDSR{msMU>3O?*dzI`?uE-&#?kzYg$U&JQ z^dmHr)#IBsR4{MNUt!AEj z5d?p=Dih5=A`IReR$A^4uA8^C9w=|&m~6e!BnJ-~LeSzu;JN3)lAr;eHw0sjwC2A< zq>phMQFoK353OPhi(snE1ZS-780g8=B#qWLe2p-~ZiDxDg#?9V+R;3Ick}l3xhafx z3L_z^2CXtl5C@xTbalbcaR8awmWTgLRHC;|ID@TWu!1P^H-}U>vrL~r1i?7618R`>!H523u(l?m`SlYK6Q^!(u1q-qlMo3*D?a~ncUXHXh z7b9mSOPsRo5q8we3-RQz0yb_*p_C~OdThQ{#(%7H<(4vltQfndLfUS1WvG3C*&%8o zpe9MH76z~yRsIh=lO=)ulzKUp(Dh8Sb+)g0UYr8Ev2{900>1zlbuYI)Z-Rh=Sw8#% zk;4EgqrIRq2H8Kv?QxDdDu#CThrD;%2nGG_@Sc)TlKS4&=2Fr%^a7Q-WWf zRa420te-ABKSM2l<&7+I9u`PPJwN@0qIBirFs^p^=L>2aCqeh|%6%nDo$N=t`C;;W zdv*5JQCV@5qL~13Bzcq2?cs8BwytN#pO)_ThrR6|2Q-&d4k7umCAG4!wN_EjZvMuX zP#NSE;N3Zd0bmVQ)`dc&W%@(`Grcur#&imO;`S9$1*s@7{B~r=%thki{f-%jfZw7x zf@Q;wB+AID)khW3mS)_CoQ^g9klqRVgUQ3o(Mp!e;ON_CNs-`Ng&du)7@wxJ`gX|M z?0u4&bPgFj&S$V81f#aRgendPA70?;8c~>a*4y})3CeuGAu}}s1=@4(W^&CknI%eV z0sJeZ)Cabs%C4`z?sqRIR&?brxrSJR*q!p)LSse^c)K z?3eq9Ma7+bv+~94CbC6s;h&y~L^a2}ygs~MeO;2JX%HsIJa~!tejmCGct99y&@wfj z<$Vc?bO`qFk>|J&m?WJdmN_}XMoyU2!4Vi2sq({w4Acn@^auT2^Ow)0K#{k@SFePx zJi`6C0azIpE$?fCy9Iwwx-EN!usU*bmf>z=*CXP;{FQnLok!pxo}#OOC;v4}kg1c6 zpNUq#!j%E|WGZke70P8cQLDO3EmMtE&+Rx^0goysgz4MUB<={W9QZc-Nj9+23e`Mx zbc+-}h?}Zyq^WIul*TZ*=H_q5A8>pjQ1g`f1-XtXi92mie<{HXfjyE@oqSOm^{If7 zzDgs3-LEm#E6_T#$PVtuiAy!`f*G8Qe=lLZP$;{-MWds$Xu?}rIAY=K4?%+EqxV;X z+o&vziYTE19>#+t3+YPmWuji(4$hsGCdv$wq7{z8zEqx=X`kc6^cL!jwrC8 z83qs*3r^ORz{Cc62%=<(HOS3i4D7?fWV2s!_^J;wmnI$OX1r7k!(vo5TLVy|Ysg^r zah%hUQ!^v%j|pT&l%!bF$wI!qI&N+5jW9u>ejnUw-jp=4u@!j*^2S{(3+JO*O3q0* zOdtwi7X}t27OB;Xi&~ zl{k{Mn`SDlj?+x(tddgiG6`TjsVD_GTzTX8%^X0s%>C)H)(^n&O+=~98W6ie+)EJ= zq^5>JeQ(b6s1Z?Tdx30+-86= za40JA*Ts_PV)yoh<6dv)p{%Rcd(_klR+@2+-dN{8f~m9(Y&oNRm8#B4fM}3>^Y(Nf z6{%A>IN-$!ZJ-g)LtQZ3igYa|A-bsP_x zE;qXk@Rs8%`sBP0F4KN?15c&rHy(2xTTji@>MFBT*TmPfH}v%2bGnx5tX>eG2lL2( z0rUR?7N{CLav}Q3IQzQ$I!nJ6YM1aMR^C1OoFr9D9~tQxnmzJrdad!&TCz@OeO~6G zkuGVz{(9Wpu5ujFJ_#1U&hk1XG-HP-@GA}z976uF zv0;5Xtf{2DA%o!K@pG{nSBlV*6ViZyEqH%1_$Mb`;5!-%;e>e0Q?z7%Nd1|b?YioV zA;z8D1Q9eegf$k~cSd(X$cr1rc==G+(gQf73(YS};Gp7LYJuSS+tz&h8Xyq6m|t@h zc2L4~8<8Jc_9N?1xXrzfQ$a58L8A8t0E-C5*jsW8J+J1o`weDXb!$b#89Qrl8xP1I z%D=fP>quV3{0YQL%kQ!@^Y1;|l75CX72T%Zu!Ua*4}~>))qgS}Qo-#fglF^z21DX7 zM87|d-bbW69Ezda4rP5gjit}5Q$Zohq%lZXd|#wvM`XPO0m-wvk#l^w@(ZsWs|o@_@s^dczIL z$p;=gv#_%FY{e1YX+zhiXNCd+&03j6j>}f&g%D;~Hn<1Z!syL>>Fl!|bDFz9RTmeX z>?*)0$vc$mYM$76UuT&&5`uctQHFrRGH>CYUwqIHA;ey+3H>QM7w)vlVe!D|+|DTP zPh&;RXdP`Yx={dD0bUYw5Hc(ybeo)-`~}p33H=?T;zJ%ebis@xliPqp({zUNBus4&+B$UCf?bw> z?=j`BfpAd!PH0GEZ({#QOe8}022DFdjN7>r1>+#YNx8N~-Ch>MOa$1oXLJ^+fnYzX zN2q#q!LK7P;emT`$m?iP#g`y`%n&$5_LnveZx|Vf@DrRjHYePfu$2S^P;SzqhQ?@_jJPV+#OvVUBC#^{tf#7JTKhmpbo z*0%{?9m=_`U7J(dmQ1Ttz1DipmMhlM{1W*irFtp_D00NJZ z^!dtsRQ>V%#%PUTWr#q++(26AFDbz*?&M2I9(#FOH=QNf{rZ&8hFfHwUYEfa++?yN zpKk)uAeK1v3qoQoTqe-JevS*OlYOQsTo%$vdd>aDew(H(rK2EhndItZ>`A8wZ&DTX};ZNkI3z|(hq zZ!GUs&xYmF{dfXN8(z4i*Pk(z)DLb8ryQ4aKV;=y0LTioDvT_)w>Z<9+27;c8ikbS z1dVJJuFXfA_}Z1=axo*#2WWbLU@3TagN<~F@RC{s3{kPxPb2BOe3lhz#Ctf}c)%X0 znZ2I-3F%P!m@z~gaRRRF1&{dh@$mBl@w|fY4kn{sF=fv#VSSdG3KnzjV2POrWpt~_ z^7JI^xn)vwDJn=XHVmkaxm{J8co`a-5v;s+-~sn1XRM!GZfH0t^KK}5ty>Hz+wLmb ztXTwVE?tvCwDo@L1?qwPQ1(4*HTctnhwx_y)8MjnK(pu%Rk+uF*|g;!g_+_-i>ylv z4iaEn9s)OohTedw1Y8=`vm9RzTu(9+Qf5XE5wQs#2Rv^8Z*qOp&lMgdbiMg}J)JmW z@Wf26YkNh;zZnmp{f>Or%64hW*rI{2bEH)m#$JB>W|vB=mp9GKbG$rqoGZstAkt)sn^jX!=r*u<(?H?~vy{&b=XA65`T3Xcb#N=R zg&wus!!*ysIoUb>{waDW!4Ji(43(b&gGbfI=aXfmImvJ9(vJKlb1&u2r; zPy0M3YtBmnRVVfjxpdP8*$A5@=aTpgPV~a&X78N$A2z3HazQnFn&!lH;iobGE(wX* zY7P3H2eJ2=q98AhhK|`1H`YN&U>Bn11#UlNb2Y;UB`*))ND1K6?#G1q)dnDn zifREi_l`v2=jE9RjjaPym-7vM2Pokz`m5R}iyRM96sJfo!&N zTx9PfROw0_)%Xy&9%gxg0g1K*I64Cs(XN5n;LwZ}^bfv@ZgqJF*&7N1-Q*IvYoOj# zMXjYqkX|lM&ycXUmS~^_asT7MMQ_F7b_!=uk{kqX%>0MGX^#32wB-uAXO$qU=)lnL zbf{}k!~k%Vy4J9jwtpO}CU}mUYEo4PoCk(>K=kzwk?0$*^n!H^58cQ7iC0~gIT$-Kx13k5%I=g(9oz<8@VgXXthbo%AFq;x5>Ee zr^EmJnxdiAtcujE3e|if=rWeF&gc77tT@tpIMCzsN({Lb(-u{4^K5f_yuUMJgf&2s z8*i=IFDQ?#TKvuc4>4pwYtu%Eq4Wpeslt7{3&pSN3|aAZGZdpl37C5VYTLJS-El5u za%F>p?y^~0)oOPF zNdmA}(H>aj4G12?GYCwBtfP17v@LN0-F|5DN75M5QtciZFgHMv5A@M~W%(^6@%O!)s^zQ+htJ4&{0Erb4 z#9Oi?We?~oF?$z|WaD%+E7zCq>F_Q)sYmRH!|cxJby^~ze6Z5kFVF(G3%7Tl7dULR zZ}fd1y$-$Ge>24}urvPa6!U*xmt^{11U3ire{4TJ_Rx*2d1j0sh*@C2}4}odc^v6ElF|*A+B`Q5-d$tM(G0qN4{Hc5`K;aVX8Ant03i==f(rMVl?l< zs^Y*G2U(R)jvF)-8SnqBXg0goDqN|J#1stl=o z3<1irS_ue)>Rky~=%LQzdkNI9D}!o|<`x<2SP7Cy2C1?u^U9FtCd~swG}5||vn(`y zOc(@ddz+l*Vvu23^w>nA5C;y`RKPfz6+*xJ=^^2mt<)@;$%C1kJE#6~6*s2_#lM(i zw91{Yvz^z~NH1oXPVC zN-^V+IT2VlI4c8q=TtTO9ft@9{myvEdSU2;RJ==mG*p^kZwXXOY`v3$R4^}_o=>t) zhy}!X3b<%>n2}WLCB=P(gSx}X?)3g7+=AtCsJ~>xw0@VKlsQxDt(Re2VO}Nh$_z%; zgE^koL-KNpzE6vY@w~>Xq~o&gnf?e&|~Tk#SbiSE+JM>pNG3&H!o+qM=oe? zsb80qw=I7*z%+TkzLNLZs-xJ3bw>9479W>`KN&haF{-**YYDRGkh)n3(9DnJ?4$)k z>g9g5e?8sWy<50KSNq;9F7Lj*Z_*9#M09^Y>YL8+UH-%OY~wQeI*7QP#?JY3^J;VV zbN|w&RXsWUhkS2sf8D#0a?7;KH3^U_#QWuZAM&0H0{m=zbo~Aa0M*5N$hzN9&~#t& zR`Oc%E_`XWP_q4ID^)IR~oh$Hk#hBQOwVY8@N?0gQ< ze*l{dZH7+6CsDIF`COu|5m)~NN(}#>b%N3FFzKG)CCqDphk_RxT^5}d-4=~a#3kwy zae=UZv;!S$3|b(=8b#@ZYt&rse{z*3q`Nh*DkUW;|?{S$?jq zb9~0Bw%pn_wdh<`<>>tX2ef>3>%9r0*75Y1mf!kcZ|*!;PNl1Jdlshl-{7e0%U8(yPClzk~QT`Rt@JLiF&VOHTouSb`0e|d&t^I$6?^B;v(M<^ z+gCZ)_hz+aJ#5_V3tTaYIPaFP{zts(ZqLkNFe*bE1popeVW?^qL_u<{m+h$d18GV7qp$K?8lU|AZM*U>ufgr> zE7$uHyJRymL{rMbqLGH!vC01a&&{8E{;DS14Ety$2fkr))__YT)WvTuPIv(n&*;JA zdAfZ)G)VvegJazuP$XPFfdny6O(kl??mK=MsO&_XI~Mp2OYpA?Vg@1S!8oyGW;;;; z`abc@i1qHwyD)5_5Tn=OuWIp-Z8QlxYo@?;L%_EBzaH=fbn#}K3UwJo`4y!s!@#Gg z4`-^{%cA(t`h&a|HrF;+*IzsjZ+lNQKCT_BauF7V7FI5Pu6rcFMCP3%=ijIj$~9EE zsFC{PR%}UKAyMtyOZy!vEBH6%XMpFiqVNp zsmGUB_T5619^KuU*dK#;_E@Hxtt$eY!+w38f?pEZp{>p)GuHUNl7kZbThv}ap`1!G z;BMsA<%KxRTvep(2qR9R%6`FOT=VX~6 z{vumO;i=A0{)1xxyOUE0Y<4rL0xAmQe6_%PTJ`ciu_9DV`IKWo8vbDBk&U)BA`(ng z?2GDJ&ZyAa4g2RX)TACD{cM(+*1b0}yIsB_RZLJ44Ve!Es7anww)zZ81pHD4(f$fc zV{QjHRCSf)xo*pHsv$Y=%8-6}O)K;73Q6F5RLOS&vO)Go4c)KqCfTxK-o+WO31K*Y zlBPc7hscpH!B2$&U{Y|bb&qE5CYYsa2`44ZYn?O|q5L|;hd~$NY$oKQgP-B(ygS@I zJJxxoE+lu`C#Y}&;flwdzMS1W-}kOs-re`Eay*;&HaP^ z01gHU2v1WJvU2MJP|{AwLyVt(X))$OWF#SSIyV+I2qSoVo04J;q@^TXR%SY}>YN+qP}nwr$(iRQJs5 zdA;VXp0{@X$hGmElldnjPsA5-e0#+ojr}SuQ@;q;fO3QIZq3SXK}GheAH`U%6swDS ztT3C}^g&g8sA5PG3R**o<<`HoFpgzn^mmFknP$olQDp{H9DZ~n0vfeE9G-8u&=Q~i zafUwkUYj)lUb1D@5LF(E88K&>w8_Uj&Z^tc;VwpgGYs(Y!3nQk!?Z{w<(hXNNCHreJ;PN5z3rw6{~wV1B<&lvX)$W zRQyW9SiN+tOu$Ch=H>PTwPNYmSka+K32e5$eVu65X}$<_TO2QOLg~*<-5>Dr^)ZZw zf*Ah^+tLXu^;8rkODF{k(m>)z?NhO+4DkENcKbAuu7PX|$iiFDBi-Kd1**uc*VDB~ zh}GwMpbjRfvQGQB^0wmy48J;nBeo=gn8po2tp5*=g7#5glS{AQO}5F$bD zTvLYKNUCu26^L&oJtmaMVh?d#z9axkY#r?WOb0lg>G7pm*EPEvgCV*@DpqhXD%2*T zZ?5CBG_{Pujv&wl`BP?~fDRpKV~I;|slpXZfRw3sxgQy$bkVW2)$daEam`o{s%E6c zzVh_|gQa3*6d6@gZ^z40-QX)QY9If1a;n!ZXn`8*=otFgW(+-S8{cpc9F(9rxR7l2k-apF%o|njN5v0G9MH5n^Jsdmmok;jh7|5Doh>UP#h#IyV z>_(PuMnGX1;UeIZTOJdCA(@b5N&4yKF$M+W!s^*gzX1ngeS;|?J_G#g6{+6eiR2D+o<;M^IKzQ$q42gD4MbE0|L1}dSImu`3GbJ zP6^o2*5Tsh&G~0yCd)%R6ncN+>IJ?z{KDb)GI7S7LpHb*`N#^L$Z%~ek%V6H^wY`5 z28kO>^E{NzaVt1NR!IDJ0OZnP@_;KW=>Wi>g^YobzZO7&?PAP%l&{M8d05$@HP&^V z$h@2T_uzB+_#H(yMhv75)@spA#p{d; zw?R;b8@EXmll7W`!IJSB$JyEf8a0P@5CxW24?yKGNMpoZGkR!B8z1OevEGpRCCJis{D;FEN*YMzNX>%d^ ze%;@n|9m{vj5$F1a(cZ#3?6sB)_b4cJgi=Rp1#5!+N(c68ad(X;6)6P-kX=188;hs z-EM2P-aHg`ex2W!j=s9B zKx_j0^;>%k^%n*|(T#%Cbb-c?*eEd9IBo)U2Slh+t9%eNP`7NyCu?35KXJ=`C67)5 zC9$)>L1dPd3#7|rYC=|Khxu1OT4LBi?jE489^8g5SrBxJM;szII+|ygI((2TKV+qH zE<64JeM4InK0GwO-4juo0l&iCirFY)ADwiF+MN)wOR$d!clg7)4;{1&ybxfWcPcyq z8Nn=UfUbuhG88wVLO_!7N~jD|giMTHZk;p#K^D^zbPxgsCS!CS9;pDfs6LD?S}tDV zUIXw@EK?G+L1}q`lpxz2@tz2VIC#@SD^u8_&rU4U5_}Q^YiJ9laMu85+z=u`>e$AK z;Sg|MR6%XPNUz+{-|A>E&|ibGOiJ(oI^_1fV4MUBhF0P~HO335wN9qbgno{t<*t-% zAVz^J#3k5raN3ly8%UXmV=IL z58A;r*?^!Ix{C9=1toBnlSphY%E2tz5T!S~O7pYEvj-c@wO>X)1?Biz%WW?jVTEst z*Q3~E7HajK%S0A9qrpeq;ysfJDRo>%Ue!8>4H3AY!Dra!y^snkb^4EkW(t})w0a<3B!}k6mgB@%ysDX|ZxRnYccU?wa)VljA=b8+UVx8kk zItbrs4&LQ^f(;*hrYRfp=SNWXv(0@O*@VWOSbL7#jodt;Ey25=DFfb1hHh~0 zLn}>q9>+z`j{Ih=0Mn0qo;>?SOkl2J1F?VU7D|xIO0J)a-l{I$rZ=)GR47y=oF{EY z87a}_!VP=Ux9IKe{XQ3@LorJzxtJ{w9kcWVvSkg800ICFvT!9GzAyW;aWpboe|Jk5SCfzJ?t6 z2rYM5I7s*~cxN)Ib~L&sl57Y*IZfShXZPsNoy*Nzd|IN98t zuQv}bkKu-M1lh!L`f*GMyiSF0K8g$0iG#b_g0IKZaL?J*(n;@gdyUyHI#{TxHXrZH z&)M4!yRS#M+PGUh-X0z`Tj@elTJ2W(zwDq98Oh(}zNJNY`G~NwW$@_u)}^$A8J3Ug zqzc@D<2*4RbN&v-a486RRi3F^!Oxi6-vH*G7sAwvhZwwC@j3yo;qu_|hDn_VX!EOZ z11C{?=&<4QcJOODLg>Cq;P_v}p9J7-b}qqy&r^%d4P_zug~L&Y{Dv>OB$ZQ=ue&9xkPQnJ`|sfk;P1urMGCe4wAZ?^iLYkB?VpYKmVN`3bSd9dj^^Cr+- zX>lyk@`h{A;v{vJ+=eD+4sjK8_w6~Qq|5O8%aMWrB2lyWG za2a;~puebWDZhjSKo=*0p4wHq-bLG9JoCPPIoVA}i}NdiWgK0ar9J%_SEVlSDH|zi zlt7vrq)aoff%g1hb8`Fd(S?R-xsjNC5`C-8Th+!#(;k)MBr0at`}un4K>g`>xP&?c zm+$mtK5zn1%ks;!=lY-NzqdUk4;#(cO5Bc%GR$x*pH_qN34q)zmn?PUxJn$<QQ!#0zN#6W@z5|Yg6G<<1X(*i&J8tk8}%R|VeGekZT#Dr0J>9%N0v=X$@QE3DGL0xkhCEHYer81;vfeK0E%F1uX}(Q zkU5pW8Kq%tetBU9zfgD^iTiRn))~VL6k5f8zDK5FpkF9>r2s-8GKnk^kU12VC1RLm zb3tYpLo$E|rjw;Ue&96=f%Q!HOQnTX4gYvKNMYj_(`ZO(w)m9^@G*Dgxm@CpqmPO} z+Q6pZ5fY*2j(|)4MWf)Sqv(?>L`)+|1PvgLmX$#WibcqXfHw#rA{<%iP*dFPE>q`ryVxfvO?*lqVk3GFLyi3! zER6UlnTYuCOy_UAbingqZi2BddxGFAc|Y^29!4k^W%jS`A*t zNIS#@l_=EIyV>{&#Dpcr?FUCfNASyV^Nmk!>UF3N>_tFYe(PXpvH=+JlfNtqc~o+G zeq$Uoio*J%qi8`{8reHyRd}yWY}3tKcY7je=V;)hj*q69QPl4}^t6(1hKsmD6Y=@9DCSB_BVw#`VG-;irlwP#t07 z{KID)8t5%lhP~8Fyc+EgT!f($tZr&c&ebasG@~Ts_2L22)6y~xZu55qjC7tg6Lz-I zTbVjNvb`a&v%Mh+D8P&APw*l}Mj1x=pJwxR(u(MU{1M8mzSBYZ8Us25?R$Pm?l)F0 zpe>&3HEOIhI66Lzsl8k3amE%Nhm*{==t|77vZ#vdXd*92E!}&$GAiT2@3E6zAD^84 zjgx&dHVx_)n6L>{r#2JiBYDFNL(cl&MUUfI6LA>5wvwLeM?oGh_5xirE8d@e2>fvf z23!WWC?As_lmo91<11giIVa=Ch%{O+y(k@a%jE?7V$*k^gSS=97P|`k$K};-shKqE zJWeOf>)td>?-RAg1}uLb_Y~nUa{a@f**s{f+%T{0PWqAm+P?AhdPH@wTHZY*lSml? ztf4)>mgD4UCQ45)h3>};rvQw3uJRqA1HE|c4g{x9@$g`mic^u;@_1yE($rXE3Y$i? zP(~B&^tayxmzdR0H1l3>&KumMz}$Yr?4o`L*Fj6%p~+D>gpsGGw!;V2P<#muj-i>9 zAa4Y$)LpMdp1-55lq~Fa+q->0mLf@m;QuvnjQ(-crNL60-jf>%uu|R$&CV}BT+b^f z-siE&aYu+FuYLu=ZdSY=W>fgoSHZEId#`$gx147&8f{Q@vFiFW0r#NDr(MFiaH$F2 zlEXM)!vSi1gKaOXTXts`ZYLWP1QUs4DM2^!Z5t_}w|)8qeFLh^ zwd^rZmQ+Qh8Ns2tlIL`{_0PRgYC3y-VQxB0^ytMsb3+CazKQX<^#0vZwJ*Pxn|^Z6 zI4t#RD+=^s@Q5AIW&FX7h!EACm$1?lKDhcp6l<+yO>6WoTj&8>{qE*gE?))FK^H(|^7_E)**ci}2Xde@Xl(N^61<95di2} zdXFFXm__;45A~57tfdfOL9%g*0{Yq_Cv!)djAm%s*opfCEMX^z6V`%&8MB;<=~2&1 z$fMDEro}ATWaLZu2_X~sCtW2#kCiNe(ctowFnWBdso~CUbT2JAX=4o3*_yJ3phMQPScG>?eO`04kZ)JZb9Z4llWN1{fH}ED zl2F}F^#?&}H(UVppS)aAQTpL;fYIUn;SGS>_84#Wda8T^lR;bP!GxGc%xYzt9hE;M zDq%muR!v5Jv25Xw`SaDI9dI1c@>?#I7}c6$v;9I9|3n)x%`6 zP)93{9QhmZ+!r0^GHnh)t16-2JHMN+`?^RZu8pbIojpUJqiy58;`Jv?n^Pwzhb zSf+jMPo7TF@^D5id%vGv9jDK;KEvTo!(AiBNx6Byjh|K*TW`<0*xJ8+eeBYAoMXUf z5-I76VF^zdgm&uAEbk76+qfY~ZEtpW!WAd)!ev`~a|$m#4Bsp&v%WlU%lnuU{zO?2 z-K@t=C-_qx;1Q!jWm1AAs+@p_w#5W2nY`H}qU@mJ%OhIihpOpMb;O^rhd~(q&AZ`8 z>>P?kr6EeOt0+n*4-KU6T_9j;kB5&mc(oJb{~Z^D`WVWu%1nVPV?qukY7)LFcaSK! zSvQo>&u^>q9j%u*mMG9|5czX*kC!1z`UB5l6hj`?6C3O&ECbnC8PRSOgAvhDcPc3( zuZT-~Z`49nU(63Rj*Psi=~%opxq_a!mQGQWP<>G3>?0YD=WF^;+XBY8AuU%D4e(%=A16Kq9X)P@E~C$CRPF{ z)s}z>5x_5Jc-K|t@NEoQ9SpeqVCG=gj|fv|-3|zM7G$IFrg^Z@f4UsJ+q_-wU!VHf zM_4`{FZcIfcWG{(?xwrBy`GP5pKh^CI&AIT9KD~}{H_zRNp;*eK)W#9Lzd1d!Ieda zDSa}vcs9IU?Ejho?;e)hxVe8l(sz7Us%a7WS@WJ=-FiH~4ElA$$`ystK6i6^uvuHr zJsoXN<9fG!9(^s-B`AalTtb_6bb0n1UwRbWve=E>K-DxeGVV8Er)pA(TE(hgB()@N z&Xp%Rm$xWx+BIC5oc-T{cJ_b9KWJ@PtbDe=wh?=1|1t4j6!t%J+W$pi|2Izi9~AaK zaoS#kISCsC%`4QllY+#)Vf-UvNe3i0FP(=VAL*i?;=x}WY#)$A6bAP+E3Eu+Ha6cBVj) zN#O|$e1iYn7~>%hr5nq!3_@(8`2bfd@6MJ!u3`#^??#h*Cq0gF@a3cF|&0Q4$MbMLA8r4(bv_=|nWk-uF!K&5| zS#E*xXC(l*x}%wI7B(Ui7;;mB^SI^?Rg(O+6jSC1b-l(2St-b%{@US*YSal_=D1G9 zExI`0N7OwjApodoqW)maoRh!gU@eO{kgzjjwTG1<2hIP*c&gnQuLvH~tZqbF3Y?<_*3(x%#T-rU$BDSZgEp$z)pp+J47J3ir zWk)u+;!ZYFKMmH?cDz=d>zYaWsbzVHAR->~_Osjg;_uIWJ#ZvzW|+DsEhsck-Md0+ zF0-U*IH{`SkN#Yzv+A0u8o4U-D1u*m+a#~|;wc-ID3VfQkV0Z~IwQ6yks5W*f3w*U zwS-z&l9{-+Zg{T4QdSx9wdPkYIK zOtdXoHLXfH8tSsHL*nYnF0rUPoi3@CM3leTqjuCC&NEnTazG)gI4OHi=^f&XHAa{> zPvvPxm68zke2MMxh%ovd{VPC8|C51Bhi9#42Fb|@N&7zmN;>v`0+j3wbpI}(yj1^B z?yc*(dWW7pL;y9snwL&TJr)rUOkl2els|aUj0#+Bl4^-?`0M$#tZj9(eRb1HMZzwG zNcOF z7&YOB_{vpfQTUjFt}o+cDko{l1!6}E3Cd%|Kk49#g@|oH2SJjX!w-=hQ7o344Z!G# z2pYNoWlMmGR}Pb*$J&$mh0uBe--|9K(A|qUC7TYypb-X(g-Jt3~60CbSn?6y26lP$DMfoefUO6VknWo}X52zKj&_JSS zghPxzo!{0(NdiKs6sMegzmCXQ3}Ym@gWMHQ8%TJ`mji<8bO_R-jFv+!Oh-YEMs!pm ziUW$uEz$JtTKi3C<;sp6??!|4tYxl&!5f5O9*`c;YhO8ja-R4 zp9t!-M{7r-gP%S;W)vD5ju9~xK=BsQ6&YPH3s05r9#A;pj@M0tn=F$gGVa!7z2NChd)gWKd?t+s4a;k^vJ;6y+>PqK%0k;OB`t!Fb>7Vtujn zv{SWr`&Rm9b8!EyLzDaC>!qmo_htX?{_0ix{$%^-WUGIft+kW)>ZjxLXX`SqaeMOn zcszS?8g&q`^^ggk=fNy4{M|PoCRaU zsdefhgd$PXbfF;6Lh_WvQ%R67;sdEH`4HZ6b+ju_Iv_y)M$gb=$~YWI85!qx86nfJ zQZUqq5hO>E#npGH{DjCxE5aA%huGLEapph>VK)qOfM0RcM|ea8^*YIkTjIQd7v0nQscq%MW>hMD{8I!D7bT^{UE0DW%>?UndKz z&joO{+u{#jla+zkAlEty0NMxzT#~Ih7lpDhCWBJ*`2&25ij3VF-;;@0CqdSeIgoBL zJDbou-WUL0l?%QjmEAnkXD>a?ssfQlg1jTu4I&`DRZx+}fC^_G1&>)oMUWDa2oJRp zz4y6zE6wxm*cfCR_&#=pcZiSp!>S1+xf#VsmS{Et`lS z;ztMHv@~`EX3>r0$LEoGkGd>#`gx2D=7b#{{4+BF8t;4tl}U zVV8(d7ZH;;e21Up4n22L?8MZMplcyw*{KH*l=z4-SeEa{_hMy_kWICILfI0;lobFG zzy}FOGxeUne|%1AO>1SvePPWZ#x8=7X%8dCOGk{!X>Rl7+VT2w&~N%(YFsc0f0@dV z8&hdYh)gUkOa(HV@uSZ#1Om=T8m@uv;O8n_Q4eCB;q`%|KF`{R1mBCoVIoY?NfYe_ zCxIum;G1QhLGk4A4*~IA2bJ^5cITKGjgyus!MSQ@?ZRst*K!KAguF#SUYPd|N=>DY zp;U^3QlgiU1`EvT)(mBYRN)tH00fbhenuz5OGJX43UOwg@$uWsqNcYXiy%f|K4-L7O>#hBe*S22y- z4fF6J4BZQS6YB7I+WK%?D-#xq=QnKiWh>kdp{Y9*fCeUZAS>}H^cz14Yfu7DOz?pp zlh?tKH>bO|2mW~mM*_bovbd_w|KZH(T#yhxBY^VlZ`5TTA|!j#p&lo7 zCgE9Q^UhC|n|${pfI37Ck;vP^$UPu#^5TJeO@K6DTE+Tp3e3D*v@bTllHroyy{yRc zpfL}JV3YW1EMo+tnNNKipLe@YgTic&(ZSnwG4B!ZHnF+)@YKZ_Lk<#{mG~YW?GRn? zr|}?pTN+^VtOr#59+{=cfY21LG%a~&=cCwiQd${f=5tJeL$Ztl;L~pXkaO46On}3x zND?8^dZ)<3>c>yW++LB zEqG^_>*6I{lMq0i$0D0y$lBDL>T0LN!h196Z%~mnCI4*J89`qqoCjjcZ0t=L+bJFJ zDHv;|ZAN>42a_)vtg`wEad>pKx!v1Lo=H4G?{__^2RlB~?OuIHz3J`b1gPnMsDk9R@{{5a4_6@O0lMpS-(oSzPs&kvf? zZb9H=TxQ|Ik!n^Pi_$19aVU7uGzX%y=zJs^wo{zZLN~qd9=W`l!725CPiLiXo_|)8 zGVY~(Ga5O6eifgmKU+_}1{gd`c$O#AcDWO3W*!4*-*Ap8y)8eu$H~BLbrP-8K=8qi zbmnR_P>sS!XKLh2V~{F&5;$%Ed#}5 zF3l}SJK4|Gju1_h7fLvkSFruUJv+0Xkhao4`%@aeT^TuJ@~Uoa8D*J3v!6kVMOYOS zdsyH!QG9$Nf66qaXxCd{UYC(QgB3dDJQu8I_L=ym2+J`lfT;D7*2M%td}t3KQg?7C z8gXDpu6-9QCrY#|!OW#}-KF3;%k-H9M;NEERFbx4Ejs>8&mrl&4HlFzP7K#u=~+iI zYg20=843nbDaDQ9Yt;WyH&vS!H#iM|LzD9RBquF@Z1_id@pTX%N3|VH6tBu%P9~$8 z=T<2tZLKJScJTtF_uTPL9qL`144!c@7K(@q`? z_V^~ETFPVAIb8Xdic>AJ2u8W`FPS{gPj=Y(Lc^UM^x_6uE>}9!>537xq!O@a1Ch#M zdY%y=i8!5^+w2rf@WX6HfLh~hUWp_6x#Z=L9X7MGyVtlGauyYTJV!TG> z?2A>Mh?(oLQ<$?TuI8(e{+d`5&h^SS6>P>+)8g0ouz5aLvb4|AMR&wa;gj~8iD+Tm zhD5B<_wcr*A&Pc=ai8hjbe`3CdZ$*EOTJk?ROHvM^VZM)CvW!VrnpO2oON!K?_us= z`3L!*$(CXr(P_d@;fW?A<0q#~23yo#;QBPlHfc%@k+LErG76ZbCSjurix7V9pB_^- zw`Hh8;iYSnZu(bAW{JoTS_xa-vki{9iS%irx;zy5mNXU;lIYC8Eg}OC$GbxVHC3H; zk-n`^vwo>T&!zk-_PBChw#*E0?d{W5h;i0j2{pWKsfja~Os=|;L$@tMvZhjf-qu(l zekz1=&kmtcQJITdOiT>ilB0R9tyxG>d18T!7Lz*a)aV!GB*FROkpa~P_WhRJxuNC5 z;QswDu|50$%Td$gF)*^R{X;~@fJgr$wEC}3nxF0eSixhUXJq-`82|sDuQ1VOsDSz7 znya=UZd=^DnYnjWB_!sv1HX~mVs1-*6}We$w4oW+j_lmtApFFAoYj8ye6LhB!Txj2Vl!T0o ze+WPVOSr&KOkkT3fI0kJ04*k>i~xiPhn0Pn2`45vLy!SPV_-(U7R{jP9Dqmsv3$*} zn($Bom~WzUemU6~(EZ}*NaJHEI%2^~Q~oVmQ<>h`TAI3V4NViY%?p53^LecR&}|Rs zqk+xG0$Z(%?d2av2V~&$H%aF=n7BQ_%n%x0KiM?63_yDa#U$W@4yF(O2(*bI5J38e zuZ%K^vMh*58Ce-+=^Pyp(*$1>3$J+$Fu0BZXag7qyWa&i08P#^8?XMp_W?CX17Jz2 zuNE#ZCgadDvSOx%W$)8>g_we(q-Gor9!W(G2`qr=3^386;^GM)q*?VCPtvw%XBU9T zI$Aogcl&sFIYhZBWoSL!=M|_A$j%4G{D*VVw<7GJIlWJJnX4mnEtvW@1V9dpy+gyH zp`M+stuB+JosGe-^>l_cwb>8Y93!JIHQ<#k#G5w@xH_Ou)7tpRTT1$<>c9`c7fA-* zsg0Ay@0#h8le3p%R1{lXde_@;!>`PoR+N!l zIPLD*2yIc8W;-1Zm?yZvN6P(b^iEL659h_|0k$uxl{4H{04&}d<(zL#ocK}mC0L1X z&a<9}c0^DJArNLzc2ikf5XD;_Rlmz`AR7mU&&zl3gBRRNMqrK)QB^5XQCJ-qre@bn zj-1F@bFU~~VNx)FQ{2sSU;~M_=puiB>dKmL&9skhiKp+XD{Y4mAMNqk#=9G!wvXo> zAj=G_jqjmnZ#mNkj+-OcDA;e_U!V2!O4Vh`R+E-r->vVLH<)rN5>dZ<2794(JU!{U zwe)Q<^<`@sAIgPN!h$S%gkpW2k@s07W(n~lJc~>F3F~@PR<1+=PMif^I12iu{Cl1`~Afm zd;ZsFRkj+Sg*8mW8*O^4e?Tkch|1{3?8pTiqz>M$7ukd6g118sA?JjbyDH#?FWJ{ z97HQrfcQJ>McmL}%pQZ6f&D0x+M^59_^h|HbVA zWv26PK~y7v`RyDPt=yh()K%?iKg%yaBX2GXC=X38B|N0z?gpywg)e=l@5&<&MgNP* z-XU*)V_>?~Pf3r-h282gt$cQ$iplSCjwI!bZW(qhfA+Lh|1Yt#L~at{-#6P>EdUZy z-k}xMPRre))c{uB1K&jIr_VH>_2?09)HCaPaX)nUtn!taBHcS7AIRc*n}OtroH#1q8r%!St!riB2=?ybh59Z@^+ zi^1Tyz4GIQsG`5&6Xg6IZYt1&6nvhB>DP>Fh&jL#U$vfI6kWIs@-~3SYub`O)_YNk zAG$Rt`OOua1E}{9Ak&~5g~2!RS8rskVN^kgIyc*;-)44wbC{P~-L?GX^*k~NY}(j> zu!$}h&qwzdPX?hB%9Dny)3_%yOvRszY=SBjF^!@NJg|K$qtsU5h7-*%S@^FP)}UkN zdl10LRc2@4WIXKobGhbfaYzo@^h*38p8sR|HC0y<0m66xM{;h)Kxn_bD4I5X0uVI8 z4tlAu83@)N8mw~9j|awtCX%5L$aU96c*Z%Pv)ku^y4!YweyiQ&Dx>QhL+j}p{n=i! zWWb^klQo&Pwb`p?4w$?4vuoo+QU(-%id^WKYgeAg3eDpre`u+b=GiP;R=X>DG;M=w zCQ-Q<)m7#cF!WN>rF~K)i1fOCxef^foxAwT)VSi(R1?BD!WlnyM7A8QB%z@b6G54C zV|!#Kwyp)iKVv8OY$%#=@a{DSU4{?)c+FN?2q)$cwc4fH$;lxP_S|d%n=QZhV!jN^ zXDv^&Q#00t;eqZ+C@j3QBXGVklNBFf2n?FCMd>ZLK%muwdaH~02n#Ph1`-M)KaUwQ z>R;gvV-N?q#Ij2bzVnDGpc+%x-B6v>aaZjsUpk8SbM0Ks^0?}6iLz7F{wnO=L3Fzx zOb*$fa;%R>|UzO)xT0FP(v5WtPO7DarB)7LOSj*^JY#yz?!&s$tcQuW0kY1f! z+OYlOuws&??rd5i4DRp4c3w<`iWMciSZ8;OD(2iCl%Ff!8^|l71Zv1DSKkV&(z{Wa zU`hp4TrlE&1tacdZA5SPdW4Z-!T?EsrIPPP18KTMQ3|CRqN zf2@c+m1;Q=VKvxbD?%W+|6~%1KW0j%+x`qr|$=R}G z^+)&P%^CFgdY+}hzrGCnW9mqU-=!+J!PJQZwHdzV?E%6%y57)T`F;mYe?u!~@&7O%exlXiTzJ$5wy)44nJcEk0=wMRASUIKQ6rz7q zs(bcHsbyL|5cwKdkpcdyFsvfha<4atQt#obD>d+^{ro!7JyO>|-uRpn!`NnHtqP;& z_C0X0-gS?>xiF4sFFq@_L2>l;O&Aqoy&S-I2Fa9;kJ2|<;A51ig0vM!^w@lOStI96 z%qu|l-=iU1!zEmLdL3Nn!6YKR;Y+y0M`6DS5ZpLWv6Nbr6TRaVe?5j#_kgc*Ux1`5sViat<%>jIQbx(bl(9@imMrgWiVDC;Uhp5Qx4KksVNbZB`##L(os=wTtKyFr>)ds@gvos#Vq41E+-x8;?qv=S$T|vD z0+?=ZmjB{|vBbg3m=P}XrM6Cz)ZSyxFv#@wRnzfi8P|PGi^LhtU4C_9Qju}CP!4nG z%%Q!-UIOg(v+2w7SQkaWSb(Haqw$ZIt*+)NVSveCz9xFM?(Z(yW8T&RD8|Tb(YN@x z6JxXM0b(cb3%;9#GExi6_0W!Zgi@W64nC`Fh@lg#XLFf5F8qZJDswGGG}@3U^%`S^2%5cCO+6Cr#D{c+f^&797C+Ld>11fbK5@7KOef7 ze*S@Io~o!A=fARJ7h9vjMWAyjAgw&MA6T!2aOE_5p1HiU9k1xDab`jpwcZKka-HM6 zYh-p&A)H{Bpvd!QiUbM%Ld3;2Z1Yag5;0`FMs23u2+TW58%m&~kKMsbldf0>%9Xa= z7Jx}qX*<53gN&pLR(p`xoT}u%L|t8TO+8+_KibJ~BUjDSb6m2QBOMJPgW$tpd(uQ# z?5j9kQ1VNs+7Hr>^)!UKnsd92SLgc8DMTK8)nS-dVd0BcMDvtNYq@BtXS9|<1T7A_ zfH$)KxLjw!HgysWO41rM%I;A`JFt_kng>l*`CNc4PqHSmUYw$3w0XF6UbsiT7~Of8 zmihY}Z+DcCDhC|)&}IS_TL}5k$j$;y;qkbGBVH@;u!Gb;dT7H=f+Ez{Imf;en#d|( zNn?X4I~o!6RT5$!Q-x4AFAZ6nX_7D*cpA67sXRN}8U%yPu_d%4Eoe$A+KAhGy|}ov z(@mhV?>MKVwE@!3B|6JG?iaZiTsmshu`|xWtE*+Wjr-1O3?m}R)e573QxTAI6Ay|} zfG-I=l*rt8+nx(i-_B~oIq>{8UGc}Fd~*;;D7uIgvHZ2-Q;{v=ZW*{0wT`%$ zH8Yaj?CTQHwlQ~5Z#LOode#*R@Jp5=uzFBxoN+r2Y#9%Ie{#i1F7G;8rhyr0)x!|10^*qI zKhy6U`52K?k2&rod1w@iy3UnC@D*+pV-zU?)t!F}uuNF!bAWQY0UxD9xQElCDP0In z5nU-}+q{V8UO><<#lxID{dSmzKBWgAh7={Irt2`_eUsY)dmKtJ*r@qUhBm(Y0?J#C z@f52mYm=T82xz)sD(p`UwF(@1HfFKk&^8rinnTJDuerh6bjcz9fJQzC$Wx^vu}DqZ zG##2NM#&hdNrZAYRC*#FumpMsE%b+NdtkFu0JT8qelGP&0G;i0*6>0gr^Da{8!ox2 zWS_$}b+5xo_-L#fGfxe*F_A}N&1;Um%1YKXrUdX(u%Em+qX9AXPa(Rz8C6NLuC@1e z{2E_=F?7P+0L)5FOIsHTi)z9760DiIi1N_c*;Tg?<)=d$E+KhLo!SM8Kg!zpp0oJ? zS2QIBVdHhQ3_Dq4?BU})JiG$ScwNyW;gWb3vdf+C*_~3*n2!L{7bBL(DODU=992@L zBe~`7L$7X6SAEF~j`P|{q}3LFc)M=H$fRg1>H}1>k{rN55CS`Bk03Rp?nq%;FaPWb zW!!aEl9!;;1Z>^R^1!e=M3uJn0^BEm5T?*7dn9{v|3Q5;p=4VELn+f5=u3pE@s{Y! z^C&l(gwV`UcC!xhGG6 zp^sa9G6nP|f4n)UGg!x#Y5ElCDQ&%jtpovJ1lfDjm6X+95cw#&UcRo0y;S9tErC3z zVYg#{FIS5iQ+`p~V2l0Y!FFGBl1&jWadPe?aQ#jMu|}_^OArdJA`Bn6dzX&+wXbSC zkwVs^Jk^|25x)4DR+-gVQ3_xK4uHhIGPR)%>^W>r^};WKA;8g(ze5%pQSGd*TQhgA zRwD@z{s>Cx@lH{%KE;DP^eR|QUUi%2dvwEE7t0iyZKy2oRwiDga>v~6BX-HaMLtN~ zR*4Mjh|`uHaHDivtfoAi#X=>Cg*bQSAvUGDGRkiqp@zb+V|(J$y3?LQigxFoCirHW zkXb17&@tItoG;BDAblFWWU|?6Us!dZhmyz%3;NxmB!PEF{)o~NFrZ*h#L;*qII&9* zYyq&sX2-q~3a{T5D~}3_4ed{=ciU?d1S?xr^jMTxGpSK~Tv3_L{lt%H_N2&|p;w;b zPTCvV>M&}Lrsg&DYUt8ac~u%6$ijt(Uwv45i<3P{6gol>zF*^6|jy zhl=Q!2TkpzN!=?rXNfqDiIpl1eFVmuIZ6Z)-1`j2DgKPuXHu`QVDrUR#`mi1XpVs~ zAH^?OYjFG5WgjKVZj)G& zx^l;x!2C(9NtDF?ar=9Sq|z^&d@~;`Z1^hOQE5e#;6gGebWNJLw6bfk5FZMX88)`J zi?=i3U3DBDTLoVwSL|KuYjA zw4+iy1o<+3**D3Hyt`jMOHTNNkZ0EBGFA;~=5Vd!$&%O%AyF5F-=>9gOtF=Mhf2ep z7^ET;nAPSvce(z-u%P68C5<*v(rnMQepkk$aF{idOC>+1(jLt{df6=NXcqO-aCY}_ zYG?inn{)ZeU|MqFl`x0(!ic>Fl-vWa{x)hM^izXVdJ3jYiO0VYAh>{(sJ=0RE*sk! zl2NV2J<5Yi*Wvbgl!s4{V&9EeY|vG%ddRUuLxudfixnsA4^c1wdcx3gZ5UeWrt`~A z8o5hmgawQ}{n@t zykw$OJ==T*U>gZP2M?xd$gu0QAW2(XVQE`fPvJ=&n+PSdcf8CZ1=BZb?dgmEMZz(b zcn|8jd4x6rM-J@RuKlAKDLZ3}nAN~UX?f<#g6HUq>|P)uO)9KTS73BmzX%lDjU&L- z6f!3C+D^gPjrZn-*q*UTf!p#iQEVk3sCG-KjhhEckw*BO=Tfaao%+CV7PZLqk0WFv z69U?Z?3xc{LjL;V=uy|q1*ZQHhO+qP}nwr$(CZQHi{w&zbKd3lRj%(Aw%sY>B|bPN#4>^W+QDZm&z{wAB@ zXAPQ&t&iXR9UKFm30ll*+h#;W;>0pM^Ygk-u6@@Lrm8WAFIf20ff_aQ?nOwOi_V^O za5CJ{;lm&k!)r5KW^XDha6Oa80_m-gM)~FErwDC3s8i@-jI{e^SB&^!LRaF5@e-)g z86l<9F4`Yov1!z~zPP1o_(AofEnX*a_V2!e4IZ{$db{j=mD zA`PV>=IB<^98t*FCNloYggDb*I?bh!;G$z{qA~lEGd_xE)*aqG#+`L(9N!V&1qNIx zY2vtsX0!Rep(v#6@${RWx!Fg1=z{w#c}f;jzrExgok&#@vp=#kl-$8Ju0!Dalw9YY ze4wF2EL$4(6B*GG$csHsER^a^GI4oR35mO#lb5u|;@JJJMY~C=7=IP<7db|Ek3&LH z#J9>x0?(AT%pbdbCZ%in{Y-fODWb=WXIgl$kl2r=Bx!4YE}E%A`X0`b-sewh9~78{ zhHC6NVxk--81a#UGydkm_u6F#j>3Z+TI1p3o|fXteajjdIS1hp5@vsRZoZo0q{-t4 z5OQ(b0qpudyGAPW(mX@TOjh&t|0q4x4`^P}0)#tsdEGnSa2Q#~B8}`gNmcYI;<_@l zJV(f2Zfj}VarVPV49JIOJ;KN|sx&etl+IE3aW}%EhoozqZ()ck9fLfOi`h@?$1|g% z#57LuB9bJ}?pDgbPpEQ5bl%OXHEt80P0(9*ww=L6o z-vuHJ$7MDaDWB4JyX3`kvx4m^>6%9#v#rSNqzsE?%z0Y^PV>9oW!J(GRMbMd{3N@H z=t&q#)c!$kP1gN<~0)9QY?M6(EeZ?yef$jsU%z zEy|vupK9?m*dO4lxP~_de+Ju6aN=~WGj@qR2wloXSBE*D#&L0{`$DUN|DR&qGGdN^ z67!V5R(myj2~n&ORo5OC+`rV~i=~+|QE^OH8Rp$& z*#U*egFtOf;(ZwK)wiCJ%WUOvfN8MEyaU0%X6XnwDixvW1v(sz6&Zg`ROLEr+z*QO z+V|T^E+4TSc9)?$sw@stEE`+Qv;TlYyEgB&y!X>#pSFD6Kia9nO!AjUq#2l+%t|wT zuG=Ur;<3%flGfYa?xio6;bjAk1~SgSzYyPZ^?XS19~D-^&w?6fYRy#4c9 zAnSEwuP;lK5_;@qxN7@d1(aqK_L#SGI?awi*5?*nLN|h{fAf+2vaWLcia5auYZ)>N zou@z`9dvE`wDb9LkG$Ot=?1k9Y<#}Owb#l|Qe>L1))NL8@Qbu-3X>CGSBTSRyC2k? z?&A|CF@te!?rVvUJxzrnW1!az0>6%2NHSA!BQxq zKNQp^@5Y9n4tPh3Vi^5qpNY`xyF(5H+fZL8VrR0P*9`Bcr*cJvs`WOU*(_QoRQlb8 zrCDLUlYq$>TZ5Hf?3M(H>MZE*i;?A9fIF|srd~%%Xt!pgR8QTO=-6z?A5AB&Z9qVV z{pnC9#JGy@$TBTL(MiNZ6_I#aoYu9<%z-PjWH{kz@Tc#~AzOt$lH|HVAmStLmWj#4 zYoZQWOnYNIY>Pb=-5W{0F&t;5XjY>>czM@=}{xFE! z9Jp|*c7UkVy4dP9k|0C=FdGNi&)%dAUS0P~hyN2mseecZpt45#3qI19} zSMD4a1WlD#IpeO2nT;%UHIm!uN(;gm=V5tG-2c>zZ~@^{P(nl<8=^xH3)@@gM&l+#n@H< z0`p~n`kSFDSXCh!@CwpnP4)0!Rfo5kGWjecvm!Ziel@Ej1K{6hnAa3l&bU%^mW+sr zV?(to>O7RTwyw!<5M!cXhRDDYi?#<2E;nf>y2EiE{445_EfQ1f3IJX&AiXBW`>%t} zu{#TKBAqI$-x@+Mwim`+crt5MWO5!0Xjfpj~H0q&7WCtgmr7A zK0e_qtuT(aAp22QV#Z{=ni)b0+KyGze$*a*K5+qXZt~V}(G)`U-ed}%)3?UC*xn_l zqwGZ5y&ZTFVf`eow0T%<`^C1Rfa$eW`9_TKWWSS%jh8A&)(y~=KIJ-1he`gq@7zyt zh0~E^6+6ad`T`HMXVl_mLgcpAK+^RN8zGD;q!q?fH&iY_Rd3PG+qV5gB_R4AuunR; zzRbsm|B5Krkc+eCZtU@WiuB_t8CVl+M8a#wsgdY^9h;A=jIXBoUs!$LyJoC{PVKYf zNHysg%fV%_rc>yh=~;XoVTZ^Y|ES&7^M~r@$!^9u0-MvwMU&)d`Q-Gl_7Z9!B2(Oj70AncPiF;Dcx3Eq zj%+T!UT2KD)Xo2pHb3S9rDDP`(Mh-B?6>_8OG8FlLc_i~;FV2l@kYGREYd6Y8!G<{ zo6bGys>__*MJ71f+R6pQX3@mMyA2wTTXyLNmFi{S-3Sn#VJd$NtM0_X6sUj8##_=-x4}W#FC^uvV!h3KzikD%tk9p%!gA%WGc*!%Nf58-d^-8b zc09?c&zuXV9Q64`21yJ=dQRP+;%wT{8d9mk$gyRydxkq@C@qMB=jI9vF%xe4QmbixNxS7%yA8@K8pJHw zC~%V@{hdMyb^DQBol9%blbjBSefsWz2xjH_IW z6~#803C-K4_lboe`(=6HODpvbB;@rmTflrB>===I?g#6$v&azV@fyI3n@_FDm7J63 zTca-(A2Tao8ull|PhNmFH{lXT?}JEY8$^PEP65se{H*Vsd%Em0-J0hA7 zEH|*Ug>-7&vdqJaHG2i$r(!Ra{T^+_T8>U!PIO&j|8K8Yg)@0F@LLM++&=NRwDlVG zJ^>oH`r-0Pv}n*vb1TZnBVBLqPk**-v$C8-V2$-`-De_fVSL_XOyf~s6shtF{{{vh z76H2(?KXMz-%*KZsZcKV({gZa!_pEv^naG^G@h;~JUFi?!W|nPb=oy%@EEpGum_%p z#Kir#IWqTMCDu$K>8>PqsA4&XB|%R0x)tfnFzrJ9M0#?80-o#Ydkw;_Cw^WbAweA- zo7|Y%q8Y~UI}EdaL}Wu`AEjFD#Ttoq&|XUG++9v|a>FGg;(UBUe0CK342F-<$&_;n zV+N&#IcDBHZJJ+&?vhux1AFqOa);PR`QZe6?%T4{2wHmgWtUcB5h$M9qe&j)mVs!FXuDOc$nEMUlA5sq&(m2eZ zJKVw2(6!rSThB1zBiX&mGV=kTV1wL7U*66LE+eS^{bE5TCLPTY2dz6rPd-1yGgYB2 z3S@Mbs*GRJk;&s$3kEv)tj``vF!1XaG0*<)W0o{Xu(tNuP}CU%cwCwe59H-#phfOL z;uMOp-f`*^D2x0hkMD@=4UQES(I4wkEzo{de|+*DK${vKwkB8cHn|k(9>9v@J;Zvl z6{_i15JJSKE53VT-xJAdwxsSy1?OrT8CP0DA6r?)QJ(`CN_R>D<{PqoFJp;SI!6;) zI|wKz3z<8$r(qpUD}5qiMxU{yq1H!zB;t>_6M9LirOnmWVs5Ce=xm2kD zD=yi;ESjaeu8GI>5`}%guo1;q!icC#< z%%^{|)nR1&`c}v9C1-vj>fLGlecZyc#yx%=OVGlg^frAz0I@yHlR%j9w~!oLm=rj( z&OPy}dMtOd(43h0yy4CI8Zvl+!pF#r{GiVdYHVnJk|V({`IP}Ri;>3$_Z63;*GduLj4YbdR$t(S8;F!61>ff(iS=xAPnPr}8O6d+k6(1;ZNfyrY zwCzY(80b#|IpAgV?k-KH`9y%HmEGT*;q3SUM!Wh4s+)q3<;n>Lm+W*BJgS6Z&D|d* zLfhr{;a_zgNifZ$ExEHKiu7%w`4f@X>H?&VW(XNOp^6X;U0ywLeqEEHtM?IjDc_Um zoC42TVGU;VuD|ost}i4r`XGrQI8W}hUdt0y+}>$vhr-VKYqN1wNqj|uq)ZN5R6WoB z;e080VAZqi9*tdL=L51ep!qizgJZ$e(3jWRe~x5jT%51W+*dN6;N^yy1HnLxi4RUy zHBU!&(4j67Tw~6Dxh8!ulbn^hHWcB5j_>yjG*?UbU5<9j!;(_zneNJ4YAC*K<0)+> z{h!B%NQGF$%l(k;_A1CxsciFn_~8@z*c6|b$f)bpSNFoh87pF%*V#8|QYhY{>vq%* zI@Bwnox;Z(17C{m+deGGe=k2YF^9F0+S(`YTWtL=6>x7Zs7YC+1O;l+kbKSD+ zVaa{96|%QI=?;GlOJGfH&-JD`@h#HmJ~(Bx@D}FH z${fpQ=|i%VO4!4Eqa3h7kX`m$1(;oDy_frPM2t+HCR5a;yZSRt9PGK4q483_FZ0}- z+sXL2EgVRU1jBsc5F|#ON(=!r_5{B(`y8q;loamoLN>F-xLdW_tgX87N?HsFQ8_>u zttgb97f}4uiKLmBFZn^x}x(t1ih$Q1`Rkcub8?%N2h zOT%Xo>NfxftgS&k4=gftE&85z*!w_O9rm9A-hzf2n$*Ds1Su#n&?Hv@37?_U< zv!rf`cvlpNP;_-?6c9lTN4c`-oUWRBULQ1zWGqo(Yt5PSZSdpkSda!xjvdyhgUO~>>u3Az zwO8-`siDx!dRYWc>YiSk(;si8wtN*rsrSrSzRU5On7bpUoXw8m%Z9hrGI?)}|0RzeV z4luQq7_Sc6GLwUr8dL#Hr&>~*jF~7KSpm@_QfHW%mT3y>l=S^BeC&D?4GzJFX0%!% zR^&1Eh_T|sT$0qZ_Y4)8U-a;Oc;)9ICQk2Z)5TQrl>aq1R~gA=raJ_kXL@yzV5FXd z-M&NnYe1jyt~jFkz%IF=h_^}}CPt?5+5pXVTtdEHg*#=q28y&#!La?R{p;dJrwZv+mBUfMai-nB_LV*wgtT7*{0 zm}}LndBvvYWT&t~UtQBa>wbn%TkGzM1P*Cgj3gJjOmHB@cuuG#Pyh)KXD>Uaqqf!j z9$=q4RqMmC+tVllc^}pWp#)oJTFEa!wC7Ahao>peJzy?C&vg@DcveqZkbCkBg-1;l zQ))4Brdjzv6sgI`2ilpZ1A~U2B6Suh-VEoH(l}3ihi<`G1sAvyXePc%-7O|Y{_o-(8XC?&y=^GY25vldVipfV7wwvH8F;Q)3b_k zdnT`1obvZtTANKO6eW@t*lK4ObxbE1OvQgKv|UReNTzpabtb$ z)9(GP_ptIBXDEI`{Ry-%j%!fwZkQP%FjSVE8vasz1ms5S;s}*EqR_WBUzZ)pYhT}I zd|1D?TT2MGE|IFUjEd&}v2|_@*Qf#KFnzMi3Y#n9fU7Fd~?IoJK0SIxw5}$PT1}^P2{uNDbd+Im{#Cg2`OUq%097e?JsMhbG*cBEi3| zj{V6WXE}ohY2K){_oA}SlB-JBzB(D_Wm#df4Qls)ADf-id;!Cq!f;wGG-wyLt+%-f z%V6^_+6_V)oR*qKmptMWreT*7f?M9zsZaWWkVpD&iH#b)*J3u*?64MH$4zD#;K_Wl z3_E?LKt18a@^Bh}(?>PC9X)~wMO0&A`1-`xHq9^;f zp+nBUa3DR!If`D{xSOXR9>5@Y&F{7(l$_dRwE_v{NR9GXP`!WnM%=(TIA_S+TOBNc zizNk%9TbeoU&q zTyanz+nPIM6x7h&P(QY!?rTOX5(JSIcGANNMOQOr*<9K;=DKuIItjE^h*2EP^FNrQ zPjpI*@T#mNij{d}IU8D3uaUtY6sx76C;c&jkhT}TvqN>vD_kB$wiQC$9!r}ELM09P z#01a1WflBPjoVhqi-uoagsPG@ho=kQ80s1Ru}>>oXYsgPBxrBA;wY!bnW`ycLgg+7 z-a)a0arp(pxI?n2(O|K*zQx@4LLjw7c{M;#XGuw%w*R!88V7AP_Zz_rjMlJldg4Uv zH*XM9RI)tmoS@jhpY9uKpO{9K4rs;EpmJFI{L09~Ar?z<*wu1x4Fm$3<}u&!t#`3a z$vKL|9mKGoxZ)a=twuJClYK+qbF-EDQ1H$Of3E)9-Cf$`9%dJ;Tv)+h+`Hr^>XtKq z7vlqlNHtgGV!t)xNr6;(N-LT@ui;~f-t>w}KIn%jaRuN{Rm}s_<{Gpj^QG%TU<`@d zy=bo$J6%1SFI>C*+#qi{F97hQ)IDA*LmIU7vRbCj1e4!8p!9^GeS7=bNYiMU26@O@ zLAML2i(J)#fLH$dEZ(9phsU+7d|s@}j1@XDyb6}9-;wl?d?ma8F_~J%2J`Y6?;9xr z2ybp2d6q+QEWahp0vBoO-h;PWV3YMd_d`n|ZZ{Qy_e(>Nc8uIQ)qjJH!3}7@HwC76 zEAVMdH!pl%(4TO^Ti^+8$S9s?G&9mdv7PpiU#x3FOInTt4`He~Bf(TV@3-7Ne?Fvi zwk)hJx0ooFzV_$uO6V|hE8xWj!r`;CO1~FvK6X$?GZD#5A945YTlPf)Vn&s!hSKe; zo-X)|`gB1nu7u3{{crt#-E5D`l=QXcEK1WMY?WJ#xq-=JXteTO&`WL5tD^UW5GS_$ z7OqYLy%|qlbCpaY5Y1ZDw1aiLa(BP6gs9w+x}Ri7mj~8$MwH!%TsY)ZT*1@$nU-lq zREGm`^@}ut5!unpU9IVnMh}QxH3xq)-DvgO+ars-?Y_8HKRJIaqd55xgrEnT+TVoW zw_wo^?h9r}JBJM}ojsGStyq|?%>cAd)@ax0zf1(qm*Z@U^y4qJGUfm6tUc3~0n4Sq z3?lb*`N#X4w=AU>B|_^?qhQ}5KJqO|h+OkQ1TuHO0O1gJTpLziSOXk>r!arX*05|L zm)*K?*IO%{wQXgu#Lv)Gb9}Y%70F3?v07!_nxs!B;z`q@6!&8kax_oHt6Jz`D>aZJ z+e$Sm0Q^zwJOM~hE1-Svlqw_Q{Zq2GV2Q#CT_6ejDa1AS?vnbXoN`T@;U#I0yN7oZ zzT#q?m3)QW!fiGY?MZZq855GaMk~Mcepse9&k5XQM{9dGg_U%yai_JZL_d&+KFUP8 z3C}NQIadYQ-8W%@_hoIZTmyN6RSkt@A}?b50;6B9lb5y~aJmi0WkJ@i%Zxuk9swH9 zTnmJ5xH=Ay3+3y7!Nb<0H|XN2=0dRaij={_IPWvUNw~OsHXMRx1&nU}Fa;(gw7GD) zWgz&t>%C3>hl5FqJDoAo(_`PHTD;5u71D%fIUrt&FO6rP;$bplh(Gp7qY*>y?pV37 z1Ws|X?Cb8GMVhMDK&+z@8cE$B&ecUJm-mhJDH(8&8~m)8V@m#|(N6dX3wIX5v0i)Z zY3rpih63U>3F#`hNnVF8L;`Qa{U{If_3yUtr_^NybyAwK+iG3dgI{jg`%LDF!501Y z;s_VXQH&C|heKb3Cq!q-y`(-e;~^@G*U-SoL`j<{Y`J&8J?eug1&8fxAkQji{QPvi z`=cJ|aO?)!4jrzcXoSOwJ`t5sgr&;^=af)hhmhLFbbA_4dKf1?MDoN5x1tWTSTb5| zJBB2VjbSB+vi4)spz)u~=(?6w?0{Fj+lR+PEup(l(^Q^2`HQ+}BwWVn3kr_1Xz(Ax zmi?`^+$vYgMp5P1xuO;b?@@BZE*Vu4{4Hd=HCoq?;lCkXfq3zvQem6#BDN>}{xCBj zN}INuHld-4!Nc|_et6+?0h9Eq(7S{H8v%l!EE%`fy+dxp_R)bGGo%BFI)Sut;Or!{SKEjXy~lCnUA5Wkx#c)SW0(;W_Cvo*Xe9r zOkaDE&i^8sS0wQ97GRr`v@RhLhK21F>br{8h=9jO=>H14aK4H%N@Va!_JSwj>~Q<$N(NsIR)I*3-0 zrn^qcrRqKrH0(G7A1fSLQhyYf6nYNz#E<7WkafqN+fD;rtX@_wr(w;?n{lpnnGu6W70Tm83z$`#u|%GX^ubB`;NmXg)HTaq zQ=AB^Ve5PNlI!t}i@v=_GWSqB=@%^lX-Ae)hVG;Cu@6^GkOQlx#zgw}dPI!7jVv)F z%}8}W!AyQMw*K(>V+a2{@x2S)mzwN4-SYs6@!O8a**`69oYoZ1$m>Q5@yC97-^M%R zF5Yr=u@qMvi!|s2muZhZG30-m=R<&AU-q+c?1TA|&-)yDc`Y*$j{rqxX`i$XjU4r! znW>L^mBUwD30%-TmsbYk^Ud|cI7(tqA7jS_DGAdHa^oRDlL%f-BV8+orr)LTHD_^R zTVeShiT&BLF_D@tk*kNHMEly?ltj>LZl>+hX;Cv#U3}?_Z{^3cnsEZB2bS}92erpF zak(=~=h7_s?Son?5Oh{_sywbU81^RKdM82rOAnAaw9~9$=ZD(G0G47(dUzgZ!H@k! zlImUQJ4VZgrXLz2jQBz;;=(hMYgcbA`9kDZn3S0pfJMbPzO1eV{R5M#@Cj=;itpKq ze5t~ki;~6Za^^F9CQ73d1`%HNq^h_vMitxezA=lRBqcopo`*RjaSlXtXe~&UNiI?p zx5#!1+-SgoiOm;*UEk+$DTNZz>t@LK*IF0M;GD3=G>7LKqPT4F%vL>1q8@#la8O@V z(Y8?xSW8Nu>98$X8&qu)0_Z*BVx(Oc>eZ5rOGT|smTvg~tpn|B0vf_RbZBd56!=ib z8|KixFUvCZ9(QP$$mnX*Lh@MrYZ`w|$tL^z3~JTw;V^icsOKJft-unf_mVzi%);v6p*qd9gUQS56nTvM!r7#wqs zpamBaJb+ecvfjgbO;7V}#A;@5+23~^Vh|Y}@Vs$}XEP0Re#_iAx~aE=qPn5M+TE|> z%VREvkcM|mKkY=0>`j+YX5-Z(Py6|E=M5~uf1#ch-4Wdvrsd#@BD>08-2Zvy3?s{X z7wrm&)D9%#_q-jS64CTG4X~$^rR_gvekTk)Y)a19hA>0Mk6~(aU>2@jiZ&L~@;Pgu zZKY3hs(=5?iBCeZmGg~?|F95|Z4=Soy%R<0qBprGq(790KD;-fl+=-v$%p7P?G`_R zma0{*6wQoqP1`T3lCnU0e#xsgD_zg*Iryhm96(akv4z+EgV__#nEz9 z!;+emsll>yEH)bpw@1Tm+x5}rbC^-6HJ!#@stvOGpo`%2nv9`aLk_tizY#|fk_2C^ zv8rFLBW(9-?*1A6n&Q5mNTzS@G8cRwJ&VkxZgtu(tfk&ZZVLB75967I^XS<;%nMHl zTiW(SbfZpxf9Uy;K&kf*5Fp2k!5e<#=(#R-0liOTK=FYXCCdIIYuuypk+kn(SFjfG zqy?Q}LL5t`yO;gT2k1r=xto%NmT?=dm|_D89)JIaWQ|{abKaQ*8$bATN36ba0*1pp zMFE<;3!`sbZMbi-F(<$p=^(Bz)3SDiA+YvX>%88+3<6q18^i%J4vMGioKW4Q$r7`J zB2#=?u6DC~Tcy4&Ko&k$$0^<<5ceRmb+A!YkmfoL>Eq4nGI11Y>Il?lLIJ;}CZStFXCGoO zo1Q=&zC=7dUebm5cSEj+D^v|hlOu$-?ow=#Ib*h)hZt^Mte{dXY}~`TptMy_QNRJK z+;amTZ=`Bq@_UxiL5{=jfHin z%vUw&_dz?X=5M$teA~R6b=uV6K0>03JeQ`6lMQ)oHlH6qMo7Cf7wg1()gC$zhXJdwUhDcZBt-;%TA@C0p-`#J;(n(1fk_go0{ZY@K#m_rv7V;9IP0uwDpDrx zdHhxOBA%OA?1yhvz}ljPnbZiDe$ZV-%0@`1`eN1A#TP$lL9#f2ZnB~cwia|qn{n1Z zCDP)0AMdkII>tfU_rMkBI%-V!4I|cw=64}*W9W$|UZ{H{?m034#Pm8L6oiFm)4$TZ zjx0x8d{FodtyMtmkXZ}K_E~Z{Gb#rexgRd*K_$k~N<>NWrE%nOIDm20B`R)U1|=xp$2>EMWf|!21*TB=t8ntos92x-T1zQgkuLOLOrUqG zz*oVi(&v(nx32p*G$t53!r&ve;PRGaLSvT9v?@v?)@u^=8Zege4ja!L@8^na z5lb!U<1}bSv$5GAx<4@1pBvJyL7*LZ=t$B<0#Ps;8Wll3Z%kqOH9}LuqgrAa#c1r* zcu2tVCIl+s)9nlW`(hE@vm+jAEb^-sm4=gHJr=EB)4^WiVVf{*_p8$sw2>{8P9t!| z4ILjKdWnR%w~C>^q#gH}BCa&4eKP{BNb}M%;&@QQ5`4*Q%S_}xV(OU7jzrAi1FO9+1dwHw_*`UWOkK<6`$ z!GE6xK;^LX<_HpbxkbZ~HQ2&#GgZKfS<5TTt%5)8D649Jg2puTAfy9YxY;}>hRwCi z`Rq(p)?L<7CGkkW?<8tVR*^htQblbd6|I{Exc^bBmquhup z8Mi38p+#=J8&G?T=8YIx7IC$-?xJF&O+g zG|1D9wZ5t~-J6b08uAhoRWm&k$o&Mhr*mMRSg2hCB|Ska5uJO8n-@)e@?xjAT8R!{ zDsF|j9p$S1EL_V!n4o$ztjLY4)|{u?T-J4>U_omo`K+r20hUZx=z3R}-d)No<}Iq| zx3eJ2`KJLQ)qY0iIG0?ykUXaL;7%fuyJ2J+@(D?9u~u61eXT1_>=FfN^Zi<5jUC^L5 z9=Hf?9!oO?_Kk6c%>R|y;_$4xD8O$ywtq;I@zHqk<^o9+xSdbR8lM~quPDUx)n=(z zBUM(StzToq^|TAu6iu=upXGq(zPDMpF<@P;5MOZ~h+Que6sMEVH{7f-rUQixWs6|b zE&a;EUEh1S5zNSaWNkM3E%u`?l`{qz`O1d<#nON@#V41}YtYBH?H6g0x>n z0W_6`9zK0CUQV*-Q?m%vb+B>@M|ZFqZ|z`$*#{Ek96g9Q<(RD}TwZql=Hb?4z;3$C zm-(mMU=H6fRXNI;LOq2fS;g_5AnF-78)6@F)b(zOTr5^)O|Q7-0qAwdVDy3V+^HeB z^@Guin;UdF%Cm9uhuX}&VUP=Tj{Fhcb;$y9F#(Hvi=EOmh{y{xj+3^G$m5^_^ zTyVh6&ia-B!+#ZlGjVai_IbhE@^0?cLIBzrU8?;uco!i!M9n>iiX-J6_-xo1;RVdM za5Jtgc9Tc!Zu&i9TEQgA2d7)=l$wxp^c^>(wVM#CRQrgK5`{yy6zV$hH@|K%RcOL9 zJ5wXpr+~t%Mt)GVmdq47wfi#URE!Ox9WaK}?Qn(LvM9pZ^Yaq*P95(t;Mv$L>orsJ zK?Xc_))u;cIduh$&G6TdbqCfZ!CJwulWt2cg(LYOeXiI>1w2h|0@{`z z1H3jo2>C z*+<*40sxbBaDUo+Nqyd09kK?0L>bFbyjV~{1UTMzTm^jTFQ^MLIF-zXh%GP;>7%p4 z{hSPCDpLks@o{3;_)GOCg4uuU()v?Ngpur2M~D3-nT*#ruDM7guSjWpT4s{dD-+p_rqpFyn!cuRAt9ffV2hDjjA^b9xd!b^P4^%XV~5AS`MsBhWO zXJO(^1lEEtp`+R%wv;s_D0thIS-<-Ac)If_-QcAfyM$QUeT$4lSY^8W`RKsMRd9Gk zK3PW^#X)?|Qma?~kInwfh;FV?WsXDrOBm(pzQ*A131hlFOM8y6zr<#Ktpzpuz{V}c z`90MyM|K9GGz3v3Vr7UabvEr=0lw$zNMTJGy;KM-QF*y>HL#?!PTU!urF2cP;GJd# z;UG1ar*{88{ZO=v{tjS8D$;bX;s%#J(KzEP=2G>LHY&3A8fE0KWpfzY5QO!M$Te1N z7K@M99F01+z3Fh;u3KS^Hu1+pNmyPi0N3WXSyc#8H1y;Up70dGDD>samaBR$Z0vRz z=1OL`z>2Bi@)UO}$;n9Z8Yf`JYtR#)ERuIqbmwEZf(eKeJZ((KW*aNhO9Y1et$9UR zZNIPKk;0^jI^8erdRs*U?3USi(Ih+o-^=Eg5H~7=TzU{nbw{=t(f~&=aC>4jpmr^E zfRX$ksBoyasY!kab(>U4Owd+A9m?z)jxcibAjVLSH6DKX@{zDAr_9d{d2~%_UKj&B;Y_Y*Ha%y_Cr@{Q&C<*w**03-7`kxD|Sh1 z2aer;31w_(ZjI1;#fdb{jq1kynq!A7Pc_;8zf`lniv3!gMgEhQUj2hKX1oZ;pm6^6 zFnj$F)ay$+#q&QfIeheWr%H-2zTaG-xcp5A3}@`QgN2OB9y1qEz>rcvy~~O(v>q>*W1!TZ->fhU)`X9UQI!p^pbYu5j+J_Iq&oM{uQq2~34pzzgW8tAX8;Dll^qHF5 zZoaqo&V_3ngh>Z;b13gtnzF-$HEKHA^S@2(>_E>Q6DDBP*(Mw_@R16f)HY3VvMaY9 zNy5HSVuGr@mDhb(J6Xo$f$5M)7^;eWL0)V)<^FsD{+OR0Gn&D#8TRTOUmv*8`(`Tg zGpmUQ;}PBf4fy(q z9FstZ{~jim|GRd7{=^6f5|>IDUU4;5TY%|Q23o~UV7RTrjGn3+Rjx#ME4wp~v8nt&VRE)R zO&T+AoCuBzP$*Otp4sDZ1)Xput(;Q%S&72;pZkTp5Sa6z!8xUvDCWH;uxxHEv7TT} z4mob4dZ|um(g#(RUpM8-HYQK$R7Nu8(J&|Z(R}Y|0ss!6f5lY$?2>Psq%Qj}U{=!Z zN(Wh9U^NxY8YnJlfT1ALb7zSor<=ARyGL$4@i`>74`nQ^Tj*%qVnco4`f<6;o4F&B z66oKJT%7)DVPng&mo3&?joM?HK%uF#dG>VWbQ32?8k>Z_t>+<7iUtx4C_2yvX} z{?oJ#UGoPFl0a}Hu(5UDH;QEKA!tV2#*B9UfpKqQPMvlVG5`3r!2ya8K-KPQYz*l4 zMC~E$!HJvOli5Yr!tC}ITHIQ)v%xT%#OemV9CY0M;|rf~nY!*AAY|vM8FeG$$JQ6~ z2?TQK;b{$R#Jx7qWnp^q|O{Uf;lXhDhBod;cRtt@^+rGH7gt+-?*X&?)3@fu}rXiG4P+~?Xav_}ud4Vyky~eKrl%n3hPw>l2c3(+m2rRPu zLbL~>#8Obs$Kq%*YGXx*yBBetx&TKiu%;({@m?#GSHuaJV}MmxySMu? z{B7bOq;7dKv&&UtS`+g055tMPFfZsby<-0(pT>e)+wKsEO#dA;!$u_t7h+x)*7J^Q zXuYZM_*XzHVd**RcH#U3vXZh2Bd-D{@;O+&-U}=4o zr16~-+_8l@Ywo1gpARFc>rB5kfIxC$xCY~Wg<*$3=8yi#muFMio$Djqv1`b6-+q`XU-ncF9Ci5De z72bx|SloCIqPs?tx8fi||NrJF z83{O;|A*}VPx@qJ`k&GNhCUhD8JYioEq~u6Zxv;Av~bW||_Ms}eyFL}q9o0xkt`#|i=M2GHtZW(yw_a0JYfVPU{j zRm95C#sc6u(30G(R$WJ$YqEFq_8N4)*D^=c!83P1Zs3?MF3g?8PpI<1w?$}5K98o#Hs~Q zJX-WZDM~W&j}EBpWe^4f2(NMU)G$a=CzVp5oAx?~oPiJ%M@D;Z5^WdY!S4lkYC+Qy zkLW)_Dncsqfb}9;A#{LiT7lCdcUOYbT=hWA;b^GXjk_*}QO|v~P6TvACq{!tP5?!! zL>DL!gC(P2UxtB+EmnZlgk7fHQw~8sKq%Hi(8`V^CU%lGb^|EKOqk5!=a69_na3To zf+>9rkc_3yF?7IfXa>{@q+wBhVzg|L4SIQl0ToF^)h(V6SAHLmWMsw5sQhuJ^@AQ* z`i;a8r1XNuj0lOZ{RD;(1*0sH3EUuqq-68QxAJ|cv-^1KH%0>|Q%sr-U=LxMgGob6 ze^d$;>eP~#XKLxGK8tdrld*ydFjS?!>%q`IO?>~l%JJFK6l$B#_1Rg0i^jD*0a^tHE8 z7oqu|7RwnH`n^5Jh<|K)20!N5rbdZeQRusj##yJGeqrsOlaX+OY~$s!O4d##PM2K= zF%P%uxm5px@jH-!U1b?}ncb#LU4hQeeILL!Dl+n5s&VKgv<@fdIoO(O6w-D(vD;Z) zx&4d=j>5%0kD%JTh|^-mf*JF2-WtJJ&qrjE-y z_RM-sm)`2G2UWa@PtUM^Ui~va)tLFO@*VH+ky;{LiQ{FD+TTVw^?uGZK=JrW;aH8` z(d_it_NJ}Qd-TWdvV_(D3Xi{_!hh%p6MYdOubt(u z=6!yOigL28wD**K{VB~>Z{9XE<#~R#(lCFb)Q`2hom{S7ue*`5m4cC;EA z^|pLE3cWaXoH$#5vOx-IlRNAmF5$2ak3RyY@XY7U!z#`P5W*n}GGW$1ma>0+SgBKq27 zj}RvBcZ?7;y-05@6tBbJ{tsjC6f0T-Gz)Iqw)fe#ZQJ(Qwr$(CZQHhO+t!>rnR_#n ze98Q8wN|oT)W`>7qX!S-`|n7SCdDN|%=+xhM)pI^n#8 zWt8-{1;x)Yy7xb038heM7tjVWeVT$dZLskG@YO{v)s+b5E z_@1rCBDV=Nm&%O$yv}xQiqHLM2GzrI=U{eZXrxm#LlcJGTo%KG6HgWk?Kmj#+HKRoq}ZaxKL~|6;Hv3oTjGJ zVC6xx!3D>s-Tl!VZ3q*ENrRxf8q2x-aS4sJ_HdXa~K{^_T=V>cQQPpJC4enI4 zN8E-3N#JX?zT3uI1H*UkP!J=?f16^n{YR%{W8wJU&ex3p+9u2Ye)#`1N+!1dap;Y+ zqNO~t8b)+dg>cy$kX~~t5EcbtCIDn?L_l7bU?D-QXcB2Bq*j8?niYLnlYSv6ZhR=P zIHrPVeSgKZA}qzW_?Lv@i%IP)r1k85==%#Ns;NYu4lTXZEd^r6nnpi6_xN z4N6EK1?wuH129SPAOAw&p{8aXnF9J?#5OkRd>g;XL%VEtZioN?>G`o}-moAijWYS- zAmb3Iuv1}ZZZW(>a6phmc>=6t1NKBCw;lLYB)>`gQ$&@mpcKCZ$qq>Ud6`t;4pPCr z2VuWF#g80GTKE7|a(zrI@1g-H>72J;4~&R$L-IbP0*DetY1MCX^%x0m`*a-8Ird^T2}673@_$0AVuFAHlBU+V zSL6lYjlkxDzHwQ3P~7by&pO3`0~EXTJ_t_PyB%cm80i>)I9F;A**G(AztxV~5moj- z?|Vo<{dSmp9FKs~33f!tK-yRwf!5l7^DD~$DvN^-ICcRAwSMfV$sk1_;-%5U7v4NQBbyX__z` z{0ONh=e7qZ@Ap}{xJ@jAbDfgVQ20uzHcyMht>O2w~O`uH{Oj|GY$v;twl4Wa@z89pnIQ_i`wQApU4 zsm7trF;^(s&R4weM`LCGGS{jt@#Xyv)J{}6BFnmSz@5ECJ&CHUILkM}qEF5nCG2x3 zhiruo%i=}#c`n#mU40Knbi7(KZ7713m1cfgg=AZeWHR;($_m9I<=zPf%3lBF>I^*;)M6UvbT6 zs4HM2F?DY_|1(17iPn>mdY&nxYL%n61mX;&}IqRNCXPuxJ@d(0j zHesyw<;X~9zQe-Z{rqU)<1UEe!g_6efM)`7=`8<}=bHW#nXa%Pc#Pe+U};?KTuLjh z;(tCrnDQyCd$sq>56{#M)V%sIfs8BnXX1pRx0XAjH^?z4rh9*W*j1y1 zHzh(Z)EM0}sd>5ndj~#96c$hE=jm?U;;CHQvwB$YW<#On!`RjP_S$PDX6%mBW&F?Q z!xDm_YHx1u`&u`RGm2G<)}2(SdU6VVqdKg&uh4 z#hZa=$Z&eK@3wS>Zy9b&Q>!JW2DhobS&NnJ{9%w0F6t_L91pMaci3&j-r0FwtMSeS zUil!<*@2f$k;^h42Y8C0aiqDO!1{G^Y1w8xT+1R z;+u@~?(B7Y?&{_1$B$$8EXS%d@2U3bhoqF|Cglau{SG-XcT5?C0+1!ZkiIPuq927n zM^W)JBsn``;3#HaI5{i;5U4uJKi@3duudOv++y#wc*5^)4*?2cTn_o!>Z40KuJIx&}=W-LJL^u(JrhQ+}?zZU0&OZyS;oihH`5~h*H76ccHZWT4uix6z zHC8U2=tUH0aGJG~VQBE$I%{o~#EwK4fTuhik$d>>XyXSXHkGQe(kkO{EVi;@Rv%jB zHqtc*jJB__aU3Xg%yT}b3X*D@XZ^iS(3%ifwy_7#KIzw#9_;*uJ_*a(3Gp!SnE0`|_HnOG@--gHbT6BH%A5lHxwtp(nDeQN+bng?gR9eu|Wq3mY(T8_pr*u_H~ z=G7_n=+?R5nJesa3I)WfEB3E(O!b~Eo8WX7*GjZz3swUxMrvpK0`lhZZLTky6=}wu z12e&xn^qHRv(&DZ2xiIsza zzE+GMh3XYtu^pA~nx63pInxwUg8pv@g;_xs!)wmzQatGqPBZH6EJJy7Jj}d?I6sMF zr>AoTDqH)Wv)VC|6DhzI1|f#vH1+dSArT<--Ln-f?b9*5q^UB$0ULaga+j#|U5`93 zZiNvyXXzW!yntAj>F(o=QPY^*8+P4Y297x25BHm~#H{jhg1P<-gu|6o%82`@ zTen3+Gmj+TqbCNrf>VYEG97Q9_RUwFMz)ofE29qbF0uJTw$O{H=iU$%VI5jU#AL{A z>6ii9T!h5~jJChNw}k+^R_~@cxI|@#))_5T-np}fll%1!vN|}?x~!s;W!b_uRozcs zC7`;LSyBwASAzqFhYk;#!hZQTX*|naWlX5l4awn)L zZ1XlPNtulGjk%VLUIju4Pi+b4YR{u8LkU%hJM&1`(WaxKzHOZ(%J}-q^5pnVmvrzo z538BhlP=Gq56iysb>7wL)q@JuCbK>)IacWe;FB?V^3jJj_L3`E>B8z~`GvI&;SHOYEMdOG3AZ667j)3x8rK z$CiB+>F5g>lXc}7C}cwPq^^172CkFUEnzsa$C zwnQ7_7>COaG0&a2yt%0r;%&nub&v2Io_JVjbTdjg&OD12I9I+2dTW0kv@c!S!cD`E z_D~f_3%Dv_Xs14^V;df6H93tI6`|9_tfy7S-+Qs&89sJ{X}0U1QYl745JRE$>;5pR z*v~fQPSD)49QEgAhYi>X5?v007; zWv){Ux89Og;&kH-by02pyI&#=OUf1@tiCnG07K?BPJD%OG0ddM%joO`wLm1D1gajl z|3w=3<`C>CGOe1y7RtgeO@OXjOpeM0f}YbAPfW^%Yi5~cs~ijo|Gk?^i>{U=bRYgpmJ#sX&klx(P=fwTw2q}o(d{c4dYqD zRCd2in#I5QP@ptOxen#BZQM02sp&F`ot`E_>mui=;n}5?2R2@A7GG5ZoJ^LO%q9Zl zWyhPV`&g$OVOa89wM_~(xpZ>#piuINnn!*@*_goj+_F}SKR_(Fsh67IUQ(40QWAtJ zyNa8!(`=WLju1T5Y<#_24-5S2(&p6W~ z+!HDqTc_?a2a1w~iKDBj(&g-}HG2W!hfGO)YNK(|zwpY0V!;B?x#ySboo46#DszTa z#>v7tlAAWaP_87Osq9O8f3}8ai+(C$YgHlj>Rsuny+ zGpX@|Bb+AQ;vu{eB<$Q*Z@~0@Ridrku_Ba8G7)V7?&FFlIeXpICKmY4uVQOm21oal zWQ;u?j?8bnYel|_JqZlzc3X2d!|dnIvrR$SURRT46^j!{_dL}S5U}pDtcFVX4sf_S z8z&Vw9rfrXHKWwZg{0uz4OpLtR1J>Dh;?=vd23v{XPb%KHi-I2~C+jCc0!88Sp(G?E^Ag zA8Ahvn76m15~gy=5fh>Hej7hc+-Af0+u79Yh^JLFE6)4 z0I%53m3!_L&072N1kpZp5r1fxl*~V#A*XK;EEY*Ma}~q-D>p=?frOIZ^Q+)v-ffLd zp&`=$@CEcFXX`EB;!}AlcuJ5Vdj~utBGx)USs#|qj4|n6BY>S>Fz8d~%Z}~+jq&X4 z_{OA@S4hve%>HHGc^LyEyNxH6EkfRWqP77w?u@rLy%}=Pm`N6T=^itensy}_?J|he zO&zs7?G38V;qYS=)%_$-M5G!RLxi=LV@sYP4GTxBQ4eo$k8t2_@22C#{Jp^#|CtPwyM7I1R1 z@BSA(M4q?DxkYwrXnA{4?IC*3VyG(DKO})TawbyQU6^fo+;HUS1X;n{pe7L)Ypk4r zVm*D-{&3SIO!9AH2F1>gqRR$V`F!`!S_cEzuC77t>K?YHunD0k{Kn!AQAr?=kncma z-rUUapV6zIJHGI`j{Y32y3j~-3dgY*cBFj#yXuPcSFCA&C3d}kqVU5{-SksW%#VJ~ z^1FXqS2c^3TFq9{2gG>9B~ukTntlM0McHF#O@Y3#tx){ood>FcN7uMzBe=s#2ZuW< z(MQ7qZdgthD9{W9$TIdy+5;QJUZwm|d^2d+=`qGV~aA|QrB?t?m zkEXF5Qn5?v?!?zqpzIAfNXH$8qAdyO!_{;U9{KPjXB!I+jL#xgZI!JDNzs5fMQD1F z$gQ1tzvLI&vF^V#oWIvziS61v#!H`r{AxTF?MEuhPL7`6>{J7egSp0H?UWT;;9lB}ZZ&bxoEr zj47e`9H%l2i!0lf?fSHdkh7~zEWVk?7}|=GOH3&`UbS;zB2|fw+VXf$r*32$uU>-w zv|;VS>}y{3o6V>^@Y*$dmTq@{y#%`GN5M|sy~qiuCNBR*UB#Xtx5}!vT!lv7p&hpL z4hrDbv(o6%3i#`_$Dv_In`$IFu9#@02;}%iOub`c$Z12|xqH3I?sffyYm&I-X0l0OoS@+Sm9 zy_@In0T4j&W1xmIfM=x8Dv85-N*mGihXC>ifQ5nDgFx^@rUWYzgcWdjTRANhX91O; zhl#~zG-;+5zg+**7ioO~yOzQ(av=>6YVndIP#W34KzP@%;UP1;0GWOM`|Kue)&z5x zAecp8G^qkV|JetYsdO4eK%AB%)haYJ&O>84pRKU z(MW$V8_vHrEOBW3z^hb^okk>%5{gV576C#8pwN73NC04hh;U34uwRo6$n0p@Go|0eAj3Kud z_0mhK7?lrMh;%Q8kaWCm`_gpyygx8NZp11F;TE8eXsH(j0$eX&_n9o1>|e5;R^m&` zTA)$&XYE?hEQnIpmaQ0SdUHMPb@|90@)dZeZ=3BCj}_f3Yt4m!%#HVrTMN7UZm8rl z-GIXFJA$jYAt&R@bDKjuH+~$>=;1lBoiEjjcX~~@={Yp|eq!U-%SQ)T$9_U&k%E@y z%oU5L!Ma!|!olC+n(Tg??j>9c2n-ufO+Di|P@-Rm09RRty(85wU2xoVTIdn}Pe-l$ z*p{rc3-^^YRV?sO5EwHUi%`%U0Jr zX(>;~nOH7>yNF{M#S(5kgSnx{(RXK4jQ{ZE!}DaKDx35NtQAX6ePIIFR8G3dWX^+; zr!Ouo;-+4ex_iy~0pim&+vgSQt98?*M`f8~!yn@^CyDz_(^5FvwVdswrn*rL!MN5{ zm@UeWpJ>NJjYlk$OxDd*)r^tWvC-v-@)d(tPuP@_2$fknIoRM)74J84OGEhYb96=c z!jkSndtH_<>#y}@sxpvsrI&8U^KFDc_F?;rwY#B}=%HXZ{2BfYad(5mK(c=}HWikG zxURnyxA&MFe`_KeaG#t#FBWzcvDaN(bZjjh*Y^U%=ke=#I#h^hOYyF$E8Jh?*E-z_ ze0r7KOxk2t#PbuMUTb1=9J-AtdoMXHJackS?RbyJXd17Ldvk->xRG?Vuf^N3KUyc8 zZx@cR)rhCPo9jDs*Emj>$~ZQ;?K4Y|3v0wi1Gcw!T*=jM*ytHXbS^NF+I`~xu?<@F zYy!qTP11}wE}Z#mr1{bsk2z@&a!05!-28M%AXcLV5RufWS$g0n-p62hj+N3 zg4R;9raVfD^psV-ZQFF@7WZhSQROT5;}DPc^A9>yU8JM8|AuT5=Sta|4g=W(TCIZy zLbnI>K&K$6S(d7?@_L056^HCwaQB>YxF#5*&u_zyBunI56>sm#izNTDWvbA)zO^l1 z0Dl_x~2E__3LqK)tPVBTW{6-cEQeJzSJ>zlmI&)V3`a%ZVCX45(+p3jHF$s6OI4@ zJ2*HX&W>pMhLQC^eZ0Zeu513!odCr!#REg3|Np~L19}9K`?+Ta8QJG2N8(o>vE<)y2$hX$j(<^UEvr~6()65=u< z&HR*7CoY_6ymdU2}s2hn_Sz7;14c zbo8lsyhg&GcVar#`6Y?M9c@`>6U&kB6I^PT^3uP_IdLR2UFF!Y8M>FTCY1V**^P+| z24>6>y80a3wg#EGHN|jZpHH)il4$kiJmb3*w8Ct)Pc5fUML}MpzN*xpa^k8c8o?jl zpKCWQFxqIO`%R``qWO zs2UVHg;&xW2R$zLr{yo^o-v9G&Ku1(Ll(?=DJ_HQKADEKtjpSqSN%WAZ}V9r1DQ8a z(@SF6Y95s7rJ8ba?J{~PS9HJQ`doJ;>ed$v4Tq z9hYfYg2A#RY$+;>9X%2sM2#{9J$APJf~ID;_Q(boxQRQ8g#FbD78Yrd9U8nyK=0AU z+uf}Xb5zx}g>vYB4v}OJAxvxv3tcrH zGMI?WMJHwIFS;+H-wI>R{yd{Z+$pLA4PtMbickk%!7`BX6qbOmJ{|A>F4w+zC?5Zu z8t;a%S(<3V5eDTW?_w9C4GURDn-E@(Shs2s17VJ$_UmSTxuT1bDW70j1#X+MZhqdM zU?1Ff5N={YY6^HWiMqqXy5guGS!d5k(yp3JzNsN5jVvq;A3>U`mWxfHA=6lIR`fLV zTWqm^NFv@g>2!Zxn!I~jH;s zh^GG@rvD1uZC+B{lR=PiU+7^NjXsqP+#V zk?@R1f=}0tyCFdlQpsqISyp$ym{xc9crMCU^cbKqxzdA5a;*uat!u1-03f(Rfb@+Iga`@|@53UIK+}Q$;`oi#gKK@<Cj?=_;sZ-Pa<2O_Cbhp6J6hw1U{#JpxE)Wy^5OuK`@iAAq?v0Q1YA-vH!sHL0qi zd4fYYLH5mq9>CVw*@?b;^K)+jsMhb6^oE1?QT_;b0jP$P9RSx!@*?v2sa)tC82`h3 zh+KXuC*kY>RSj}Okow7{vU&sQ@_vd{nx+`&G5p?5UdGQlmCa_@ptsH9FQ zEnlK9uN3n*AO*061yJid9z%0jNoH&Aflzg(kFNxL<4;)TAU<>+hjtDx*jWy3Z!UOU zdf;PjcL-kFB|Ze|)yrroq|C*?|LFSs2AqHTbR)sUyvUXJxC{03sUpt;xGu!Zjq~fh z>BEQY%ka7T1$J!gcqrm9zvv*^=uD+IsPq2Br%l8ZObK6Kvd$V^lJ_YLy zm%mEN_T+JJd~p9$OV5OEde+DPE6?EsBaABn|w$_9WIXM4Z*XiS#@#|1v z1qLEo;VJYL#8LTs(zT5wZgazL#W9eH(&O)pQz;r^@b$93sdm4y=-S_fo5fYU+5Sqi zhs*N=?1xM6i^DgwO=?RwytOa;)h%8n(eJ#1$LzJ*Ih3PKNeND0` zA*vwI#skUk<5H)hrgHQR1Tv9{!tk*ep*{#Mj25BWCSql1`(RibjK z|CpbPOhG$d5G#{j)78KrIm5zz;pnM~9v>Rl+VOtf?gos_RJy*fUigez;am&Pv}_ib z@mG5f>IB^6{eiIePKv+5@0Sx~)Onk5`x5Z5k&e~%!&TugF<2DWsN7-OS3?y5|DMzE z>SRq#1?4a@>AY5X($>U0eL?)%Yyn-RT!>6S7#*vO#WJXCrE)brY7S!MARDiGLCth> z=7EM2nb`0!*c&0yCKr8;y~!L8%4B6hGo)HdjaW@XtdbVp$q)-h+Q$i5^)Nd*l4wa- z^@iP4bTJ94zWQpvIVOCV*L_5-N-7!$2y)?D9wm}~`FB={xfV2TSD%IK#^yOx^m2=L ztfcl(iG0SSp;9vbA*}9h)0D86->iRqjY>EM4|D4%L~wHI!%^5yMekWOoD6*C%JL07 zHoC9(QwE9Hkn)uE(V;7>v^{;|pEH6p{-`~EeYqy!8GrtQpLYV%6YzV3D|9P|iP2~h z>emdNI2^GGJ!+@!Ks8<7UCF4I8M@Wpwet+5zlq}0WfZc3f4f6C{<-jKebFZ`PZWJ% z{qxDN)vV!=oCvGH9QH1;2AMQ5sPsM9Q(M-2jz4jYBuygTcpQMfUxKp4liifbEM+dM z6QMJ`$=0kcC%4-7NkHKud+6nR~Ry zI^jud=+hNQ%|$pIhZyO)s2d%vu|=bt7APMEsP`NMxk^0`zmX?ByLp|RmF?r!Cw<9F z(QD5^a(@y`V)3hQ+rQpjBGfgC8Yu{&3&qrW@t}u%ypx?Ca+p2>TO%=eK`I@#YeJzd z#!KX(=o#+*a^G07NLaGc2<7RJJ%$%4UyTzN65!x!JW}FCmmj-40aj-Zrl*J|L`hq0G zR4UqkIt;eZ1pb_t*ec&?aKW^x;z8CKtwl?j&0e<5QbM9sRlXVt--VdG=xrCd?R$yq zz;ZafFl2fK8rROC?2VpDck+EhZ4ISrTmgtJE9!Mf5MdAt^W++dCMAPsm@Aw)Ek5SL zQCK)~OpOk2yxdDfY$9!N7W#<5aI*3yAfzz)i@1n?S#E1&M2_5h!86!g|4$RKMG(T2uoDAz5=l(G)87rI6Vg0$fS?T$^z(DOHoQ?4*i_bF}ZR^ zHbWLV25SyhZ~^`5AH8RksSK<~tw9~mLzC`2YsR4R{+i={ZxdlQ(H6z*H8(EyyA^Yy z8O~sqqPoLMF*MR*;9bo1iIQV$qaa>2lHSS@4dc+A*Eg0Vuze>$qsAoCe7D1_=>WwB zIQHyi{w+GiT5^O}F6TQr8A6T=jUjc1hW3fFTNN>`z-Q!}jWkY5&%37}^ane78-`%{ z<&+-dDM*a$krogU@3Y$Xj#-QG`8#e9k-^QwY7Bop^}8NQ!%R*a=ut?q-V8;rK_sy) znemG4jd1yAkIx-cUt32m3c8v=tb_yXV5}FQ0NLd{HKuX{FDX{7Cqw+V@4(9{U^6b? zexo^AGAyn;uerFl-2 zvIETRpm1vzp4w9RzN=@*^6vAk2KRLvVdX`wYVH>2URh z+=&0CF@KpUDZzB~2DUf1ymHDKTrRriHkl;82LW}u45S*6Qh#d7_4K1Lvc8i8srz>m zlJyDRYP3JQ8RO_wvb;2lz zZ5C=I;EIrW)AJh--&%BB;@O#x7t0=(&agj78_>^P9a4Yj{8a)vS8U6Krg5JhDh=x~ zY}MJ6;OLIpNaLM=LU6#vk2jgmd?QwiRK2cm?#2P?d4kPjr_a>;`Vdd;|J^z|r`rY2 z{Gsz?nU@03JCqAae4j_Juh;$cHYh2vV32Gyo(fKcLUz=R2D4{x*k79f?sj3~dMq@X z1ej{Ye{n6&W&Cr!(_- zl7sDm)WIvpqPkdyV(JN{4Xx8blx=G%c>cNiQ!S~Zw@TR#!4x>xdnb{f?7LT-l_j)2 zn7gD=&O>(U3RDaVRN$)8<35)DNSZP?bG@PiC4H5A%sD>ZG(Oa~%)R*Kk`E1?{ww?A zoH}7$O2XribxDnIA5+FJ7;!?dC%lKKy;F655LksOz!C?-=^AhuA>7KP20rNm0W^Y! zBp+?ciHE(vVZ{LA;WEs9MX{%A#@4h^_}+ba(RIZ`e8Z+3li}*m$JL-+tuL^eK1qGl zE!if|p=wW#a6=8N5_6&~vN3dbl2y6!#v|w|nW~A3GDGGW2}DJ`-|4{4u2}S~)WVUItc@9AggJEvJHxw9L-)M7gX0mU zQEW?Ba_DVOj>;N6aquw{g&{V~m>!z&Y>ETzFZF=Qg`r30Bu5JYhpv*x{eq{}(+{u5h>#mW$Y zHp!%(z zghp4Fq@*!%4aoav(;i<1tRHIl6Bd>weGweJmDfEY<09~!KD*DR8A&PZ)UUqk@kBZW(a=wCF@v%JeMuu<&eHh+ zt4@q-saX3Wo3);zZ=51gSTWU2-bQ1w;Lb=oEotlOB3%3kbi);}jfwSSQrnqQtrpgy zYR=MOAmegp2U+|=kYzZ|%*duf={(}~)0(Bm`~-b`JJnWW&V)>)cJ;<_wXFOVebPt^ z9OUL*Z>PeSa8>RcFX?38srjXK=In-i?=c+Qf~jP-sTnW25idQB-f`w9oMMMl)7ZkM z2E_G9f2htTp0(tKG0~IP1)>{JZ!E}Gi)3Zd7ad47W5pk{WT)1%@5l*~>mw!t+3(_f z;C)UdIlI5$mtzL+f0y5Nl(R-Wi|Q+aevDuiNuP??#&b zV&Ka3rATQt$d>!)z~9UeG^@AKRxVL($gB&Y2XM@g(2U8Sibc)ofLzYU7bQ$L9)Y$( z56Zy3#|rvaxM6oyit*sPpIVv89lk7U+30*xr0-Bvk*23O$!ab?_2LoGAUi zMHgjcr`5~~F+A4_-(n-R(k-`7SZqMQ%(3oqAm(C6Wh?ohEdbY)d4QOI#ovbZp$-R+ zX7J>)F!t)SXL8Z8!N`!3u(_KVm!(@tfW~25i~c_Uo%coS-#tVk3SG^WUChc-AfrI{ zG89Sbm`4^l+ExxA>CxBs(oJDnR^|WB_~-)e>$$x{pm6TA?JaxO_m=sk#*aRXle#Lw zrUvsF{mrNE^J8LQ|j~x%Cx!qhZ%FT9O2dHGB=$4pYUrrEp8x;>@vyUj^N#i*R>~O`Ol;Iw`zjTkH3D{zCd}r-c%pC&Su4w!3C`b^p z{-|loxg9FB`e}9Ps25$t3l|sLiPZKAt}sgvpAus@NPe-NIGbpDxb@lRg_`sFC82LG?q)d!tI?tl1?$~o zey};jKPWDznt3wcgx32IaNq#Skc8+OB48M;#>z_e2g37#_k;i}V$?CI> zG0>97X>3}Z+qx5 zZXTt!D8?@?yQ{?M4)1Gu>ymQqdIQDaQ)*IlyLh}wSJ2^e3+y0-6d(6hKZNifcPbp1 zUMdatkp+s`(%RluJ@H(^_^>29nJ%GZk2Pgqjh9lQGT>WUD8U7n+TYhD@zT`JQ-2pf6!+ zdOEm9U`IjWjR9mL47L0mek)=D`RarW@lVIz-+kQ6B?+>i*z~7KD9q-w*=ENvzrGxa zi;|($tRY%rszIQr3IBL?ZKt%^7Yg@@CMX1%`AcS9i|nf(3Nfz zsHnakmssycw1`7vb`lDeQdhUWLW`BnScRD5#H?pkm*a&Hs>1#;F#Y#`zUVF5;LEVy zHA0%gS3q={Uf58QQF<3C1Y5;95n>mf!Kb9_(qjcOW+C&n1bP7@CH2O_VmH(@ECF>X z1EUYY9om`kNeInS9V=atq}_!+R!i+}k&1gg9T0Z(>gkkvC-6(Bo9>S-$bOLv$YH7k z>IgqM&WMp#hs*ladBuk1z)`4J9S%zEg=OPh)W{k(3vv@Si{ZICBLkDy1VHyAVw3n7 zn;F#J^y^;8PXYQ|v9)t?=@QD`?VfEpuAllrba5MP$ZVw|r6#M}n`fiO@2{K}mT(R& z%2L25k;x3s$BIXeF7NabLzx*w=x|hNB?5s=T|)J`OReEiPzM-M?xI^-;G&I2E>qu< zxpm4tNHz6PHDV@Q*Ptixq2{MKAx@{^@rraLtPr^Q--_Q|q^m-TF^ql2bxL7LFIh%~ z%!}vUHxXcX!D%~@^YDuqN@N+Wnunlide5BEJ!0T9l2NUI|kp>>;8LS6$c=(rR>^6L?%LgP9(%yhDauHt6Qo2(N(a|EeR>vLA*q(5IpN37& z@C+n5zA(=skA;&to?)#S?a+p?gH;g1B1y%r;o*kRTgxa4YXr`I>$3!oIr^4E_nJb- zTvVVg!E%??>2NIblTc{wygc0blz z;hKjnDhWM9Vc(C@HC1KMPHJsAX(O4R1!qW@gQYRsEpxJqoD+3==EYjG6!owYp^}Zi2)#jRjSCQ5tTuGi)hK)^?!P%X5zCYrWvz}fe=z%} zDI`fNmzAqGJS0OkVCWsd3|@9MLBkPhfEcI4c3WM) zzZU9*-}CX7t2eD-Q!{JsFY9W5nWZmEn*BvHP0u8NHE0O9oN^K(9la+4_3#AqQB>6= z#vse`y4!Mmy^E-~4;0cu)(DqhR4*vz@oMXkZWyGA!ZgdBXm5`@kOsbsQMbp%(e2B> zUaOyUnvnOcz7HmcwO<9t-fHQ6p=m@Pb?9DP!L`NhGveaM$YbqGmHzdKjE+_j*QHKI zaumV04^{b%R&zKS>U`Ig!H#QvnrD`S(>MmFq=e&Kh^M+s8wnmy$)AI2Qpn z93EnN5jD0T$t|b8JKI0HJ6giIMwz+l@w^jLlU*;{)N}C zW-M%l`PI|NNTD61+pO)baB2tp{sb0jul#b^nZ-!@Rhk%rI?QLA2C#45OWR!|u>kkx zTaGv)kVaPaLWiO1slqXA$KrGL2w9m&iEpgDla2@k#)>?{H8zwbRYUlx8|+|~)Wtux zd&uW`O+xZ`3mU7+RMzD0Vo^A%Z+Ii}x7Ge$b9OhKV+a{?q@keMs!-n~h5`0`tjU?M z1xYdv!HH)Ivyq6u=WKg`_dp4S<^fk2^kej8k4@%+te7;LJ7TX88#kHUy?3SIYqr=h zVf;GW>*+L}cFo88cUuLp!#B})#L3xS7%bnw!n?W9#+)Kdf1kKOxoRpGKy+o*T-QXQ zT`S}{K*Se{@MnEVr%-uzSW+N4ykl{CHNm?4%d|GGt%HzNu_asmWSYZnXRz{cGX*nR zW0Q~R@c~?sgPLPF6J_vF>pNDv5O^j2vDZzUvV;1f4a%hy*}RHB%|Oz-qYk+};`GmM z#x8Xx&0ZTFy1OCZgKXloY{VXKE9U>gt$+)!)rwtyGprE z5n4TL&z#s~uhVw(N4!`LZB2h+=k*(vsWv?|Ys}qEmD{m(pU87n2El7_f6tXoWRfdf zL6Ztzba|%D)_IM*?ba8)M6{6Y9S>FdCGf>jLaVRdhtm#H)wBeoVgg_(?0F6)HT3#^ zwmT>l_rQ}RLiGLf-${py&XL@lssJY0zcIop7kR;dBs-f2!{n(^Dnv-`BASpvS7>l+ z)x@=RAYslZDYRIkt$(LQ|GD*oK~qMX@cdCY=~pHrpa@iBw)K@>8rus zp2Mbg_fdCLl9u{N9j}e?Lv~HfMsE*ESosWz_WX9FU7P43=GU`YCzOq3%U2WctyO<6 zh|Acovf3*i>sUBtbpLFtMor|rjAh$13(4Jw(iL4Toha5UkteY8O~V?cU0TQ%Qk%{m z-kaPgN{hq%9omR+qf;ivJQGXjO8a78R7ac?C31RkEFv>{BAhEBde|b2%Kde|#h$DaEddM6D-5!CXUl7*mcwd$v11Bh0o`~y&J3j9~0jOZmEzs-)67drJoyeXZ??v_|q(+ zc(O5TUWl;nBEv;}78%lLb_~K71Xq&IO2#?2AGI2g*@@Is|8{>0$k1;NdZm|*sYl$D zb%++sE#}A$@*S@>ucM`v(-W|6=lH(VAl2E6jFutMmt=*Y%{(X@8T4K|X7p-bElF}m z!(ETnf!hh6@K7Job}1s$EL}%_?Cb9je4$xf0dwi~;=kX0v!ZiM)7(1z?NHdpwqEx1 z8LHO3@y|RaK0+tH+jj@Gc|65BF1m`tore?v3$Tv zxp;X1bp6MeM&^c(5UQjdGLa+uN4)|9V^#L)bm*oDpe@ZJqC+mQB2=zEX%(+B`yK4L zkM;pleEbbF%B1l zh_DC1FuOq39n5XVlZqu}X|mdM(v4J(&?O50kmgb9Kjbw;f_?7FSXblVuGq?3fnjPot&IRaZwD~<`kn&pc(LD!)Fe=~lP$@UYoR_0oc}!jMaJ9X z=32RGLvwW%Q!#U7ZoCxphXd&CH3kbuf52wa@N0zmmh(Gzg3|0pqd zp_euSd*{39j<*B-BU;o-pbh&%W7)tU)Oet?{S?nIre7%S`xa%ttk1EB!wm87IYEui z-^FFliqD7sB}{t!+W9Coc+uYq!?LHYKsr10X1y!!jdk3a`9g8hBE$MxX+#)O?Wrf! z(VVv&cEDpr)GtODlVi+EY`CdX9sf62=_s;PTA3W)xi5`;kA zDdSXaI%f=)zPO~!y9UtH#it|hEgU&peOG3EBPX?%(oxEetPu#EBZLJN5}Vgx ziP5K%lAA;Ag1x4?BJ9K#aJVr9GjX%dlkt`lt)fsbs~5Jpr3+6!>mzFQ^nlHY(3!F^ zA-psCknFCV+H`S^DvULwvieUgiZrx)W>u|zKBb$&?SCID^a&()%}|RDIAFF3?(bY^ z>VTxw_a>ev{B4H8w%xD*eu#fmS%jw~hdM=*wRrYmIC%}HQrfN_$hVh?^mY1;`VTto;vc5mF2cB`t7VD;bg+XmTLAKQyAqeTmJ zK_CGT9i`XoYQ(6}eS|QVA1chP19G(dDs(CfDd1r^0Ca&I%G5#VF9^f@E%rGiF! zfRr^SZlQnvvy4p!l~dnnm54o>r`@lA#A zKRM7@^%TrrIB)x~?+8jcX>Zw4sO9(;IcwXQ6Cx|O6p?&Gqy$}k+5J*-H){RH;O~E< z@#ptMpPR~!h+6Dt`Bhz!);Tm4XYGQ#XTO!)O&SeS&>pC4_70;L#JeDr^+bHVuwc<( ziGwlHN}F0t1cc`P3t-UaTY)P7a$*OogXs?%`{aq5C(=Pu)%iLG@3F!R^Aj)dDLS?0 z%z50g2OBe1o$Y2#0FKj3eXwj*KAx91Ru0j89$u8dymDwQvCk!m zal%NdwLz!Se(67d@uNj1y6$>VzaBI`I=<0?1itCQi>)h1+}r9ykYTm3c=a6JfR0t(iKzE^t6>TUv(LuQM*@;{F;^UA9vuL1+ZhMCtva`neCQIeYO}4ygnE4 zN^~h}khkn1XKq54EvV+p3HjH*2 zIZa|(o+1QK2_uz&Z|U@pGKzIyKJmjYmfIR6M|1HR0XB}{OuIIkB8|x$8A57u(=bzY zn#h4n6`r4E`yyl45K~ziaFQ}TC`QwEvll2ty=vr=FJv}v&OoMqe~!468{6gzxznq) z%@K59qwXJ=MlxD)C)$WaZ%DYn#Vjk`!;`Z*)T0#E{hMhvi|jI2!3%yRP<~H1L|Tp0 z`XQXRX-871(|60?#_U*S@v4Q^jeuGBEsh2=2q4S0+HhxM?GjjXoCDY5t_mT@7`23R z%wH_rO|?uZ6YTM=tUTb=KK#9Vq*qTV7bk+C>WOa&28r+G@^yXj^b1z}&=(-e*8QlF zE0q{R+iyWKZ+}jUx}Az#J%OE~7pC$veMjUIF-A{3X=IxlO)ok*i-!x<2;71{!B&d} zd4I$mVP!8Wa(r%1$`~Ssh^e^kEbW$Z^-)4WVk|F#^b#!9!8uAY8mj*csH1HcujFIi za2Sx;K?l&+)LEFxRW9Y?$9RypW-|zbwIgrOz2G{5D@D}x^Vnw50yE6V@Ffe#1ywGAI{^(?Tg7f(swXoF9V_hmjjQS;1FI%kv|K4cGV6 z+vMAs(ni2$JotGldQTgmZSmzG%e16$*(v@v7P*GU#ktvGbS(K18>*qaE11In<=PB# zNgHYa_>7b!wFA0vdX^4RL;uihWxm#ycIYuk#n$fzUNZUVR;lOUpgG-hW64?3)v3bP zj4Mz>SvTZ9cg%Vcq252#>-nRPPY+Xl$P~ShNfUIN)S$H&s_sj2>0B#wh($quA9pDu zPDI_~gMCUl?{AVkx`%UT;)SO^;hhcbuhub?VDcfY^oYxN&e=M7d;)i>hL2YBc=mRm zNe4ba`~D4uvM(=?6x*vQHxy0d^kZ%LIjGqtnx~tZBO7ywsdjT)ke}tn|`xYfH zlW?6jNxJ9mMmI%)aLJ2LafJ(Pjof@%0TBAoRN-RH2__Hbm*kT+DlhBF9Q$5Z#Ub@! z1z+%q@emKwm63mI;*VZ;5Hxw_JS--sERo56Chg|L7$*rU(P1l%Nz$#ozft5U9aLJB z5(x4z87MW$dy3w#BIbG=mx^HjCA2oe=t{=E*U2Z_LchJVUwkZQnx=nIB--I1um~l& zt*{p*Pwz6^Js5aI7G>;I8}juOAL+)=dg~UM2QlL@GAL2%5Z^RbnXv_IXo}VTFw}Kk z#YWui;omYVaxT=DYvw0T#c{3uho3xNaUFxPx0&N>JsSa7BLiJ%C&nW>4qW`v1W7|@ zrury}WSa{~$xc`nT4RgnCMBV>PBE7;NIyonsN(Y=9_wBwuQ2s%$vvB|-)8-q2(;RQ zXB-aIT9Ce1K)@&7*)VGoOF*0)e zkE9AS3)6p0s<1G!{XcG%;Qs)w{#@L^(X=6!wUNX~&uEAth|wrC zqrr5y41tQ|`D14O_Gm(m}21XEfc=+>rA+MWnV;cuQpbJ=HIHhQQ? zDK1d>JRB;xxp-j&NEf~T2*>=2$H6@q1v?Bu>*~s{v7)U;*X?g!+mL>a4uyX@A6U$@ z^QWC!THt^Y?lR93}##`q*YL+MiTOWlG3148osHxRIEX-MViDV{w=O zAc`+TmJ>687dHT5f!|f=%t8Ka06muamF{xVf3tlIC5}kpD&O&eKdKobR)i&W52nxf z7yu6YSrROClj8o5CpIho8*54(93Xh%;5dH;RWUaRJGXDtCYqS!}H z$YP_*cdr+G2qJ`3Vaj`(5#Z=`=u7`ho~s2Y+6Xa;t@@%e6>5XBC^}CvpE!0+;p2QMs8$w3z?168bDt$;gLUpz>i`V(Pac><_>eGb83Ws}~ zYlqy=hAUz%QGZ8S=qWRrkpe|7u?Ya27e4{q)LwVwmD|$6bSap6Q(MU zb1K)Xju;Y^(L0u8Bn=A_dL54og16-X?^EpVd2|90{x+|w2J}vAu}pJPrUy+?1iL2{ zckQqLLvy2@s(>sst(_WaHx3bOEFSe{{XF!&ImKGJB!Bz_OW0q(k>!J{NY|+SPRNl# zt6`_1J{Z%%IlH+CC`+y8VPYb>TGzzyOc@9MonDH zXxCFY>&~)Q`vLkuK!WPJLid`6hDxZ0{JPeXluY&Ye+vK=q4KrNvk*E}w%IfDMMA`a zN=gEB6&`OK$1>qR-8<;YHz$pI#3+pk3O^R zIkGPw((>Pl7ZwlCMk^idWETEf=P+eKwwDs;No<3U80Uzpx)M7-+g#$${1M90L&}Cu z#_b#ifm4OcR4x$pc!Jm1#}Gib{_7gn`D|{ntB&<&JWsYmJ44OS=1cF-ugr_g^rrW` zQ%iJoQq-E}{5Bnr;kQTBc_+8CRlPjuwFc~2)7}1VxcR-M*V>9?@BHMtVq(`@0PWBK z6RnRgZ%mf{{C&rCRJs6@5G&_%PlARWs?oJjN%jgc_S$-ILwn_N+fYE71R`Er-hLeN zgddTG#*TAp61GdpKM#kRC6@hE2jvJ1tyS`^elnd}X9HCK0_a%B z=r(paqtF{RmJZR`9KGwWK!dY2M9J4Fds?2Rdf8*{FnMq3VUgLXz%*NE7H?$0QGj}r zN-h1Jx3LWT6N-YB)icq$b5i%?xuy49G%EzN*>8qp%61zG>{h_BmESnD z%b-X6y51U3LOBO&%w%T_dJlIu+n~eR(jN}=m#!&{g+SDuV-$bf%sn9U3rKMF$r}6jK9f`PQN^T~`qK@VIJKYpKnLM#wL*4sCFtWp+=ti}eznulxy)(e4R03PdY!`c$Ag6JqXTQr;wQ9-BFvyR$ z$+zC)YxYXtz}iaNW!BiVGuAzm=CN}+JBF~~{WFr-ruY1uqNljT%iezDO%kTQ+a{HY z3$z1+q`ftwblOmFdrD_nm{pw5-f8N4Jbpq`TBU8p<;GT&td-PO1R5$2la@X5>*kY! zs>6JOBes$$S|^z;{g7?gY1$g?#1=gjgZ!{@;AYlcTV9IuHgtewd?QYa^C=c z4Yxa+4p=#IFXz8tOJ8i7o?IRc<_>*3Z(L;CUY)%eWhq25Hih9&Vk|~)&`_N~num#u zg%eyhRZnlo>-#OLNM1MZzt2i-cLG=oh-zV^Xw$AmYPN=lJW#CJ)-WO%G{{22US*dj z11ZT1vyW7AyBm$nycqGGTn8s)=qDYkJ{2FYRN}|Q%U&J5bF9}K?Q$11yxPY(-NWp9 zV%LNsLi9Z<8~RZzJ0({;_EToBPctShGliL%SF$lVTB_EftSUwm=%bvVZxkws$hM_- zKWxNn6B~9~VsZ;TqoSSljE2b_nR7h^?3Rnqa}ZpN5MLa761{RTs8TO{U`dS3qm5_j zw(mC-lH=`}6tBCF+|EvNf;%0gvg;9bgE+v3N2{G=L1GvK4s!Qy)COOBc8SE=*&OB3~~Z;S&<%=QV&lPB2ot@rktR!8RWO>V>c=Snrm<;Jd)9URpu{7)&RUxIn_AsuJxND zOAi~y@A?9DKCQTHDa8(6Hr}3NLNMM-|lSe5D zDB6UOMBIu~=vm?68zL}=4xYBagtzfv|5%0FkxS4rDn!y)@%??AAawMIlJBAyfyxNk z(*lM9n#!6H0yg#FZ{XtX^N6eHC9EA5&oREky7ptge)1)O_7rK6JlugGZCikHf(JN7n=)yI8R($a(QDM7lN022^n7onv8uI={;@#DbiRI@(#WpnqaNm{s+onYEQ96wUY zkYq}5jEP4LlzLb{Orc|5+tD#_wjw}C&Zkltg;E8eZWN-@Xnp6|ZYN%AXlsIws;D~5 zXo}*D95H>_R6m#C9Tw)9+! zz~5DHa;esW?jjSPO?`FdnS8tHC~?&w-btv6mh+4E2ckZLSp7{tu zCl1=#o11Le9*hY{hRLstt{%oc7As%>CxLhhS?vb7X>v+j8Yhz7$5 z+w(yfPfFr>pQIPA@WQ;s;c(v|FB|xtPc^1gc7|Oy&boN5ex#_nJRs{dh^6!Ef3Mvy z{g{w$#HEquYa2~MK~}AQdW@Q3cjso(txl0O!x>;#6tA*moJmv5;kX&iY+b&=4jM4< zNwRzC;AkEmt-9j3y4t5{F;_)|dE%B!{9J6D7PpHC&-y}(J94wHHrKrfWdFNl*~3_| ztYQZ_b<~phRp?v{&#yal0nDlbjumU8w!+7q)>Z%QV2JBSii(QYp;#ip^x z($W#8t#8LE!*ayHcKW{dqLS&s7-C?KM;7R=k>wz@UTuXsrL{r5i=qE~R;a?gJ33rW zL#$pvaG4OaI&;mo?dx|Lk}pR6$JYnONKO>YdqT~SR~4F@++O5}X-%ze^6%b;!6j19 zVVm{Cmj;c+%FQeGn_Ta%0AT+tU^eJr={p-lpdA{-D{OT^u5xvPeRZeT z6V3qun!awnm3e#fpLKJ9?5rT7VCts^sjDNk*; zz$b&3#t@ATARK_(**_B|ARy`fIM>xM+x(7x{_C9nKc)Lu5RHtV#ML$u%W8;YCCKCX&Qx6G?Yv;smm}6kM_jQ5^ zjf^dz49wqywg=X)d3@;kgS)VWA6BO2{1O!%$>kWPTX}afStL1(5&AN*Xx(mgX*s#Qio^ zZDjo6)CjQm!czU(5CvwZW`5}TP@Uo%N~ZN>Pxn4HL7N%h)lcvrzNWJjC6#2QWMf|R z+Rk?sq3|oYE7~`G5I*C$jBR9pF7MDo>+5T<`+{=csj2;QQ_e3(jf@OI?He3CzTw}0 zzzly*HCN`w0gu4uekd{{-ftIv4_{}KZhHH|*Z;AKU##R4a-nQw_(jipp}kupGjMSD zkw4!X{8B%&kGsNfART})`)MaOF&;oPO1`CBss?7T(UF#~&Wyq^ARDO5l}D!^YHO|^ z#limwXUr}YFs7v#r(V|1S=`O;8>z)BSeJhgxhomqtP@1nSb3)tf1P5pZ^`zf(Gs&n}5N>3m+F`s?( zP`epK=6*vWPC*ooqdbIO{M?r|dq|uM@l?CPx|iA!z^z24Np`)~DkoYuVg5I}&bD1& ztXxo4BZKX_JKv^L1ENvZu6kl~7)SsYv+!kp2mRaC9Fk900{lP$8QLW>f@$tg0^Hs0 zqO~3qau@A~hLYwuoE`#%_TH2VD-{WXy`C12vm@P)M(?<(ZsX=fr92eDTv50w22j@d zR!3h%-)#~1m@61oQt3xhX`VP`$E}O9N3B^?#@1Z+W0FX24CtszEH@BdbKAaywSM6JrAa(oUMe%b#O_=Rhptaf6(%41P&fQl5My37fZNdKYha zeQ^k13Kf}L;Md#e_jNRb6>>ycCRJseNrp@ylWk$zypmLiV9eqBVCGR!Y(HVcCjTs2 z6JF9Gp48_;q$CU1EqHCC7ppUnCOF}===Mj<4@r(q%wFi{UhCrlT&n``PC9zBJB|Yl zS1(~6;WmJxX3YXu!>yYY<(}?-hgG^a10rUy$Zxj3JUV^4k(U0ah!McoV12m$%ixUL zeiL60>wgDU|ID8jD;2cF4&1bmBk^W6+!Q391Ki>6^@b@nE=rt{b@FU~-knyr`|G29 z-5YBT3>HXES|L9%s)gbWu%cIDhs!1w7SQvC@%OSdq5aFHL((E^7LnNUf zGw66KjnxHk?CpR2`WILRpU-Ptib@x4`co>F?{e@hy2VR~*)%eZ7f=FmfcNkYQX({W zE`$O;(Y7>1%!VptmC!Vid*@2dc0nY#AQ2$VG;{w=4dFomoP;J6Y}hZlBb?GYd8(eE z99Nr^_?f!dXC1V4ZHP5}uKbhZKN8G7sbTrkrMe*At0;CvW?$P=C7H!azngjGQ;nyU z?$Hb1inPZYjz(T-#?FP_2D{or#qL|WI=MSC5mx9Af+17Xej?YK`mlN3rEL3#uE50mAdF_66;9^=7FI-9O8 z%)4XER&DU>gQHV2iTrF1Y!~!?J9@ZOWjOKKmY!KpY7CAo2ZMxaFP(d5un$VpBwX5q zb^g> zs5|81M9&DXX4RvwqL5Dh&@RxYhvZD|;b{PWA4km^6fWi|0+a0}vz}D>>J8Ti<LKA4@pNw7OG2Zra8n%J_w#`RsWxSXef{j{GR_DiO>ZI!hYOb4*khfCk$Xm=o3Z z#^-1^A*jD?RGG!}1Nknv7Y-iT2=~Q+hAc$l0M+Gd-`f_&Zy_M?8dO7OaZXrQZ@-p(51e?sY}>(R^jCm3p`Y6p!Jxx41O? zi=Yq21s5rw__`1RhLE1)`fgGLRV~G^Txqt!GCWgBPJe-bg;6ThgwIoiEWUCQ@L&kX zZ%nxEO2z}QQ8cQ<6t|U*J9e4KLsll*!GL1h?W@VrccFOoPnSf}F>T&LjB{EZK3kOUrHXM=2gvk)j!I&Bv|G8Bc z=WJwB#o8Yk351~)f~c*Ng=N$%lCSv-j(*Cdn@H~b>cV#BfK+)#&7GVW_GnJjimIhI z3Vjv|!q_VjNx*-_5`m8lBk7qz^Ol67^%{4~J>D@yD#jBw0PPUO%`uLI_$rqiq-JLZ zL(K?DH^_r3b!{mtRgxto_@kLXENTmkrf6mNR3VvwILenh>7C>Eh2-OC4RSBY!k$uP z>_j^?yVga%N{gP$57wzTvjMD4&=B_Sx?h@3CKhkCnH4X&>a#N1@`xMVIZGjC~tPb%O_<2$S)C&7_nbuyh}3z-Fx}gqEN*8KX-r%UT7l{s3?$q0{1!1EPHm%xP zv#A$G-z|H|K*|j;apOMd3DLTgW*<)&YygSGpJVN;2`E*Vva+%r!e6l{1plxt%2tBC zWGRb|0!wna0SC2KMnMsmQoud%EyCJVT*P21lCD_qxEbbjf9w1Jqf$x_s|-LjwJ`o9 zr5N$O_UQ9Ii0q1eHauW`tk`;iRwH@C#lrM*el~`^P-4D@kf>fpapJ99cuVXMh2m** z2sSgQRFTk0g3TkH@=Y2>-b7=)M=T#9eUN}rw|sRB9oVD>m7fGyd4u&MSm&M z?3KB%3XzyPi@C^z`ghxHWroEP84$^1$udZ}L9r^Jt9g7@Dd+#BYs*#VHt7FreHepl zZg*FvJmGf7pQMqd%o^gjHO$<}G+*vOb<#bvbOH?F!HhT$8v||N{Er02Qs&G)s3&Na z|NNPfm7>$Yz{-e`m!-JRM1>Ju9&sgFnlVKN!e>=G_J$ABRV!CcTvOd3&Vn|(aXNpq zXqcNT)>AvtzCOXp5EHK*w_7}wtJHQU0sUqw?2+z18AL}W=LRW3rLRmRf5T;vO1p1< zm5haB?iiI7pz57v_ntL9@d3P@9E|EYvEJ8evP@P+GZgH{@7pR7^s!MqiaZi%L@~p8 ztLap2&Zm<^#nx4eE}Lb<3P3mGX&)BRk2kanoNid-3BN}%Jhe>Pj;7K!8s5sFbPv07 zW;Gi=8k9(SZe;JhbVHhg6Gw!$QYh?z<$xq0B@y2N599-10nn(`I#l@tgE zB4;}EjW*bN3PE_h!|=`kPq4mJLXfi+QFk1M^^&h3e8;^dvVfbTCmH3OMJ+SD*`KqI z=CE3iCgWS7!GpR0MCxmVEfLmPN9n%oe@7Ig^xG_f>6AV=)4>+HJ4`5xS_U1f`oo#^ z5&$W(XtpFoJHfCLhw+$nKjM1V$;*B~j%D?Qu;LyW8^MgIWUct;^W88`S5cS=%A*p} zs|f8MuGPFyfdImc1<&xExd+5zl`QqyjNp)twZoLpA3U$sidq?zHG(Bfq$^X(;+!VN z|CQXaP)99R9T>|(0a6S+)=;ivk5YOj{RyGRe%4Q#4B;qkp)u{Ko?0Tcb>^0a0CP879+Q4Mqq=cQK~e3f^AFhd|I;kRH0Qb}Tu7H^(QBWTqaRO~VXJW;8a zMe3YVqCkzd2Lj`)F_r1}lOGJGH-vig8`MwQ15Z6GWE>pv9$}=uj%oH zJ0GYn&0`>4hIy}$MWS2@3;!nOW+MUlie+#Qgf9t5-m*V?3r-eERtAiDv|-}J_EqgZ z-umD^#m@v40@36E{=l}_99UDnombmH{R!Kt_$;!+7S0@{aoP3B1(%Ki0e^N#T^8CJ z)AAHNX!$-4KX1ZKpKL9sB}SQ%ds>wNB;<+d*Fg4aF}bKKEtVK+KiR#@f`4Upa$7_O z61B*HuU^H1mSBT#UKY0shXF27sO||*l2oHR= zPV18FZjV?6Q>yZye6bqE%cUlSzZ9d|%p3UjszolP>?Hd|`s%T-9s$Zc>uA%z;4Z41Gzt;K!b2-W#Lefb!=Tvx*7C}$m zzORPXA$|OEE2uln!{^Uv-q~SU2+=YYwnlN!S8?UdZ?x+T3|Up3wdarN5FY|uZfVMB zRjk8U_vLtok%j^OCgn^Wu9=$k(nTi_xswOq$6{bZq}r2rkl);Gi4Jm4i^Soh@u+2j zqfSK|fD~M%G7{LadivuCkQDtDG1*YZl6@*i(=q4O(P9b+P@TAx$dZ%S;)}!&onD@} zkA>T7_zeeTLmotZbyD{oXI7y$caK1@jFK^rNg+D|Ptj5EhG1h#?_Qmd58f??>Z5+2$C0lF|^p$T93y}RE3vcE`?huk1djBhT85?_^^9jZH1PFXshSTWYuY( zgVkCWxnwgaU|t2L_WVU_(DF^w04!aRh@A$x(_as2e-$iAUts90r=QRJ~!tc)F?%AO3yu zjjZ#tIJ@kXo4$>RkX@1X^TKb$^GMDyL74S$)4YegG-@75yZwWazit@q4A|)NS_k$f z?BHfg2gLN&KIrV)he3~=&+vSlM=YIPLTUkrMQftmoOq*eI|Gyic!|>6N`*Nsb2;9~ zYC~&E+r)0N!tC!Gf0XJ5l;H&*GR5-)RT;>v&I;JGg-GDTcovXGMQD_W%4V4o7J|9x zy2Yu^x819NK;esXZL2Jri2-nYZ*)UdEcl>QRPQ7Sw$0Bu;Zjv$#S!he$BtA4s^%h5 z%RD65xF6Pa3Lv-w^Jvt-r|*z04we-lJpWu@-iq)4zIhYmT^Tufg=d+w12BWAhQ{jt zvaD18EHDshF+m{jF+vnxyurn01Ey<=pq^%NkeOuWZQ~MT3gCSX6?eZ!=PKyL2arnaiK@D63`N8#xI)-ASeT)P)*&1qS=Qfk+E?k*oFP^SrL{k||fMT04sq z0fv83mU$ISe83Lfz@4p4-()gMz)r#(tDtNzm2%p_rx*7_q#q%-$s>Hb$_y+Ntz8i` z5w|pVlpekAv``i9)Pa8`uZ^z~Na;htT1`TQ)Jzlv?bMXbsD8!b$gdPY`k@EIuSp|< zV7}Eaf_#El-P-v0K%ya|o!~U?s`Z>*A3Yo)da?Qajc{%5yJ+l0?9gz1bf~%(>G#g8 zxx16oI!ehojG5_ps3XTtk1!TX!l&}7ew@|YH!zVk(sBhFIb1EXMp%9fr+`#aAdwRm ze03Fod3jiwq-sPhDUOuYoWB16a-4|KJ{#`npT5ir#Tz^GBCu7VPMeS^nJ=_Qpq~aR zB4ZS*S58)-xK$lVyS&P>DKJw%11qW;L(lSk)Zc5bxR-8L{VM*bF4OLJUb*1ot{IiV z!6I`fl~2U}u}fs~@+IeU=>h8CNz3GqD5f=K_tL_W?zMb-B?2MbX|>I+;B~kaK{)IF zktA%`n1At})7~bbc^K^WIJ$y!Br4~V^>*wh&}pv|zahgz(>oq|j!(FB@ug}XJ?roS zmu$4_4F5c*CSZWbPZ`gdCo$1_xt$F&DF7I7i#jpI0SPHPad&7gPnD{hHSwrgq7hHxMuhD6eycW=JEy3YoGvOmaSc;h8^X(l zOYCpQxYwvCI?kX!z)orCADkYD*4!LyJ1?m!0TjNB(<)6nr_cpsk~M6alB#V`^H4g$ z5E^i0z=B&0Sc26PdJC@^8&ac&!qg91C*|vWsdk^*dVSr ztEvt?wx7uVVO-7kLMo zQXIKbw2!2UzoOvXH>DA=#6UbWTQPkF3=MKTiRxr4uYgz&i8)a&!I!9w-(w)9DCnVt zSZM~7S6I8DTBwK16V#QY-ZxCRAat?BD+W|gz-sg~=gXqNpIO}PG_I9D=Qf$w2C-Iv znOD;4F5^$InCBw=^+w&-#VuH-kf19q>1Rb9yl(>%Mh%?h_H88$ zoWJ@kN^E$BU~3y4j!ya)9HPGs^e>bd{nF)thpwV@XQ}f)wHtL5!TWJjkzHt1BQPt- zA0^W+z9}wc0fk0`p=~RVM6t{uDFI=nQW>zK)!?0Szj|ddqmD85Qv1=QO;y^nbMs0( zxYAclRtAj(OZ}qEktk_ezg8Z}Mq1Jq`o{Wg6lW)WBi8;sXUV#ezVuPF33R$c9B=-z z^igJ{@L_T(`j{cOW`$Hy(CG6Elq5`z-3-` z4Wl6Ep5xeag-%scj%LI6P!6wKK3}g;PO1r*I%%G5(Ovjo!}qcJP3DA&!{NF=cYxDh zVRqvLs2oxnk8Dk}Xar;^d+Ouwjh<6GJnK5drVJz=Y^F{e2zw`~X*==ToF(Cbm@{g) zNO6pdlkjqeG~CcHG&wkB7h9$l9&J^OZroN3_`W#iJ%6}U*xYG^hV_;i9?3l^ zGkj;|V^z^+AT{750!e;&nP!FB!Q9DYysEzVoVDcI`;apK$f#)8skxBU=j40u&c=DT zOg4<|h(1beZA`7RWi9j~_PUSr-x;wnZN<_hw@zCNa}mps`ne?aJzQZxbycI%)&E!l}{)(*y}Km~EQJW-msb1gZWz4x&4Ey<6GzO4xg){@!r{As@g%LM#lOIsGVhhO*E}YS0{N zs1@g|PD(INPZoY1wm{`_NDuJ)>jt^>jFrt)zvZ+$@eMfI7BrK zEY;`1#zU+dD@Qh4_KHEI6YT9iTTb>^d6ZVqXbi+(FTuaMoq-dpVqPqLwbv_6u&7x%LfY~vnkt9UP zRJ+lYULYSgBp4iPFg3uVm%ylk%^!#x5V}n{1!&<1eP92YH1y#2G{(eD?p>{y>5(>% zAT;;PxwXX#F(?w1nU97s`~4`BnWg*J^=JPT;Ne~*049n4qm@oyN+)tA&4sA|f}>}! z@yIW!hAd0X+$bUik&hJly@4l${+F`PA}LX)sj5}>G{7RZ1_|ToRF+e1PnzUORwdkE zz)SjfB?wO-4VLNjo2xaoF4}`mXuKkq4rN};qeb<0w%P2|+^J&IEFx*9*rk4ST4VUhg%F?@&9sR_>n_bV73wQb&39Dcs9jdsl1Z-QbNv4 z;Ee?H35+&^cxi!tA+tFcZAH_Ule~Yc!TC03X*&2qN>AwaZ2w}@bnq5!#urKi z`cMvD@U-h_#Ht>yu1WS8D}$Qip-a7<{0g^hMts_?uQB#h6jnFQF)I=zl6|*ixG#o0 zAW6zM`K48O%)EZO8Ll}=MI7kM2jGg{W)!ET#;3ilLdnQDP%J)dI z|Dcy-K2JIX@#Agik^-H#!81y@$tvU2Q`MEIyM>032;#{!pFq@fJNLOVH+Xg2Y+Ki% ziJL}z>Zi5zxf|DBu*?&`nTl`E*i5up`(*18S{ZUSyg-(iWr*IZiJ-T7r73IxK}AWd zbXzt#PGYC3Fr+aaR2>eGK1d2;86EiVeacD<_boxVAGf{d>3;q?Z7qT0iqhmP?(x#( zR=(*+XQ}$4+N}|?SKr=~OdVK8Z-!@7#+f$FHI!W1J#p*?dtlEX8{01!TJ1(m(Oz~2kOOIC_kX_e)+Ai_JvYf-c|i>$ zy#bXK=>iXjYU6VWXX=F>>avY_p$=VZ#5=OX%xv~BkZaU z2_Sme-PU<}GSP&LnS}`0+z-5Sv6MEv1moz9BCrYq8J(Q@Gn{~G8fyP$g==eMSV+!Z z^tm-D{P*QmvIaJ1h*auxg>SrF&BhWFv(`(uV&EwTIVlbLdVnX-vLol(#=(0j zQ8l;p$it~C%-v1Xrcx<4YoyP1+dl44b&`uS)XiIT2R6Bvvc0M)_AhDB8!_7E=UP*p z{t9c^fAjyryJnnFFu&1TqNZZliVc0GF{L{1N{&FS$1>RkvB`dV28)i2X?-$4LS!>+ zJ4>pq#RhL!p$Ze+OQ)?HhKt1$aO5_$+S!*|b32%q^If?-4blx?wT;7&T2B>Yi6BF* zfhRam+OR2!nO0#C6s>}NW1q#9J~J=VF^KzA+e|WWziMn2Qfdb^NsRL9JtCvN%GxL6 zVMPy&hk;a^L$E;C7e1HxLG4y~6PgjU&{%DOfx$@lVnw;xv9*A-6Pl^px*Fp@vh^eu z_a_ZdsgLwl;N~U>_hh8&Ov1pYge%To6a2|U+wEPPs*f9`1`)|=KC`$SvyNmQ zD9sw7TG9f=-DVWnon(h+Vnj1Dm9}?sbC3xhe2x$RMjM$$VW|~u@^Yzd892idgseCs zw95B9SX@CXbuco-agRgs4$68cj6?oIy@#9k*2!1)Y)!mlh3&lLv*fnaDn3GuMH@@-@JVgZTvQD?&Cv`3GG%&F+EGa0nTxSQ%`106 ze8vBxCrrVBF^1d(yZR19r+aWo#Z+!=W_@TefCd{Mwx{S&yAcMu=4x~rB-(NFe231ek0KVvoA^J;%mu{BK# zsd6d;8w`L(9MBpwL**umP22?*`hv>~KU!YaDHN|59$LJuuySPzr5u6WFj)x!>i6y% z%gspA$4-`{zr1Y}Ecm2n5O&6|hErgIH8R{8|TbeYQn_8xsE@ zn5>f|8J7E@$~A^%p4I+d?auJA9-XYGTsx~56OK5mA`31*;#dvzFpR0;4?a~W_sGE^ z`Q!GsLIQiHc;&7EZ+-BVK{G8nNhkDBV;KV>W)Iir0J%jYBNT`w)&6*aUH6H?DpIyE zwhN1lF0~BDn z4ndzl_Qwd%eHa!Zyp6)Zuu$9X&OJ7vcf7$2=@q)R#Kcor&JASTQg=s)^n?oFsN7Y$^;rXvmShNRdlp{A_G#X*tUS(S!Vr+V!+~CLGCIqulwp!zp0(B&FsT0&!7Ixz0F5}0lmkx&K@m2 z2z8H}I7mAuY{3?>73Sekg`f;}z8IEE_JOMp^}_?+7~s~?)Le7W*xps-rvv`J&yqdl zUTm_-v$k4Zg5F}PQKB+SkMtOtQWUS8buYDT)ul{^7A8wt#LA5}v|PtE7tFyx)?!kn zIUGS@4_JGxv#;#b{FfAS*zWD|m7&2bR!MjkBPUz2{f~}Ze=3@`=>vdyM&%an?E3w% zhC#|M-ZrlP`m&OHQzvrWlkNpFX1mtMgCcc7C3RFuhtf<$9%C3thjG7v3O6Flrz&y zh4|(7)EmaOBWX@sIid>{&t}{5cf71-$$UF5h_7J++d;)&_GL?6*|Mu4GmK(=Bh2;N6-axo6(_3V95+z#Mlw7GXk2`_XHPMq*eH=TOwZ|;34v_vVvI_{=Goum7%;9G9&>+!}lBTi1APo|@D11VjqZi^W>#zX+k@=X($ zglV)6qaE70ml}-?yU%ghTXKU*Bb3E0CgO{;~MQzj-<50OcxWi zt7tJS3X;SK{Ti_ax;)l5apS>>HyhxbHb@AkFV7Wl{+j5CoKR5(IzZKI*iT#aR%C#b zeXYIizvd+BWK~Ok^gll}F57AIf;ZXRPO8>@tdjeAL7Rm?Ik;lm=#UHI-Z4J_Co7nz zbi@;LA)AZUEky_9=A6sAmDt*j8L~*lVTe%27BhMnh;&elOwzaR4`kof&kqRQ_feHa zU_#%kXUUxQ+-vLt~q$}#%R7lj z$-+5MzDv>F9Og<{Byt&S!nw&O*+OZ@8ag;@z1`b(?qUB8C0jXbf_tl8mD@Ou+Pb9w zBh%ci8yt9t2*M`%a0hukFDDiRN3(%A%e7yMc23qk1&l2k+mkyjwOx^K^J%$s$3{WL z0#{H#cZ=V+1doRA*(HN`Cq~TUk@4e#Q+ZMz%WwLvc)b`;(_|flPXE>W6>jz%snxJ> z&G1|FgPh|7vK37Dd^c#TfXE`?32Qbb9&@>wNR>}F5({hQH(j9MG^8)=rtydg!L}@# zrW1V%6<)`SuYc6Cd=B9BGIWTdTHGSqU8ZD|9w3h}5<9z?H0Y)JMni8i1;ufy=_6fD znz`W|@3b_sj}1;mSW zEGwF&umWTPmI%br!PLyuc$Y{Gcr~-5vm)>&MW_cVCK>>e_*9>b6p*C6g<)_74Z+f>8_AaHF3OV9$k0Vp|~r0QytS}b8%l*%eu1ON|c zuEed3%Fe`{&rt!ifOBvFoKMmU%8|VJ^(9~h=hOiBqnru7u%}T(S5j6&7Z2dPug4x( z!r6b1j|yBy+_!;uas2p_gK{Bkbz*aM_}KzhN1&V^+@75|#0T&{Nh|ONbaDavX>Itc z{=$|4JwCiNx`lCZA^pi#6&1SNr%f=-L31 z*wpl`ZFg|`&hL5)aOTe%ahji5_yhfK8R*#HOwF=+1?hjLIa%NU;V)^$D;M;pF;a8Wb46elg4W<(4fGRL&Q{LKkpnoAM@S5gVnf%J?vz@dEPR-xa(9r0k9pRh^^ch5>0zh}B zR+3is=J)kV-$@o6I-nVM9`HVW&A&AzB{4Phgx>{gRlr$0+#h29yB%uZ;35D1Pw9pJ zewqoXii*qY`7iwBlU_KrUwFUj;N%^B>yJVd(d3~Y?k@xp8Q3%FlcCA!A%UsMx#73h z+aK`3sqy^>U+I?`;mSW3RaQ4QFt6m(|H{npNB!mR=%YUQz&|9>g#ldio0;vht_%*% zpZvxj@>emto0I#G^j$yw&wl0a>AOA?9DoP#6hiyzKccom_H+)-npjTIgC^w9fuP#> z1H)JpTI}NCfY-c$fY~vjee8s`FoyCK&z^Yt+Ggm{S0v8P#W6t}?u!7|epkeNe2`lO zhHZRRc=j(##zqAY=amxo>Y1790f1C|wCL6IR!vow;s-X&f)9K*^Y#q0EkUTaBf;q! zxj2gdQ_Lwyjoz{v!}DlTv~*QU^BMW&LS^JbV<7i=Au`bCH;9LnpEAy03v`o;Iz94P zINB5ZIl8-@IKvDjyEtzrtz#KUbla_s=u{VPR{+i_;wKkwnY}gai~QSbl%>{SSfkOa z{0UN(9jy73?4q0kZgH`-hyiWnhKcGteO6@foTF`>0;2L>J_1^&CPyZA;mNu+Hn(L_ z4H#q5>>!3@0o4gFCsKJ2=my6UnpAMs^fzbfZpd_#yfJ_;yztq+kI_MoxDz5A&Is(+qT151uzlQ(+3KaXM3-u-5dD~851G&f}sfBdvcOxxy#`d z+|0WJ*;L-R^zJM4JH{3IT$}BFFM`8q;MP@!X8G3z7ra_)jCXzzNdA9Rb{S^>0Z8?! zG?ept3BHoP2wQA+xL{_XZECo)dhmGzF#OMl_(_{S&dAtsG@Yf0z~*q)8KhEUA=%EecSbcA z|6=%Qz{xUknXSriny2u!@Km>MU+Xq7Rvz-pyDJ6iaZX+PK&T5%w#XRFXe;oZ@p?8x zhd81&cJlO-9@)kJ$sk+GMl9A-ZSW@9LV$!`VCCkwKlDerz(rKrGv{|7bE|3(+;5`m$l`E&0Bmj&~1$JK~Yn?dDegt zUZvHIR50K#kgQjH)CG!P4|@YaNyV+7HqV%LYzIoWE9Q3up109GUeWTqBFiu6^tG{b zNEGk?AU+#aiPUsqA7P`C8+xgT`G}DE8RG|sjcKQ2iIaKUc8%X^o64ERWJ-}9qnr4>k7PrEpT(L zNV}5x=F*x@dI-DJ^$CeX%Hwnq`8=NcW|_?UKY!fv!eN$E?SU;|UBkB^o2*&T9>r>) z{H{2N^xcBs^DY-j2fqREJrW?%7wqGBuVF9u z`>Y*723M3q^HgOlv;7-`4RT6q`y9i7N9KsDX>rlAI``7U5({Pjd+NHQ=6F4BbK**@ zGseA%mcwy&|5MqEBO#Xs(k}J9LgZ=ai{mP3y%%EV$KSi1clAF{?MRbxxjj!-fD_6oC2;Y`X2SGEG5eqK7fLKN<69Kt!3{@g2>k0oRW3oU|-9F5hx{f zM%%m@C6wMq%;$y2YJswx;;>RxPbo^$qkksP6i%dNlG%nHUP*m^^~$1dqf1_7qLuOz zol@24Q%|`$wTNQKdAV}YIUcTU2vw2|@qHSbClN3s)Jd4!?P7SsgUddsHd)M0Hp1II zYWC!Kg^DKw8L)qae6^6vt~nH!euvP9r|6H}(8CL~>Da?)N2piuaFj$+iM+S+e>Qi{ zsC7fjoMt3p|2BON-U?#ote9w1jXw~b0b*x2`b{QM$@rn?=nel&F6uPh zZ0hFxEj6x>p;GL1;NDabdB$H7zz+6Kfr>L&-sulLp+wf&oqTVIW==y{ou>7;alni; zZ&k_<$hC4el;F`~j*TyI>d$pM=@psCeGl1lEU{d5J?DoXwXjbv-uZI@~h=ec+;N*XML70(}6 z>H204dfbXA3~|}HJ%6@0roDRPb-D9Q4|vaT+|VRFZEY1 zqTNr;OIEIL@4(#6JKr#pfw~a`W?|B%#j85OW`ykIFR~?js=DPB9Fu9j8O#h=k2nUeD@|EDy=e~_;Fy7?-;#2 z^mwL|IVAa_hxLz#vOTr~GJfd@@ zel$Gol3y#v^=$qUOC=g?TYy8ZT4k+rV8HM8DRnYpAOxQDs@k7#U>#gib`vJy1bI4| z8JKW2-zj@SSF~7SA+emHiF8*^^oI4x$`gX!%H{^nVvpvbQ34alSZ^rW(Z@5s3Y`GOOGhRfKCwR274G)aHdWbQUQsQSwIJ=N`&3`BK0QX)h`yGbsd3+$NRuKM za}0umddA1SU*$CjXsP@+>P#LCi_G~NZd++($FL-^k%%S?DTfe6SlI3G4Ti1RAL26Y*+2H&TpRBJWb_0Rz&o>P58n=$l_gXmy! zjBrZ={Gff$c&Uv6e3>SYN$vfFofr2Uw0{^YwF1wLJ&|T$4JRh1)t+)lInsWu{9NRb zPYmL-pnZ2c)Np}O)@Laebf&X)(|AX+ZR6{4e|opSrt5@JeODR^TcUkdlkpv#EaF8M zew-rw3<#^69gK32G<3<&(5L!FD=P_>SkU<=iHpc$n3CK+8_1y*3IQBWQ7?`Gl_3gR z1sW2ZszM4RhTGYzAw97-_AmW$Tdh7)uk!o0wxJd9$hlvexE&XwVDxMBNdN{mJ-Q8V&WMw$nDw3n~!oay>>9 zK*U*-KBHGa=raJl!pM{4U>&6!p0uyi9a(OC#Zb+^QGsJvalgg0kU(YNxcGep<(%xP zt<}khM%OztdHvygP*Fh!t2g6Y#!Xk+aI2u;Y4KW0>8p|E@zd86Mti_wwE*F$)l|Mo zV%#u9U|dcmBJhSao^j_7&M2ocvmpET;!K@?c-@&w-<&s8fRrS^KGQ)CBR$=gYC8(k zD!p!EC)D>22VY9N||e#A+Y8wyL=^YT$owgARHMJY`foW{0xIu z-Ic>VAZEL3tuc?AxrPki37_Lo)9j3XMOIJIF!$HnI5)yDIkG6XP9m24sRJ?tLi|ya z4ab?(6(bSh3@+0Z+rQX{wISd{&vY%=2k)G&PNpYGmLxyDUOz!?T2^Z=>CKhldJ5OE8U0SY1l%3 zV23ZUKu^Le6jJeKO1<{0>E2?wFA_DfG0{m-Eh39HkHsFmmTu z7@aNgp4gR(%!{UQdOCj?A;w^V5+x@7CVe2OPuLx&4dMdwA%rqHqXmF4I68TTPMCTIdLH0{e6 zhPa2LW~5)jyC$)sbmWd@g={vFN;JXKL62C2xRCcZE}(fiAh|XFjY&IQJVU3&&$zc{ z{s+3XTb!81$o&{}&Z9|2F(S{zTO4y5pqj9Drm2G^aF{5SREv=cV)N#P5uxH; z(Qw-W0nj130fX%ESt%5_h}0Cfnj*YD)V#q$JrNSWE@p$={pp>X^ko z_vO#cZ99VvtjJM3yRC_NX%=)Hxx&$uy-#GTP6h&QE;Xqd6KcIqjcmvXUQ9{FQngrm z(A!U12N}S|o$PY~N^re0J#}kg8tq7Q{Y-0$NAa?DM=AP|TcShHMYbg|#|4TXpw3Km z#B>zHjHhcd&w<_FN+zSkYJOIEEbl?|i(DBSkJ$^l;2RwNgb-@~T9zsaTlQO!O^K>1 zOVg5?T?Lbh{dD*bkgdg^hth-P4h#%tRNrYddt6&+zIRU(#p=i}Wy%@&ZK1cQV*7P` zTGsw-&~D!2Ec*;{O7%b7;^_PxY<9nfYEJ=nH6jbVdvD}l!YTB+vbt^%x+FOhR(MZ@ zv2H=xrbq}i=Yx{{OPLy$VXMa|7BfU>^4dM>h$S^pqz_S8p#QpVJ?D8hM#A!hKf}-f zmcvZQD&_gidj^D4^5rfYdBBZXBISPlI+b=K+CUCaz6ZN}v?+HuHDK4V)u1=Z`8byC zy1!vg9`@qg@vD!bdiWW!*EeM3TqqOKR)a6@C=Fa+&g=Hk${{9Ujpjr&=I2li z3t7l{tDrk&4YT;mF<9X`22V7xHd_)%{a9tKk7I+Q7cqQt)}M9#_EzM-%sV$C#4@4u zPI;HGq7F4$@A5m@YnRZWn~uDS2sZ=CL<~!Nu}pkM%suv=&#k;YwioUN*l;TFdE=qw z6b#;D$ih48sFx^zW8A>kJYX?Vm+s%yZiFo@tX;NXRW7XrS8GZbV^Ao|fAIjRLFory zUjh4*lyoXWQZTHJVb@Q~b$!w>W+oG_LVnQ@Nf}DIU}^WPXE%i~$nE24n(0$LTF`H*E{2_~lMH0beva{*<7vi_v!`-RTB$d1zM zB{Ux~kU!Q6(x~rJ^(?#hY2hRTcqB`4a`)fT?5Uw`7 z7NJ1y-T>)nq|DXMyF3~#C$?Nkqi`9fv(IzE?pjNnV##XDNbber#q_Y2g<~(5O`{VE zZO4lEI`Jk!xpsY?eZMkoehzb%{z%6%)yF<)S-=)pGzu(a=j953NvE72_@um5l@IA} zGT~YwtRV)rm~TH00k`vv?ZKLV!E0}H8Pgiw$n=8a@Z)CQ(gL1V8TK9iu_UP?dR+dx zOx+h&ar(lgkP13MyCim4NH*MB$9ICpsQw^z8IiC%43OgxA=sa5ku0qsl^OxI#V}|$ z5i9+9#A8>E{!ed%%b28#Qs)nQk}7{A9EE9CUvrQTF!Q_cpV@~Mh-)_I)iCN8uH2@V z#BI5cVQc~(;|6NlW0;j#EE2b+hGK{UpJ*Yv!A2Eo2$&ivxJ?K(t|OcoUBi zzsL1weV*$F?PT-5o4rt-_`BqhJww=Zy266RfhGYInyf)G9C`1WyuFi~tIK%v`Y9i4 z?$A8a+84Re{z!7gXwl@W;t`+w88wP3zXXAEnfbri*oTPihPV>-hVs{1{pwyz!lg2^ zj){oh8zI@iX(d+Im*fEC!}CXYd40y(FU$QzJ0ir4 zU{S->>wW;tL_7fVnYN#t82-=ZNVxOS{_5yeqFX-}*V)y{}N4NuC+IV_xo9BJM}+FLe0v zO619ePBc5(m1(r#r#*wMS<3QU(o%<`eH9lu4kO}e;?qE*Tqx_z6GLmJAe2dNX`A_J z_!Q75+EzCwI2 z39$x^WP^9J!ah8AP@Hc#-K4+usD-Uu&j5;sGFp4)95tKZ78l?%U?xEVwLabryBjvs zs|sc3kRJmu7tjw9IxI-d6c;z^SZsCkm+zg(&J2<{dPJml$Wf@V2%#J&NJ(&{IGPRv zyx4dxZ;33C5CKAOB%PaZ$8&Ds49zSQV)02YbY0 zf2)8PyRc&rRH#t{xM9_}6l|In4zn4;dLH&TEsP_ZiwJ7t>B~bAxi6*gG)OB&&O8x@ zPf*h!J7%A!YJ$AW0bVk4Ck;9n%gIEKwC-9k-U_*IrKne|+tgzhjO?GAd)DHKLT3RT z%jEL>cs=tj01E957^)jPrIumet#_7vNE7od#1DZv)>a(hARO^H2t*! zc(^B-*Wz#SR8Nsf*z?#7&hV|0v0HVShfQ)5AqF-%eF1v_+))RIr*^8TP!uO*E8k_M zNCXf@29G!>OgzM<&m_V;^isK-tpmsX-OC2AB3s9sx{7p%YE3@trXr*TX?ZgbatR<{ z*}hKFRno{kGz(H#d^PDlz^ij*fh1FvH0gMr-J?Jvr9zraRJxWubRzpQ`Z`t2};O z$7q})T4h=?sL4wkV0_Gsul>pA_D49pl~TN(T|pzth~_PJ8}{N(T4ct4IdWM~ ziHo*$a8#=8>Yz-r40}>J?vsDym?VDyM}{7DgekK}J4RiJ*whchw0at8st>OB_$64& zW^v^lU9zp%^aY!E$iQoP6yGI4;M+dYXTu0asv7>q4%tL!(98E|wcois)DOp+W-VGBJ!V{|_)h-4tl;n-bU$tE| zz1*WQxNk4@2;Sr1n++^-AM%8GJ4nlV!|EQkR+@rU)68OuLkL|{#W42Ycj0*v`>sdW z;vzeGJidUfK*-ue0|D*szbe^eb^4N2ywcsoI2Kx-GhW?ic1yZ?h+Ax1>Pk|(p;Kkw z`=}S~tNBVzx%freREeHl>B7Kwu@hLyg(4U_TB>(PacS z4}BZ(Ux^=wR%QO7E)hDjh^(4eBW^OAir5v_zVdloA1$pd6F?Xi{&M~mz&YlA&?6hJ z*ql(S0!OfOqdg|dNS}m||Dg9g`TQ@9L=U9usvb>8!Np5D#1o<(!$bM6Ot2zcLOQy3 zStH8&Fx%#d~tZhpNt4A=S%aj?|l5Qx8(VcUpKTWRrm@C+U@Nrg2Vj$W14 ztZ-LCK@HhstW_r@IXuNIb4nJi_BsRbjIEQV-;R<-wkYowI#wLN&Iy><;#4|MKZ-w5 zKX!6lS|2+PAgUA{vHas8g~{(KyBR&|EV|co?e2A@H41z0;VwkZzM`o7ULX~*p)T^v z1asbniS3C7o5m3mXm#{yjmTAOKqv4n>}VeDm4|VUkV99elXaNCZdY3pV7BugBx69r zh>#L%W>miCMUpj-k!LiB`iT^&?j7YG*thg9-C`|Z16ierw{R(`pUI2ELx*@|F~;sU zcBcq$@G!i9~Kx@H5hnbbl-6gBHgszTpBn$VP@eSlReuBDTRpAgnmY#P?tJ>aZ-$(RyZIk9>Oq4! zad?yF`a3$TGG~x!Q|I7KX_a`vPffm=1A7$-{{f$e;yrR?>%OpTjccn@@nyWP7nY`| zvQ=-y&XiUs7*jWw2mMK*Qln-3?bE4aVRz|j#&RIv0r6-#DuVKqUXc>@q=aNtZ#|_FZ6hKIZ)G28U_J-`0}MtlAv!J)CCGPd1G~el z7a8lHKYQz1{t0?=;VCzH;3zEqOZdYReb<18rrwnI{gRr2B3&p*V?X!RY)*ifPFe!9 zG@Xq1(UYj`B!zX6jHo1tCaK-FUSsWC%k=RELgoEefP=}$w{wn7n@gBnGt1?IXp>PV zT$+^@pvSUi0NKGV%%`>V_JVb&I~3a}%}$!kkS ze!^wgZGXaf8^yO4l>duzZ=`+-s3UVW%TANCMQ`-KW}>-&%Cem&9{s`xA;YNiV!U^t z1E`3)HDtwAA^zqRZc{~*RkzfLn?YJI232C;P`tYSspUMa0ovGS`y8;Pwp~ zY0|GnF{nCT4{5^3zPQBg{NS8w+`)7e&KlNe;4^x5ntJiqsvRoMsr>x4Owy9;$IKQ7iW();*76IVYj9)l#J6aPC9*Lp z3zeN=HncQ3ZeseL|GTC36w%J?SuK<6s>vQGWWL`I4t3JLR_ zX;UagWpa!i`S+*Ihdu>#@T@*ANsTIu6L;W>1Ws3sXU`O5?7tCdRP~4?Sq>@W4Y-feXV*3S`25t3Rt%)+FeuuCz*jn|}(P(()3Hctx|8bDN{NQuLs)jyu+aD|s* zrd4F=H~ZT7s#Lbi(y^xLh(hg){ireO~hXlsXiR-2Z4D&T2 z^f6oP;Jyg1uSVGR*vnVUUk%c9@u5b0WCILf4Fd0VL zlJYY4Fql1O`gq)ao$C17Xb4QhS%E*s*#O5WKJMKo=v(2i?GN52u8dFRH=!@0$>l0< z>wKfz9kp+!h;BZ0zP<H0FU^ujxp=K-(j$X4092aElSI8`q^-9c@g zS#h(dYX+=Wa%Y?EFrdwZvRMMaWAx0p-7TVVT)wX0ccHEjKc1Rd-#%75v;6_L8X|Zh zz9u0ONgBVRQ>}|!S>W%bXCXE=XlqpRH}4(&8s8odLf(g|<(OwRE!P3%+E+Xcyl>pl zSKk3Ya>8AHWfM+b+b@i`e55*7>lZoD+3OBgjA=0xV|A7JO6gDQ&(gyaghR+`zL94J zOj6ktfqpBR$gz-ed!12bQ(r5KNY?dKJ|pk5vphK?)!*mZ6|=!1!QI$rA=sm zPj=^)J?pmJZ`PI}ST^*D7bB#V2mEKfCr_d7fn?NuxdAs=&M|Mu3BU3{hQ)Z11rbDaW=(e`B zNAW>AZeb5SL~d*ZnV3Lmu0}%JOIE+?)l;#m#VfWrgp|N%`B-HWjd3e+`X8ug5tx?_ zT)wHQ-ggk8O(2(iWXl45FX}6i1!RgZrm_rmiRf@1bQlb_RCXn1bV>%z{5H*6k6=px zo^^tjym=aEVHg(-no~J9TCHj!1m=SFE4rCv0RS<68BN?-{+eqA`aD*f2r|$?Zeplkw5&N9-+#GkhP!8(&Lmbr)|66(lF8^<`!hdrqR!$x}I@~ zkH!an)A|0jVx=XYyA%WB?e;Okz^n2DIG5Rk57$a^k@hqbdE59mq$$S*2;S(qTbGbr+yz-(20BkR3k^P>B@Di)}i zplqkVdT?a1YRjsHJ1=9TvquLXsvjXH{hU~gz5kaC%avJh1@&A9CI^ch;gC;RdJ&T9 zu6SRnlzEj&4z+r-cI>bYYdG>SO6vnP=Pos=q_Q?Cf@j{+|H*y0nq0NR>l?1uETrqz zBP3Is);D}(jtqvhX>zET1-E$JI}7ol$iGeR077t3>4)o4MHRv&BOj*qtK_0Za}XXG zX5|s@&@k*@eW<|G1@Gq!b^qpV!`a)|3?&AJ57No~W#V4`=OFmXowiB)EB=W~k%?}K zg>L4eZp(E49ML@(%@)l4hTVKRAvUsssQ!4ZYnyw}sgE}7f)BxU7J5QKZxcT)+z2ov zLdFZ3kss)tSDt<*4lL@IjzXlz8=^Wayon;c`lzjdVl-UUsKafQV-@m1Y)^}yl z-BJXz>0Mm2SrtBlOPSr>{y}3y4v=!JYN0(bE2ck3SP9!MrF}_dZ6i0rkBJNQ`QMMy zhQ`prh(V*8{MlK<`g_xN114DJn81$}DorZE+duET*dQ@35Z?3YN<}o#esRg%a)?JgiGlg|i%z}}UTK$ANIz?OV5xM!WGWR0b0X8GZ<)>c_icxM} zcHM_AvC!v9O z`;g?p5L}~L>{_hY)ATj}Y{%bto+8ZrWei@L={FwAy}TF%>pt12jwC+QBI#+%ZeVBU zi35xCDz{C=r_Ft<&_~R3j)rvQUN=)G59UHS7gP=Re&DX|=twGgHH-27peIJkuO5oHe>!%WnHPJKWa;HVSD<$3bM`io+pCE;- zFD%Vm2HKcxD0xhR6mEhYIz^Nhvkj57^%iFMDQoz(mfj=WA%_4#&Is>%lMAJ7&rA?z z4O-dvAj2MD9ha$Sm$k6+wd?&iXz~@Iq+UJeeam<}Zf^7Nj7e=#nh|n7%`xrT5OM!9 zA8n_W_s_LQ1Kg>}7y{ub6PJ&JoRd6zzQoO;L0oJh){5e-=jQ>TJ&2}dr+LD~zAdC37mEBMx3 z1jL44#H;X1z(Rr|hWH1EMU8N1l(fO_VgOonOB}6=BFzowh4%gU+o9m>-t$0SN9rhLL3z5Nr%1@8Y!9T2hJcL-w zemYTLfI?~0#2-s3B<#rLROMy&qZp3 zs9$#6*>~_Q8dZ+X)4`Ky)->*;^!2Du=wq2&Q=XUY3%gM>{_uR!w2GJ6_{}wfT;WjvU2J$7i{4L_rr%OfD=9NLeKKah5S;7}QRp?P_5{f` z$mU9(IhE;F7D~_+gus!nPV0+iLuJoYg#*4YhNIL2GiW1dJ*^*AA7V@Q>|U8&MqC3C z`2d{4hzq%IA;_IirV1HEs7%HZVfMN&w=KkX{Q`Pm9Ty~n!&r80%F=m203oB^mSUgw zYHtCG14^yVD=T+8i*yvRW~{A#tm-4qr>S{9&WTwADF?*0%b}0t34uIZ2g%JV+*M_p z$k{8Osy3HjR$yRZlL(McsR&Xka0Odw1)U-+&0)08<%AloKG9@DH-VY@whYDlNCeqb zD*K!cADo%#q_TeLB*l|}%g5QQu8xfS@FVok0WnnWK1Rp{s;~%}eKTOY;9rJo1IPAl z2_Am-37N@CvJ;-nXqbH86Y>7^(N=suHbA2H$q2{dj8B3x~ z#@Y5#9AtpQaypr6WOMWinyNBZl(}=^2iv|G#wj6H2me^qsqSD122bbY0k{u7k!X3< z07+Y%F&z`(Kp))8%r~{zGe*$lawC+9taXCUvP9DkKhgnEO=2&2`QfhS<8Ly(6>ul7 zicz7$nyccxWIh1g>ztAE{H#Hsky4gDS#S&H4-LlS$1yPp996hx%~F7KC>4y?;+%uy z062HGUgpv}mC325%o628rsHc{FpV_v$pZiie+bzJ(+VNiLhO*CL%Kajl zDdn$Ek-N4X_=GY+hOEjnqo$TkqGE~XWVH`{a0L6+SOKwSI&l+@zx@s1>G7w~6q#p7 zjpXG+MI8OQ+CStZ*zCSnoNIm{B7-H5c-tzD@ z^1nr|1$#*eOG--SG;EBP0!2|E@?yayqZ`q24iCt=b0T9+2e1WsS6Z7UXY}K<_@tfW z1kR>m+V*cZRbqa8O{EbjQV!hl&M1rL4xM7BZw5z_wlt@t=^w~4WEg_{Vcfhubb(Y~ zkcYuSj`ksz0A_2Zm9RJ71TWdbO-o@6(c0>{d<95(HifltI!Ifllcl?;{@jdIICa`XHcERcTRX$o>5Jqrs8GCWw>7c*hkNomYl=`$-ujbAf!J*`s zuZ!2Non|GVrgxe@h(sw}{FFqN0p#0VgSRnF0ePk)pepna5j~CMz`pEu7L24OB&JDb z7#czdpowr*(gunFT(v#kRTh}bbjeAduwfFqlqc6qqkYKe#NfMnu{K@|jVLPjJ9zBP z;Q$$89U(eSQZW*qUlj$r7JLWqSl`w?t-kiK8yZwpi99}Q?ruI|+wXt`zEhUVmN4qx ze_8mkG4SeOh>lgma?9z~`3uB}3049sVWqN8Cp+aqXT+<%3fgtaoTa3;g=;lBk77fs zn8t)GZap&|tl)?~$`W?<@Z8;E67Swz(wQ}|sx3MZ?m7~P_qo{*V!w7pm>+7la;^ZQ7W8i&DO<;FVHZhC zWwY@0MP=I_PY)Td?9LQ|vnse{&PzW$HJP%HBML{gP+>KnvGvBgf9d%cl{(V zI45@=mcaQ?QI-X5e=!TYp%IN&PycElC@0L1YE_bs%jdLhopl%rBF}2FHGtRfWM!Z& z9+d7T%3FiFJ!oVWEsBeU&76!gp=cW40_7tUi(#>4TbtKDnAA-LJ(B3l7$YR=ZtqI#nvuYwA`jdo&>X`Ghuv0~q68 z39~U+2LNa4eQU80-xI&G?J9QIuf1bEfbba@;8NFWTSnj=9>7^2DbGh?^I}iF3Lel` zl*8{s-28DX|2W5M#|7lGwup}wH*od&bxG~*ZEE`ZM2bY_(_i!0=j>8+yK&rzimsNI zMV>j_CYHEvpIU?I|8L9 zdjg(rMqEaprt1M_z@W&q(OA$s5fbZUThvFmhm zOjk}66&EnKu74WI;L87&shxK4Vp@55IDN5+v@b&=R}?z;XIEqkws>4zTVuAQb{_V* zv-LL^T}I+1grqkiGi22TY-fc`gFT5Ueohz;m4?k;#G0p#kut?!ReCuz)17T73Diz= zLhK;A8O#HjgQ zNeUwsZ7=eSiGsbUDi&zpFKjAez!h`LHz&Cn7&Vp+6^f*^HRXi(25NTL7>d{W$b_qf ze+QC7%>NqtTjtW@_%*oxh%`S7FG1dCxU2h#)#kk-ebNeGu32ocG%YKcGyw8|F9t-1 zO^s`(5u)2K{~A;_>=9P5bjS;AriE?JimOV?Cs~tlp*LkM9(1Z`z4lbhWPWbluZt#! z=$)NU!4N?XS65_KE>oGOV|T8MqIkhpR*R`r2_{H3LBg7V@;d z8H%)}E*j#RFUYQ~s1|+4dHe;-pf;pr=7g%_H{2WoTBR-uI8l+tm386h7%2GsWe)kp9 zn*QZ75OQQtSGF)Mn4hsWFJX4!cU-wH+!ZpI*A z0hR&FCAO#v2O~R82p=(ook_rH3IwBQV$X$MiE#Xo`l{tOLB{Ev?l)ObhPY>R@_86s zNaAq{)Qj-~-?}nr)nPbNu3dMc1j3^Ba7&7NMGkVqIz(;4rVO5!O>KC`o^N$bX&eNSzu|aLZyn}~pru-ZL=q6ZpmI!% zH!4R|dTNit_>x#DkcfKtInGjgKHhR~nfmgQ7J|b-H2p=??4x4+im+~y;6Nkw+>lz& zTgiP~x#3aFoJ6Q$Gr76x5{36w6QshDOZ|{paFvFFnr%|ZHn=q|`paM~P^0xSiskmw zq=j^AH4P2Y)_%atkx+I34H1$6TrpjDL-ydJ>bTFZZtTR|#Qd=SHO;tmI&c48vWHLq z64dD`wX4#8nZ~F$Z1^ii4{6KbNgS5z+=h1{*HI?fAs~|zZ5M$%+EruZ^X!17jv!uS zOVxWByK5fp3w(Ey$^;q3fw>+|gnSGUhh*++yvdQPKXd$M8cP^MFNLfQDaqvk)$$%$ zTkKzp4Po$wBViyN>XpZYo447L(X?Hqth;t?^#yXoS1GxGgU(vCKWKb_inq)s>zH@) zVC!VRa+xG5L_jC>LiBlNt0>_)0^!&0;Ft@on}jjRK~3RW3|)qA0RzX0uHL+ezzfM~ zAH2~Q5h^32m&@ycVr3HK)0}hB7r^k${s|N%*#XOiswGyo$$D+e3HfA0Q0{hv#GHgAsw9@jPq<=V}o3Ap#K9(d<#6gTTWB01OWg|LeCv%CQkc8{GN<)M1@r+S}RN z|872Pg6ai+VYSBw30-LeR=x6Z_s__&q190xuLOHt9|LpYh?8JGJ6|kW{ z>kggdagi;72`1XZM<0R#Y@4n4RywccM1Wlh+il;E^F#+|?tE25z6biF*(+`s%5pq5k^7|@3= zVYN2?%-ApOOYV;7UT=gCkaNp7*$Y~4SLJs%CpW*oPJizdd>i5rmQ^K;fFCx1%gW3v z+Uuyzo&{70hmcnPE6{KI<|n?-kFVYbEPPzzr7cO&Z$Mv7%dgd*P9xv(<2kRg>dNBb zhb`+hp6T^xIR6>ZcAwvG=D0Yp#b@oHZ3UTZ-VOjBuK%Zk8wh9+z`+3_fIR|1@2~6% zA9tT`E=v^xeHdF`RBmc69(ddD&*$T9;xL~XvbKQS<}OiDXq`)QcW#F-hR+~A9Qu{c z6<_3D&wcN#?+G6C3s~UYiD@4GI9ts4ts*>LIiqK2PKI*}@VsZ>7G&k~qk~Se(54P) zXiY?_nzky){YsSh7As+C>$c6xGCSMHCPnu824er`dXtY7HV#LTt{PvsgEh#VIx1qx z6}rd=wp4koURuN*mW>zA!hADz+eiV{J2Chm2m7hp@KO3>MArLM^cY@}5{l5gltSRc zp5e_4tmW3qJBH@#Y0pkh3(-`JGiFT`x)!R0CFO6Bb%-0t0;G!qOviB719EV7?nLhZ z))ts9t%qyCVdODqvvD$0)a?D&p~Zv-eKMCI5%mdC4yz82suE*s8zwp6J3)>ngx%?+ zG%{Y*LFci|YU7~_oREFz2-75(QFMS31S~`X+OS;r2am@_?`uY+ zaRh3;6#-Yt)HVreE%XAi2Pc zgw3?lh6t;eHtYUFsNoU}&su{>E@{6QYibi_Nb74E&8A!?xXns$3)5e<3MOY)Gb&=A z%(oM&pz4D8tlqu)cZ-YYJWH4Nx*noPBCinq9*jY~4j)bGV7-UZ>Q zShd@#JqKQLl_WC~O_S>*oXZ{kPVIu#5-?u)#cnb6V)oJdGTZI$zD% z#;p~i@{!K661m80UAKD`DY)C+ird4ycOR3XmGT*?o&LkT<(JAJ>tQv+hqIIsg(d_p zH6-YBEzQmNl1R_`WCV_C_;r0Q-Rl%e&n6ZJ`JB=9!8OlJ1bK6hx9sXy49|C z+}0*D)hn4Pak{!L)#4jI`}vzDWkH2cXME#9+H#&car~QHJYs2dU~nlqv0J<^d;|h0 zZrSo;$G6&r$$Xo_D=hy54Uk%pTnacRW@04bg$KX9T#Qs zBR3Uc#ED64AxzrdZ~&QFIqX(1y-7~)ol96`6v3<|^~uMKhJgLe<4-4@!b)1bqBMc| zIo_UL7EX@C5UTdDVa?xW-02a?7td$y=>p5{)et1FN~2H}+#I1{60+(}IAW{TBjMJJ zXBtAgeW+mlmwC;hA&B~TZsMtYVF|G`QkG8VJqXkAR&8x*xPr8=3)Yje`Y4XxHt<6M}pO%m+LLWRk*?8+8&iHbQ+RHwFK*B_pzo%Z$L?2y9gLKcunZn|F-$N$lSx#{- z$2=}-;cDjNzMPwvl6%S^1wo0f_<6YO)s1&M%nLjSmt6OfBC%MAfc+0B*r41_?I_)2 z+km~yaR_vUQjBEuOljwYQ?;Giq=JGCt~vYW|MvchF|o;`bLCMYsl#qV zUsE9^xm#rzbB)HuNI#{Q2XU{$KRiMysJ?I6h2{ULq3xdx<-@3A04sdW%T-c}mB2O$Mr?E9hJehVHIk06U1|ZbMeOVg^pt ztIJXD`@)(JMjKSt8JmrBPnW^RccQ#x&*Emtx)q79CgsgF_oQc!LH)Jc)Va+q@W<;% z3CmgH>#74+E$wJ;%aSDFh_m~d6~u?x=g7sL+au`dym_jm;`O<~qlwFmKJ{}}93F@b zfLg~kq`H3S73gh6T`XJjdc$umufi|uXoo){GW_Wf&+MbD*Y>P8rb z=6Iq+(1xq8$_m-$QMc=}hDlYb73WMx^QsbtlHZ8c{_b~~hHj~fK!!BM-NCqF1Tsrp*}{hcJSxUaI4S)MNUCp{d@*1EYg6agf7 z7OR90afQwOw}Vyk&0?2pBMmsL-7qN*IWEMmvNw9C38IZ-`c^%`uiNN{vqz8v*oTx_ zO>!F|=0aMr(>N<4oz$yK#mh6F&x+`!4?&lIgrzN*)!5h>hlGBF=cu39pvUW_ZVY+A zWI|?;`lCE^(CbZT>7UAaDB19oGx9hxJ4?$!tBlxw$KdZm8C%s>+lFp#)6qN5L9U4# z4c*O)owb^H=VTJoFj6p8c=2G8Nd+asb!dX_n&4!RQa6fI40#1fYs|=7QYVIwW|+8m zi&$Yr<^Vre$;!uymyp3=LtXA&!>7D%>@$RP%fSYLo6~u?%6k4KppuJxr8B|jrhU_T7|>gb z10+v3216`KvUKWCd%w4Ectwt zWD0!NM>eSwt2DVqz6TADUmvlFI$F#WmYgQbfgUkkwjMU2ddHl61l86(&D4a_%h+sz zS`0RMrctpY&|N_I_x0g}pwaJm8LQ>&P%}*<&|;e2Gif=o?hUcRmU#r{Wcy%dcX}f_ zoTuW_omz7PO=vza0=t&id)@Eva5)`p`BBeTiw8rHk=V`AdmC=MLnm_Vts2;F`k0r3 zkGeLDHI4>leR&-1U$CEp`xxC(sk_!&)U+jXj73(8?OVEBhHMhu)1Dy#bqMo&i%dyg z@yE4FVc&SD9-jXACo?gQDPQ5yrE?>X#V2-vY`9G^gJaUsGxH#SJ`*XD5V++=T5&U2 zaXIe~KQSO45M>oU4f3g9!g2LasFYj5$28NG%neX28|fK)`KGs*a@0(19 z#Zi$b?6@)Ept*r6rZRQ<<)I^s05;lPZv+^(MAlvoY33(nxsf{+dbTAy5unL&2jRN$ zz^^0s66YkKVWEMbtP<^2HQlW=bXMuWr( znTnskd2elRDnk|M2|sOnG;Lh3@@j$)!ui=Zg8KnyO6~8U*A$UZR!)A``AgbMo?C@= zj23I4{Uwv{v3rA|sz!KH4D;QbA)9&b7v3uDrTg=Tva9%EYt@f$U$Y2QW6HR-nf%O{ zTPvfE5VPvqdXngZRzX%;Kh3a56VQ54qV(c22N{Iian%F ztWm2Kk47y;6-i2w#w0vtvtr@QQa;9Mbsa6FaP7vw-}ueeqkBITUoN-wI14fvW(I>< z%a;=GZoHt^wNZ7{lk?c)uiqd8Oj7Fo;$0Jn=V7N5eijmq-lS#1TZ{ZC)E4;z%om@Y zIe&cIw+tQ_6DI|PX-jjM{wfBc^>XhFF6jWQwww#Qe%)*e=5^)tF7o5=)H0huJ{aBd zcm?VLtHo(zfIp{8i|7wb3<1XscrS^~o&g#6oe%OZX~m>cLPeL~-y9GcT_9k;V^ck( zb7DeGA{;aeesC8(Q2^EE2*>QtVtVIVmtK%xpAtn`^D5pE9h&QEYQH{5Sf-tTP)!fn z%A|BL^1^j2?*y1%+_cg#okwD1_+rvST@^w-etFdSdE{}umsp;I-oC|M=9A1*C}e)G zcH}i|Hx9b?ra-OdeQm^K68;V<;2er?V70+hA(UHRM7^B*?^shFLbA-A6;lcs-w$Of!=<8JX%xy4i)j zA$h*q<&xi%*2}8QrIg`5pHX*%l#x7)ZGiyGRf#5H_BeFi560S9@L9C zQSZUu7BvcUr>7CoME(ZNEI}q8#movMdJTILF|BUG#B!nJpne`*GmE2?*k~8lNse!4 zm8mKHbbxn#Jf<9j)a7(5lTxMq3}0i5F4DbK=;eFyQAFnC`xWY4bzc5l@w>8>J=xFb zau9(3;84RNCf^{yTrbL~VGj zBiQmK)6JubYi_x*C49IC31~PsURC5L=7lc3q0X+wS0xH!*uhQ>4j5K!RAJ$5AP>S65TA0(t-qT(vJ~?u@Lfnd14>VR|aPd((!Ni%$vq^hg1*vG(_(sx_Ht#H!$hpoP}BU}{edmfna&08$B(jJ|G?k;){U zd?B7r!xdr;dvLBZuSweO>5bbWGeM0uiaOhO!97;j39%Qwle|+a=SSrv<=^)9PM@46 z2E;(?Rou*J8(X8d@^RV3rZy0Q0%_@&4-U^;HN)g%jdk z(D(lJhUO8$197HbAPq#MUM9s!L`7Sv#h&nV9@N=&S$|!$C5f2$DgDS3k+so@>z>_| z`ctb`vGq3oy{m?++Wf4+sB=jhYK*Vr@)Y@dGCTZcq8rErykdLOnTgM@glKFqro?4| zwQi`W7C~js%h-~4gx_`)k?^2^U>oW-vx2mg#6b3{e;rag0dVroo3@3ZJlSddAI4vL z@4`#dly+53<<4NexVt(uh{HD%@sRb+ri7*bxR2U_@ay=9hXj)MEERb)Mi_PK^EiyS_v3OahD;?BF+2588o%o{g?TjSIz z(Wc1g5SKD|gNxlK*g+=0+!*M}#GypsNnwB(q4ok)X%uvW2pYg9e9;9%wDwobLIxd! zIezf<6eK}*d-v9K%j9cZ6Oh!gPQk4k@GlG5awhDi$!!5$6_9?p-BxhFIWuN6CY888 zN`wxJ#>0OMN?xst1iA*Ze=Fprn;UF|kMX2d{UIn0&rFjXc`@6&OpDND$V2^J@3EOh zAc1d03+09ABG8#94ww{<`O#_x&U%HVrx}wlvD7}6HT8b6GMe&@IVr`r$HS|B7wn$Z8RJs-L!d=QzI^M-8Jo6w2ko7$N9Gf_B=bBWUB&{=`Q|TPWf+;~5 z0k1c{eCic|Q=NfmhH3g&vsYa?y$e``qUIcl3t$D&IOH8)fh7o)V+5LKJr>E;yJUSuY1t%*-tTrf(J(iawi|D%ismEZN6Uavn? z#306>-`;kn|E@JYr6+TIqMSx40Rl4R4<$&iNpu*tWvD`ZsS2E^F!RWq8p+o6;nEE% zD=9zS0{c!MlIIC1Bno{U8_|SFL-_VZskypGYF7f?A%@6>+GC8%H`uI9b~0Bc zKO{3?%TLtak8xc8F~R}9bl(Cx{rfw9UwWqz-1r{85?eeo-IA*~*T($|?C3%PST026 z@FZ(bH%A~I$WOMo4Ib>`h2>`^b&HP2!#!cq(gfXC0*y- zFTpNmzO5ShXxITxx~M&^3o1n+npsVBeoTkofAL=vT(ePSTrwOly*>D~0E~YF_a8ON z8>P}lVX;<`05Xki`hSi&8qM!3DAB#yY@DtpE}lloJ|k@EEUR_h^gUgGAO8eKW=+43 zTH-K#%gg5aJ#R8aQMW8|V zu_;t;H0-aLj`d4dNoFrk6ObA-PWEO`STH@_k=tsZfCn|lewZ||p|8u;$U2j&>>;Sc z^c~{J%Bp|f$T$+akutUJQDk0O5-MpSOL(Io-5%3j1x)H>`-biuz4z+_Q+);Lgd z>vLCs@}K1SbAJqLW6R7IvNRGnV?nOh-*8|s^iT=!U9}eIJXAkN>iZQu9iSE-Omjw3 zmPlie^pF(aix&}hxkok@@GNJ8sHE&rT0x>Rog}F6hx6{~fMF#Rb5JmOQ%Y!pb_MOL z-V$p%o?$5fHV>0EQ_11!z4GN&SaGw`7Islb5sYJ7Mf$tw&*K-KXZnLPzdE19R1X`- z!mMN#Sa4Ipt$~kL;yy!7VK9xoAk(8eJ*>#7KSbQzt|#1b!gJ$Ua>9dId61d!=R4BR zc~F&kEVDT^51b!iA-A?+1Rp{8O6$hKMjD1LG7>K9%u{=*Vsef9rHA?Dfo%DIvI`kh z`C~!=k!iKSMo2jxJFMY+LYBTKWlQxZ`+`anFWuz4QyM^(CtMKz;CYV%ilHhR_qZnu zyBV+CW#cLy^wBfw!ZbUF;9Hwf|DocZn7ZOrXvx-%MP5W7pP3JBXE>RyU1a_elAw!z^SR9xdkti6w7aS_v}9T{Wh|Y*NL*M&mj*UB$3dFUg}{^(8)W zB4Zos&9g8JO4}=zKRZ`jJnuk1NgM7HLwgfo!4|^JD_%G;1eQ1~fZjp-^4X^E7US!u zux)3^Yn@6T`+gK$>=mnV0PL>HF{om-n`2AlMqHM)w55@0pOIXRlXm;|dYue~teIKF zbL_bOq-FP5@j~j)=Y_oqPty52z=&CFP@mPnQH?sym#?VND<=;GwLvy;N5QZDS*3q9 z*hUf92fs#Ys->o5IvqSEL-AJtBs z!t(d~Bv#s6J!hsi43;z1=$(v!_z%}w-?~Y{>Jw${ZXsJwGqG}1HghAs>SlfH)DHdx z=?FaN_Kri6tn@}GmN{)MDNx~Sl!8=fXaOX|^UxxUHybuCaZ81>!EOu?%Y$$`h(2#t zZ67xuXfUp0sh+T*jq1;&`nz>7LV`&TvG{$Tr0i~5ez24I_6Zk!XxVXwjflre&$MK_ zv8ssooDX@37-0-pFNskp=I3}Lk4!%|0q-W|^V}g%wQP3yxEEBiERlE^WK}p4Yskrq z<~{I&U}R3K`%JOp6PTPYP=ya-1Ad#ZJN^x*i_f1uiKVJEBdGU(MG^Grczk}|fEarz zo2?MtAuX|4?1y-J^>7=}A&NxZfPR;Y=Zw=~BUj^wjBnG>BRs#(72?VumJP;$35?x# zf@83Br9oKkJ%Mx3;$pqm)g0q$or87S>~Rj&2|(zXE<_*S>#_zf;C1Z!RT0nT^Z|oR zsoR+vaq~Jrv5;_1SQ}Gs#RZ$wt*xQnoel~&M`Jo4bG}6w3FE^u7}>N@r3Gkk5vFwA zOktQ9Q6>!Fsk0ore;v{+-Y211C4kpl?8DZPb!8@|tFQy)eIdhBWUMX2<1X*4b7sO7 z`G?Hf##J$GHxw|qoKty#U4;0EoI%o0vZC{Oth(Y>QP?{t6yQ$BAGlkb!}|X|_GbC7 zV{fMaH{E8$XQXHP?{jZP21W+<|4$&ls?E^J*t(SzTgA$ARN{Yy{C|hZzjL9%rpj>n z-Q;6W>E{!>?rZMNqhW0QO}OPj#;ca0wSu5K2_~Q+mk^RXm!>Hun1+XpUsZ5)eq>@n zc61d^D06f{cskUc<_wVZU&sSH7$Hy(j$07j9hm4c~3`ko@W58Ab+|h(Ap@{sNg5$%h6Cp_YmSzz2zHfp1 z#%5O54ssW=%zEoVvH-vU$UKpVB5m1_T#1lAeU+8~Jdwn(pvX#ZP5pwA`ljalR^B`R z%(wtRX%bnY9r_}^rDSe=QxSNIb=pE@+HSL@b!8_uCdL;AcQfsARdm&z^*%bWvf2HR zwImL=V(OWGSesj!9zDoP{4RJ8dRb<}P+MgK%#hy9{0=cP1EOoPuWMqtd5!*nHM%yv zsbbQ~pthL&rUSC{%@0lW&97|?jh|zkV14G^e3@qZ{T6!wdwN>N`nqp^PhR+*=Nj341^67s+W0c^;n zX$j|7A5OuXU6uXlDh@FGi!<5u>rMR2CihRqzw?Fa{>yJioN~w{>nnVrgJ|NNs0eeGFUALhpOK(RWr zlN;)*2LgJ%1*pReU3CS3De4k(`}vv;|A(k?_Luai*AM;Yk=k(Y%4{EY?xQ9%XJ2>u zcl4G|mh%@>bZBL4<}G(#-hs7_7P5Pl1wa<0=_wcK>osGesjUhls zvxVsZvPEik!meg;4CkGuie+vTfD_R`ccV;8X;0U1^)eN=XHvfWR|iXQlX?1m{ifc@ z=GUJ5{n4xnZabrkZTW~3Z#6Wnp%=hBvMMq9f;>*96`A%>kY?l3MBd|%RAREuv)OHH zK!MHpCtTOL45`>yrs-c_gH<43r35lhH{HUf5cVe8AyWLKj)6z0hN8t&vWNWp`S|@E z&AT5V?20UQas^so=-nj80V7j5@6k}vLfJc2Ro2pq;wzPA%pzhGHrcFJV>FghQULwjWpmmz3Sm}T-D4Av75D_#Wzoj39y&foip zBc7iF^lceaJTLJa+&qipr~VIJv`%}lzcwAf?RwZl*x3% z_m}p10fp9#IZ&z+>dF(bl|F*Eg-pZFc#G|#8aVNEo%(^ep;oI5aP~qH2Z`J6TSX^L z&*l!#1rar%ebl!nQyH*~qQ5WrJeXq4L!LE$6GeG$hQ^Ox>59yBynARcmZ6y$Wz7XL z&8}4T4O}3KjUGhmuZit<4FIxiQ)iz>HC~kOsaOYCn6y#hN3KP7Ug<<Q?a9K!TG` zf?Jo_N(i}H+ksc|7`RYJ=^%bbfHc@}7hwb7uRy9I7Ie$PO*jyEq1)G~r!^rKv=c3gko|N6ax?vSqbFnRBSQU%wTWnMG>~d}CqGAjqiy z3@52h0;T^j&&52GGLk<#dl;1}*9!bWq}=hLLkXnIkJu#r;-t(kVx&>}10&4nW z47R-8z*z&|)9h`ScwY$;T+*6dWdVTBmo~DUEJj_m1rpgIoQaP4L5ypi4fkYt@CQcy zqkr7S=pMnCsv7ceMvrd=g9d}aLt6NA9~o~2`GYdbaBTM*c)&i=co9w~jfFwJVYOC{WM-E4pTMzqtNKR}}*NcNvE7e2wDBafVNNq@~U;yT@g z9u58Wo#X}CAo+<4w;|z`{KTAZ?RvkbHd+C-;^LT|maNN{?_MS%Z7xfZt8Z|<1Rstp zif~k75Yj6|Z{$7C!4IdR%Yn%HDeWtZA8V_s99X9ui$)jd;dSc?24>BNY9|c55u&Wd zBXqcV=yVyng;L>cFd`!4?U8v!5k?w2Z?f1%QYOyX{+3L^5sqW&^G~e`@kmj;=f$mA zqe(=me=V_agi@buwrNF9$YG&S1AdWbzCjw++`mg9YTjRy0=`hh8JEB&I8_iY z?zwt~->%e(ndh!dXKqL{yU6_I{j#VM4AkA zW8B3IlV(E5Jye>4G`PU1TO8%e(-}5g2V<7}aD2ZV{Zv{dLdp}xFDi0kqGHq&D@SPN z%~~Tw*nu_}cPCL?w8j8ReJ`Bl5TzKY8Veo1&H6J3BD6O@fcKE=+xn|L%B=QIf#+r? zgm!vXBR|WZD`62k^SARV&JSd+Qt9mjy(E2OjJ8-btaLQ3j|RGy?n;3sQP+w=v8%S^XIU@@7#tq8Azzbs6)%Tiywyn{s=&S0 z576@cmjT+r2P9LjmKDgoY1GBqcUL|?Z_+nBhCJwN2sqTxK zBZA_MZNFVrh*ja8YJlE3T&FHN*0K-Nr*}8lp@JydeZsI`(5S*Q?N4Q27i9|rK2_pvLVNT z$eDp?v;hF0`8GfVuRMZ?9gv}e%>1P!#+6;wXa8ycDWHgjod{|O-zTkzcSBW5a{?*P z)Pmlk6csERbj9t&H=NSBgm)u?xC_fH?k)@AafLdl7#SUxC6j+Lrfdkta~nL%9!ELq z=^*2xoi*S^2g|g!!zye%aT9fAY^$J1&@{jD`OJsCe>Qf(mD~cMs0qFi$xBi(kCSVxX_V;3VZ{IcJJaYN}M=r*9y#hGmMD!ZqS4I zACwu!@3ywgzB1_w#ZwoRpmW5jrj)gXGdfIamY2&3HnDY|3>n*&qlw(o>m=)rQeMwo zl*X$^ZeA_X%Qx)ZDMVq(S{v~Wk&f17uq z^7wRiPw0}EH-ROLV~pV6Y%kd){Q;F8H!ERrt0HuomggN&$LeOVo3T`(7%r;sAuEOh zV&t1 zG`kywBt)7mHn7)kTPQD&J(T_k z^t3r6na?;wr9EQ$T2Cae4U)qw1ENnxO05XzUunf+g49lc@tqd5Z1&3tPGWd#i`{Cf zT@Z%AP}z6JElzzw{Fv~_U|xAj5kO1cEJ;gD4HOqF$hHR%icQ&jI2{I|5CXt!M#I`a zGEm_=JA2d;X0aQMCM!F*4}Z@U*p+;4J%ztr{w~arycY0wC!!57eNi=ci(n(}{i#ij z8#Df~P;pE_bMK{7nG8*V?-o41$5HbFhf~ZwAnhagLER@mwZ?nTS$t^}#&9iGnNW+~ zgx^n3m&-s)c7X^YCM<)W7*k|)T^g6N4V(gHAjs3n2c*#ObE?daVum>0-*mFb0!UPV zX{)xaa)=TAX^Ts9zR%!t#u&9JwzyQTgu+edrInVq^i}R}c8eiHa$GgH(W`EuNOLwM zYqE9GengtaG~Q1* zKJAlgLV%!i*Tj{;i?CX*H>waE$!CZ#OOTXNhcE{w9;w?kYR23m{%5Y~ zIuA2wF`as3V65;s#a}eGwd8?VPkKw9u7cpo7G3(Ya6aw;3R0gv>;^KpL~>U0R9SP3 zP5me2b2nV^87=0oZWjR`P-TG_^>uvXTN=O2-vJB75bVElogcthU+<5g&}`z>u5Y1w z*Cy_^Bnw*23EcW6X+LhcE2I=mY**^br7qy9Tq#{~;G@cgiDg+b!8~u4Q|-ALuNLeP za088=xJJ#IW|X{nmNCmJN@JfqLps6Bk6KwtjQcp_hD&aCf4pT8tofrZiRK!405N_h ze7xO<8?4aku}n8WAE`Ff4kUxl%>-Gpz+e7x+fPQemDgcN1USLWoVFB+E8zur$y(ep z+AZaos_^I@Q&)>n9=Uls=v;E)a1w&vB4~OSC{W?dRLm;AlZlmVjc}d_=^Y4Gecy%n=4g9@Fx=w-y-}+JGUu(rpjogsr&A~b5C>b zvEq2%Whp=M$ii%3A<2#5xw;Z9b?>U1lnwQC2*^cpbuqA@~Z)<7gJ%F4q72&l$|E7|W9&z_N#UJ?b-{E&QK74M!l{?N{A*WxDs6nDkE05qU5EYBNX^`sn(Fu z+Sx>0%Az7_(^Z^lsRWfQwLZCS-|={Q&0C#lVH;6i0N;qLu|IxtFQg-JAQ`<(=$ z0}#|qhVehaIlN6zuk`+g@0`W*b3xN}oyY?4U9(=9g7!|Wa?bOnP zm0u;GscwbSd~Z2`Yq3V?+e-|V0$?rdFzCqA|&Je*{IhM)T>~z+K*T00tt9+(F zElm^2Nuq4klv_pv-Joz|9fuD(XG}$27E)t8h*`g6u#1Ktg57O#K)Tyg2k;+0$ zcL$YIAgq`n4EN*5$4Ov?Y z_8Hu$xDNn%n`g&w6gApavg}F)*Y;$uh(ffgG(23b)l$kbU~D`o0ArXq_1Wx1?{3a@Hwh zlW_8KQCjyebwaY@8Ey$k!Ps;8{mx~54xa0rFoe0b>D^Qpp*0%7{H|DGDp#t3%hj5* zZsOAS|D1)4etk6%RFN}pGMV#P=VzCJ2}Dro(|ewNG;+APM6GCQlopSYY+MtXL8@)1 z`;4~}4j9wCMi%%S-D$B`cb=BUP>MVSl%BN#t8}fer6DUnuAKBg4B0nC7r-Yx32_nn zscRxcHs@1n-Cg-uk@p$iT^B;q=hZ_YJkP`UdJ)c>eL6GA{!JC$MX8i6j!E9wmK2rP zYr7PR$|NI`cy(f06UF^+alll!^u8366OgYpi}DK$r4RVI*%(Q+8%r z@LgRA{0aX6xqblWbYts}{o+V5ubO` zZW@L37>#Fo^3|beQCdJ~!gxb4jX8l(VxvndOUiay)b}ZB+eLZ!;r>I`2o*xpEtwiD zCZ9TvBV*^z6C*&diYqS<`0q^Yozb7p$|JTBxV2zL5E!PZX+NRRu>P)K|z23q7eV%sn) zYBUf?A*MXuPpbv{4Uc~reQo46cfNS7Y0&uEahl*hEZx?^p?6t{XiF(LD+rgiYd*F)`nHUB_9Coz|d@hFNc0E(}uOC-VN+i5*U;B zN;J75Ohz}k7Z#11=ZnNi#(}A6ATa!SQFRjv2g0Fkm;fU~o_p^D5}Dq5PEOY$V%~&i z%WRhZY$SXLaNBm3=|RF@zDr9W#4<*m6FrUlRGZHT4$|Aw6C6 z%9Z`m)YxcRD(;D9f=&X8LeAznV=mCSpP&L-wv`Pqii~G^?jvwff(UG_P*Y7|z>cGg#HwBcOIR-yT=p`WVLki4`@Zy%JN#Tdpn={i=JYAYZ_o1HIA4%K#}<^K0;|EaeAGRQcl3cBxkAN%eAYqh^knT(s$n9uso{;;^B^SPor z{#;RmNf0$xfV0HIi_?ooW^b%l*^!L)5adw2cNy6Xf2cnMhyv_IEy(y&>z@Y^iGo<^ zJ&iPQ9Q|=BExMSZFsG`FY^Y_~FAoGL!KM;5%JZD86+S_{2x4+PO;&)t4N9N4%ZqLA zYv>|F6jN;5X>$H-b(NjTyn%E?5~r5JFW?4Y8qzG7zED7?kCa;JL8z?C&@zXW3_9}{ zogMB!85gfHFj{izj7T%-o_>DzwNP{0xMJx5Rfg1$`IYL}jox6)2&y$rle9sawdH8B z9AWyVB&5B46+uRuWwU!)jB{3Qj3|t#t@+?r#nFF*ddK6I zczSpf#Ow;#A&;}ctd4(XQ=U~5<15{djSK9kq7INxWffzX?F{=b$9NV%DqA@P7dxE( z#ob;3>4s~;D~oDp=uJj0LZm)!sBS=KBgI-Oq1(GhHDt)t+niTuZjVG5V2vy9!IqG% zIK<*9owvwr#Uk)=4_iHC)9v$J-DW`>6*sn`F}%YG!T9bUo-zNfS(bo-&9Xg-lC`bM zTwiO$s5Z@`FqVE91nuXysn{>jLRzdlOXhCmu`(% zhjz+Rp%I_K&xY3}(u<|(xG2+b1zIPA6-6&*x#|$ww>Ro@v6>a=A7_~F!Hvm@pU@9y z5QT<{@cXYKy4*KQ7|AMqfun%&{RujzbQ`syO-C~79Xib6_nnrW#!3xu8J@9#x|1p1 z&=lgc;-6-diC{BsbLEpZJ}f>QOT@TTs;$j-iTke<<{@t^t2Nz5*sr$u<@rb4m4XTV zjfcwM!dGh%%N|LW z&G37=b1gMboXntVPs7XjNoy;Lhy1$uVVbeslfE(FLYpf}i(_Dsqz%Fv?}j?~d=dmQ z*qfzuRlsqCze|syfa9`C_#R)t{JY~p{x8D?vIc6-pyW63VQO`*5?**c#uX#h`E@4u z7JKf@zgzs48Galppg5II6EIq}0}V<7~$Yu{}CZ zng*NXRG#>9%Lm8E6#EmdTmai*dxav`Ty}wW$!q-BFbUa zQ8VMd_~2%2qx(311m4GdR3s+o%nhm4b8e02(9M3eJ&{;eo%vr*>Swc`1%?M}_I~2y zpv&acp1X8B4Xfm7GsMxP+3@Ji2(wUEa=nE@!5s;~6pVp~*?1DIYNDjhK7|*3+)-km zAVqhRz-ytRIkuFeQYTV@|HC!seisTy$4zWG&;(Q6Ju>7ir0IGpI(7=YIPw(gb!W4` zUOG4+*agqJYDI*A>dP}$Eu2IN@+%Cn;)(NrK*v+n&x+~xwZs>eT(=^vS7k&5QE|2N zi|e+X*^K6Ayzu>cbnhhJj8gOFaJUbZJX0>NvnA90o9>x;#_XlNSKw}W$%`u|7eai5 zp>vtGZ03~uN#+gPK>(M6|;X7F4Pghd@9>4sx@IMDtO*#&N1aG9rVIdD|c9}p(PGT zt=2Hynw10OjQN%0BO`n@h4S_Xg`cwS?*SnUvEF1v7C0{6rbFsHKd-_I2igjG>`qs1C%<2wwi3LPO73|K^LC& zxW2n4gyp-3o=fKK%y2(ribzajoK?L+!k}eI^wAV zAhuydWg)q^1|(3m)}W3v1le=A3F&3Aw;Nu;MKxz16seVp@@nqs(K=osr4Ahfy|X2g z@wN^>SIv{}OebOemh6J}Y76gPmO4^_DaM{PF8!16Q!%!7%kACdMFzm-{nd1~XX9+B zrqo_>%*)1H(XT(CK7)tsG6GL}avwmYY26KX2uyQeXYGspQ%FcrgW5E9s9+tcE1v6X zCmn!e;R{JV@~>_jyyp_8uoZP(lKm6KdN(18=DC_!Ywd;hGuoIFCtAwoNRfQ zaw={LSbHpqE#nVV1$>@$7g?LpwmXdh-GF7OX=*oXx%cG>rV=XodpQ#?brdxe=Rur4 zfPbhH{^+6P0x>SDb!D~&du#DEhcnnxd&7sI5#=yekN3lRuy~ahsDm$^1Tbkghs3_i zE;rsfDX8aL7Dl23f?dfGPlCzQ7r|S@S1<=f@vSegjhV5VD=+^TR?LdA=p<&LmV^rC z(w1QVy=Iqo4Wf*8Sr@S|-o5X5ySH2K8z~JkzSMj)OVtXZC=Eo>xX{3AejeWLn15-g z+G}oghD)=<#AOhmZ9>FhCn);!xFCJwP^=$tQQZXN-@Yer>#k^ysL=AzJ`jV+qzcDojoWSmO9etwtL~R&u%g+Te zOyb15FEeaS_PYcctja;8Y{8Wg zWp9rloZvi}fWA+Hpo!D5ZH^DZp_8Z6kWS@f*FMdiB^EQUXNv?f3XJk!%_>an>zrnmN=Es4MaRFUH=QqV%SkgTro^$FEbG7R^JX7D=FDyQyOfEi-bB=kv+M1 zU_1TQ$#yFM8mBFbVtfhss|<^PKs@bOnoEX}jTYXc&k|&4#x&?$&X)LZ$$Wr0-+`lD z9t;O9V6K*FX{kbD_ze@idPBN^CD<(uQe$$2byAI9O%qw915OiK!79B$P2Io<8g zm|g(v!%T*P=+?ypQnh=Z7enKnsp||PR6_UlS|wn*&ybw<{VuG_k_YR6ll+v3;cSgU zK9T@7WXH?%DN>%5(zKIR6@2Bab*PZfxXKTMyAd^isDPA|=f=tGOhn6|U_AFX1Ap-T z3rT|WA&fnq3Fmv%UxKW%@wW@eABQ8tLd|OZ6F^o>3rw8|hUIsvi4=t5#Fy}>A4xJp zRbSMR6S>B_`@C%pdX0EvY~QLyg#SgXcvd-kMa&Zt3Su7ssT&>L503ho)hHg4{MH7Z z%-mcQfBqJ>)sc9LoC{`l&n{hH>y@#Xfn9M;6?zhKB1@ODn7%@~*hJwN>ujF$!S(?e zcS=SIsT1CPZNfqRaMxyJM1?62Mx6;kae4n-Ew4i+&6pqBirIt^k9&IDkbgEw=f1w6 zs{^{cZ)m+N+)jR(FjnJgabxp({P2Qg@L8QG0ln`Y;$#zlEfxl3f#%iK*Q`cm(0@6n zFXS(toXXZW%;sefy0fsXSk&a<0UPDWUByP@9`@rJbfkbWfsOci@2 zjCJU6KtRRtIwyPAIfiC`-GimT}B^>UoiGS0~nQy6_2nR2u!*eB04K^M?<&anxiZpI!BzZ~n&xuJ8$jj}%aOg?0 zMTfBIK&71dJ_i39PDqNDmARej_}@T6WJ*$SG7b=DprjZ$cgNlYT)2xFz56@rR1tN( z{pTYy$#hf=Y!iwz*4bf=4n!xx2$eu>kYsDhtehD0LIqc)&0=Ypn4{V9c)^9^O;qJP z1lVnS%ioJ6za$u3e9Xw|;nc3VmIoqXmA+`os`Y!a_a(_p<^4h@m~Sm}E|MmECR26v z^I3Yr+)HFu2agGvlA?*pR2JUg;MSs>+NTXwE+vQHgNMi9Lhm1VBJ?R)ihWc%!>@dn zHw|Z{0=|0^%w-)PLs*Y|%{I&&#qFt?W}(q`Abjbni|HXcW-@n0&i#v!0*|o@6;F*} z`Ax85(1X#ZU4p6%C&`XLV+9;B3?z=7ZwnVNZUj!W%m;$_5sz9yBN=m?wU(O)EGF}{ zg~e$yvNI&Bv|GBa4#&CZo4mCWG6}D(#N68TIAHOVhgeWCnWm1{yis{2dM2dX;fSmp-y=I2nA9TBEZD@8xKok8QNQ!Py+@6UdjKDl@tIN)}OCRUl}CAQs*4JQvSH0Bc4KSCj)1Qgg0Of={MIiiq37a z#L_~)A{Ue*OBRVULT>LH38|Y1D_V&@0WeNd`VCHE(;J%Miyb-7&W>iUZD1kd?X!>Hx z2lOS_ncMGoIssq-4b(3Gga)XxdP4$%^1;0*k&q7p9P$4Ghp{UXge%7{S1_ggaMiYT zMx^kT=UoH)NT%>5I9{1I)38Y9voIUy!A;=q>wUdhCQ+#u5BX4q0(VG&Kovq?hpxv* z2D1YHJ7luAC<&lP(JKQp4aj9D!SlZK5@PhHB^Y=e?TA#wNgC6uTwV_SR;$`G-hJXx zR-KQZr_;V1!{Sei7-#L{at>clRR%bvStnlxtI6x1??Qq|w7t{I8CgP9Q>fH^=T;^4 z9!S%43m)+qsj#JXQVHpe65aOzM;)FteJSd!ZE)ltq(;9S@Or?2c##I*#fTV}5`F`& zAc`JHlG+0yNO#ysciLM78xI20Zzky7B{&71I?4$XE9}4j*InvBI1Ru)p}zCtV1j0c zAgw7QGDA_B7v(PKp!nETVl4;jK>Lz#2ww~9#X0m=2f!oKe2`S=rUS+466LT^$~)`9 zBkA*5_Mcz&HZ2vxS(3>p0Gvr3p*jmj-Qxr$I^&5Cs&9lnyuMlqIl`w`CW$ilyg>={ zb;}(mEBZiqC4UqzzxS_0ljU8>ndE@eQ314Obq1**QjX;!0;G|j-3b5f%CA(E8Vic? zq=-9!pNi4dQbAYBO4ahH&HYGL#~i=MinGWlltFWMc@!~GGp2s{*qcKF@hkQjJGtcE zKDcsz?F>1vR`~g#a74M~cQQ&>j<69xk^p8m;HKjbz%7(gg9UYwXO3oF@)&;-=E3av zvF|}G3{`!JIDj8N@hn|$yDAfc96L~Lmybiu?TbDt{cea}S!8OrS7J zo5C z)iY#ML`R~Xyi2qJpI+>X8R zKpXKoQr^zE+>P}&YeL(nU4k$xjZaE5oBz51Rg$=rM+->*Mj$v>6Ftw};q+~_7YQ=Q zHh@(m*AL*h1614PxktG6$?)n@?Thw$;glMU=$Ob#jqL^Mi7oMQC z?+t&%1KNn+l+Jj+WKo+eV}LdZ?x_?=&xbE3M;joWD>gj&A<4xnVrrLe2hC+Hpe}g8 zJf`%#OY-s#3`^u{-z5<0-es3X1WEW&oM0=y=zJ`DC8rRrm0#YWY8_5{r3c`GWz5f6 z0FxVp@#3Pj?@$hBF}=2hW3A{c!QS))_MC@qB8ar@U9RPy-`xnMB4kL`2dp@{@~d2U zy7FpHW?-^{0_FUjM#a3vsU%5;$jKytz&MZzjUcxdn^Gde^*)yu9Gr(GZvcxNL(~V| zw4k0dD7$FRJcSz#wTIn&2mYxs!8p5PN#dNwGeu^Y?1W_B3hcV~QpWl=aB$3pw%;=Ps?sMyQxbep%Ct4TZDA1JFH^vWar<-0e=Aq$-8J{ol=*%O zK+t)Ss3yA7O;eKfdF{wjL4v`&NuGp%&ClGPJ|_MrSV<-~Q2xldu4z=-1tqB1iKGHc z=655S87iw=u>sLqXaL0F{7@%g;v`vFvX_8weq-zpe!NSor?P`Mg@935wWlsg{TU+sh%s>TMq_OJ$MaM{}Xd*i63)P;2=>WuaS{0W_wg=d^Lyq z4=Klhq@&e4ZX7R-pJEeI{P2SdPj-*a05bEr%<8Z(1LpNg(nRe`LoA0p6J{!kG*EYo zVpPI=bOG@m5N^icC&&?>*t?WLH}!l+QZy4G*jkd zUgh^WqoV{dHdts8I-?B47^6I_gTrEw=>1PH| zO(G;8ig0B2W_{;W)RK{5@{ktBBLnJKBzxh5P5;U=OcdrG>w^Yd(RtU@eM|Eeh5!CR ze$J`5v8n}tp`+ja7S)(2vM9EK%JbQ{8!DJ&7valz_7?RgI zOG)K7S>p}ssfw%jpW=^QJtaF8>V)mepr;u3Nn8QZ!$sBN=a z=VyS;88R^lF-qK)QGek6`;qt=c^=lNF_^eeZKipVZv2h)Z1`|s56KlOSnSK&h-~Dr z0#V`hhJRvwE~d0@2G>U1wKqP!V#sQ&3h8cBzbBY4whW)aeYNLPbYC-r&L}^<9s6tH8C}}GlBbCw@cMev zZa~d^L}@Pe-kTD|%vLQ4)42C~I#ThJ&@%cA6%CH@vz*5?ZyiBo)=3=6_>Wo8`y`po zi(MmX_dX1#;Cuuu^nxo=;=Z+wmA6ES6MxGar@%6cOA`ptu%WnvUmrg?@c@C6|B_HR zGcID-9~lf_d6RXu$$EdOOD59kSXAT^x_fsfcV)7E3{T3pXC20wMc9PH#<_&!>eDHr z%h-q^D-8vvVK@gwRwYE|MNH%3ZlKAXw9(ueMyVx;x(`_&C8Vhb!O-eFQ<969j!qfy zyTd*4QCJ7vpJL51i{O_>1`b0!$><{mEQAgIv7uz0mfiodz7d0t>RCZXM@KU@^2^Eg zl8t*>=sJG9CEA5QvzkrG`&9B*xKBwhPI=q#YrZpMye2Gs>` z^my=}_FOe`tw7q>xZNNoIze!isEsjiApR6A2*4xE6@P?;PTnjA8?NW|L>+)D1$fBA z%Mm26Mc?!1ab_hUa|OKUjquT(kNx3^Y7IAkRJvjF9VtvuVU-1L$yafL4x~dhE~K)1&>doeZVG|)`wh02}r%h=CQ zn?07+INsfbGeNtGWNH3~#L7R_Q-_OH)hUJf~&px0b6n7MFL;LDNQNY7~8m<^SSD3dbFOsj=v!loSx*S@gt7)v%Pcfme*7C zg758KOQ@FuxhRjgOGCSLT#)<1`?YK+F*$XaRr29dNj3avy|^SS`7} zogv{3`BbfxU^)E4p0$2U?==e}sb2|Dxw^%Fpb8g$$BrYQA@g{)0{*Z+u$kghaAdlC7Irvymb&5d3Wc-!a92S4GI~+F6!-NWRXK+OGHCr2GFD7Lq)A21L ze(_SVYt62KyR1}=ysLbCT&FJef+gs z;7*1Rk(X7-_QssU%aTazmh$dITR|?g>R35Qv#5Rh)0*$It=#lRYf)dT~5?`%ATJZ_ExQdNWa5&K~fR1yn7>Wlky51-SF;wnf(hl>VH-)qllD5x%+32;$dWb6SkQeO_zuw z9xs??=dj$t3F-s#8cB3GT?`xW(#cLuOepeMjO?1QMHOY9RV>FF!R>U2)~J|0d-oQj z4q~A@)XAK+^FRvtikz0?k+BB`P*Dsdn~$sr9d||WQ0E0ib`X_6gyVr_2bxOcTmTi? z^2$?HhESdW1ntAa^;zOK+c&fZdYrbM zmv%j4PNvysF62b%H-Z1)>F>5q6qU{!eRv;vyaljnQYcdjhX5(#mw-}PN|IRjlMQoDbAOXqp?F1kXuv^$v;gIb9XV8M6_YK5Jn%n|5DM|+KpQ?~kSp>2j;Lz@z})@dShsg zlV?#PIhQ&!mVDj1&X<<1&@hh@REZu?Uyz2$l@nJPo&Po`!*ztD#4C=Va!_f!%QnY8 zt5zVHe>qI&rkX|*AHNl=wDF|Kfj$(1=@J&bS0561U>gD?)vNkAaMK3n4_3Y|WH#2> zS^l}5&n~c-vtF_X?iW%ZDG{Dx=YZm3Ei3JymQMUavD*&ve$Xx$(GEjOKh35g15Nfx z+J*&>-?NOK4>u*_7UCoD>rGU=IU^pC+6WBWX-w-dC42cN5^rE0OqN4+&Kf=Wx`$il zAq`i-(mG=|SXNnFAGOGFeKoh999w(*!13^zq@K_#nHOP=kQX_g>&WZY3G+>{Dqm3w z4wR=mXNyX}ZbYXLIsKkaQtX_YHoE;>`9Le#@x8Sdx#~zGR_Y_3uz~pnKOFHm=4(%P zvr9~=(r6dQ0T~)RiaNl>?;p?xBH8VtB)5fj`^hM17!CFi+~T@Sr1Y<5(1>X`xb)gp zHELS!O;|ZRTN-%tt@HL~=wGk*e#US9Zd5eW)FMVaM^I++xnGOvcnB~6KLP{{(zMGJ zLXeg@xFW-Im_{q?{)$DqMu6<-d(jdYKna(@%6xmKMar1oXVvF;0InS$B(zd74l@$b zzc()3I%gH&GYF>H()&mfYIq;#?-d7Vxd}*}EM-dmghhb4cfx7N?W;KynYUN_0`xHhRb|YyXG02&nMNd1 z23c)t#}Qalybc;yK>h^%s%o7^EIqe4K6H`55-w;Y?y_BQmBESB*{60y0NcYQuH@@$ za4%v|VT-`yV0IgX`nime0AXqBj}A|q=VN#vq~r5G-w;b5G|-8j-ONzm{oSl^LT|B$1G3IYK8lhf@Lcqf_&T&^QIN#a*T#=AqB>42N3$9 z=kmKs4s<8)Op}-JMkD%vSZl{{(I3b+?5mTgnZZ)dum2tZ{oUUP5C)i_Ha=j^4?CPy z49K8Otj9779t@#XPKH@~+qdsQvjZR-c9cqYkcefraa%yNM^N$d-#(bz(om--U{yZ# z;Cuk=o^|dab?C_bbE6vpn+bf?GxDB!_D~Rfk>M2wMC{v%|M+c8LZ{+0KkI%s9M!%u z1Nxt11k|Uscju@Pir&FZ7@ddl&$kPohrW167thkc_^6b7Rs`oW7Q{3`s>!p-XQ$ZDg1#pZdJ9u_)*U<0A|kO|lFuJPL*g750JY`RSX+ zI>|cNV03hXJ8&{S-E#=>L6(WOKr41S7e#QFSyrEtok~7zc?6{~>R_D-mTQKQx;vGK|Icd#cm~bsqSep^UQL%~@rv4)-~Tt5xLh066+6#6NC- zU^89Rg58}`YyPR?1g{_|xEOBvl!92~{dXpEmYz**~FhfA>cOQXM zo}Lq+GJq~T3ETOorU*JQ$nSq@G&j()B4xQ@(jz|0L;XiS1G(SAfnm}C59%fIp?jhl z<*h_p?-z#bAo) zD+_2a3xR4su-=MQTkTS_SCRA4+RUv6_!xd{FA{YvhGVWxX8M;Sb;DIqQ0MDv8z5pV zaFckKn-^HU@sald!zh$jIGU;*tx#52dI2#NULDC(x-$9R?)wKoVzM&*buG(`Ufzahht?(lK+gk&o2?Ddf+!B-aD*>1M;t+x=6#28{k zwnBw7w_`m3J;k{Mh#@(|daPv^27$Sf3=4nDxjJrpqqB<(X)Ax$TuLDwU5RA)eFvm= zx)mp7-u6DujUV#OTzh0Q*gr-f{eA_k6r@kgBI3X10< ziOSo^k z`RAI!Ss~YDBa#!&*`}8=A=e9K84j|z=Kum2zrED=3T^K`Odz%0p`Y3^g1BQzise{1 z`&>Zt*W~!v?E~v6Kh?L>mL{0>V?em<6+AAm`G?IMmyuPY8G7cl^mKoV-|9EL2VA$@ z)}I<)-&%YqjE{`UL5Ol;a`0z}yf(^5LRYT}i=jK$&fi)P7nK+w)~O?cfgnHK^;Zci zDz=IH;I$D9Lvh-w0lAd{TJMMKrx{(LI!QW1R)$pwWOMND`2KWY=!sn9phCh`Z>kW3 z^Qwi?%7-{XK~_or5pNir8@Pcdl7FI6CN~{AAsk~qbyG&-0yJ}uqEY%?TEs{d)W|1EHg$j~*#e}eyjC%9c;*d2&pdhlsih{M83Y+;K6&2Vug`YtY<|{8nFX-KwO%R@+7VI2 z>{X5USd^GXeAtCG-`7lr4(IY#XZEI3+%m0JI6-vxUfhW+7kc5)z&>u#E9A{yJs+?M zvkn{kCMhsIH&7sY6z6$9FlA=nZA#39S;JeTGF3-7TO50|cbU~FEvMA-51Ps<+R zI}o$^oqd?HNxB&2w#!6R(B2GBlt~jDy0c`URuQOHSSsxXp=b{aMDRSQiG*G^^y~o7 z+YNgC)?>t$8w<5M;PURHbU=rj!~3MLnEtl2p43P|5Hr%P0W>a@&fu-~*)$%Sw}dH| zR{ai;1Kr=dGT-}H)N0?5|AoqVst_|b=C9@E`AFBKI_iK~^3+m_WD`IK zWI`#Z5!a7xww>GL!a6_RT$<&F!jRxoTl^C~cURqnx%Q;z4KHDnMfK}azjaLf<9ktI zJaCFez8jv+=)tLo-?b>XvGv`e^g9KvT@bsFtMy%Y z>xV(r0!Ykg{&X{*eHICsCjvC;ktZ~AI*G)1{s(o=;Ok>!TvI zQi4|y-64uvR~@d=mRo2DB+b!gk;TU%`InvAtqzn_aG@o1eNVrYrN{cQ4JIJ=(45Jg zL<2B$_RleD(>idUiP&tKJ|?%4qm8R66Ak2Jfti;av~F-tAR{_8gU4eAa^t>pa=w0^ z;C&TBiY~U9U(U=+=34H)191t)PjnZCS*)87mctUGI~R|Xqw+^{?8kYZRMU>LEynnz zp7VEu(BaiTXkm#6LoK%SK&A_>ZQnb_GcyrOlQcuqk@AP|mebx`N&z+!YPYyA_^FE-5&U?Nxap((Wa^V7vlw91GhmJTu_-JfTD3V6iO31>j6dm3Ib(ZCT2<;whMCxE9lI zhhJ#K!}7CNI1I3&sT-BS=(KG#QErNp_t;4jqKrrHR{2RsWBV@HL(v9v)YbA(Txx6X z;#5DG-!}Uoi}&sHU$Y(Y%;FmD*4$b4aX&&Xi*`Z?$e;kx*)!I*k;N}*nbJG8RdI5! zJ|mRXY{GydAri&tcP7bCxX09>X;C-;pf$35@s4;)MxoXLj z+3fo#c}*Ht7u<}m&aKu~40#8+xHwMJcj=Wy@cF!i4x{#|7YD0D6)j+F{-Xh^YE)qe zi#{dFI_Zo_^ZqVhIUu#RhPU^tRt8uryK^ZC;Q(qgbTPMuh?Fts=WY|MtKhKfqG=*?C>yA8gMLb}Z(&A&AEgF&n3cTyZ`;ar2IuuyY1ADp?5 z2SUCZVj^rpdt){x3rE)z1eLAAIN`i>sq<>qcy?j+0)&`WfyrIuKe-Uv#O*UURj#(ljvQokCzKBmFNfQp5*?S z&tk+JJkBGGDboXNnq07#b z^)3yqIZcZgcZ4|K>#y*@(P$>YS_M{EUGyepHx@#|MHlX^KcOmvk$mPZMVJMef15;5 z#QtgMu6(wZF0-}5Ue;hAiX?{XT%6OrD*^bE4g}NzEKBk zPruCS@mqO@CD$BNcv}%Vr95TUcRu`Qe9@Cuao(oAJEAU*Cu=N?Kx35Bl%22+PGwbK z6|soKo>r{Nu)JE&l=R3A&E3ZCCfSZh*@7~gTRw7Pl(ZCVE$noFmH`(^9!AzPekYxU zw`mF&%KxVQapeA<_Ij6@zEUiYr{_p+`Z-AgTP)J4RGqC|)bq=B=-xNS%9ZYt0lJSa zY7rYfRs~Y*LTmL^ZS9h(7KfBTOvR?H5XZe)gG z7Ilyx1q56-!nT5MT2f9IoyuBI^f<60CVk;VDke1MRW-j))}mOOJGWeHxOpIgM7yZX zuN@Vvv1bao30?3qz&y73BI;@KK})sLoDTWqq?ll7e^;v04}jSUX19PcU)ycd;-^0! zF|c}APxTt{cS?rfN+zmC+7O`AsOxwO(5^=uG+60kC8NeK`x-PquI{8<^9IIs6^b-X zeQa@%#V%?Fbw*Y=W?fCt>j*p$0h6ONRMybjXquEUwO|d4PUgnCg}#^zu&2B^#0r}4 z#l*6~GvER<7|MWIg2AaKaCkJ@N;b?%@C1x15WjE8XxC=%RQ3>bQKhlGGvqT6QpBwc zLnUVR*XIq4vWF)33=f$IuG89^V^mkgLbiosAL;Z%kw7L*KiiTr9gWrqtH*VkmL!P_ zv(bfTLCxc_Hm%mo(|xW33K>TBEevLKN7vCe)|R>|y{GZVsBPHY9L_b1j(fx5=&y7R z;;#nR@m6bwMGI7^aJ*g(R|W~yl`GyGV_-1ALI%7_wWt;7ccwqxzEDaxT=Z72D|-mQ zNWma6cERG%U_A*>H4rmck|ZI)5?(_(&5&G^ZjCAfJzpl~mq`dh@i0AO$y zu#XRs4v98BC((dJ2o^D&*sNXD-~PYhn(Y5ixF!qx|4~OW5iqiHuyXvL=l?C0WMpG! z`rlT`|G!kSy3JH0N4JR-XB$%Pest%5rX^VT==OgG#68H{0rnP7kbLfIHj{bnqxXZ^ z+0RA4$NEM~wMG4=^NWmJO{o-}t%;p6y}k{2fti`%0RSbSm5gqd>a`W>b=&Eg>NJgR zk-!+cUq1#nFGpv2VjBabxeb{aEb|F~Wo8Dz=(G#~4Gn;qot>SBQ($>_UsxA-$_0#0CN1Fz^@k|kyR{Oe}!ZffrE4@3uWFn6*AIy?XU4FEa=ES-$)K!48w zWDfw^ncBFR{gc37yM_I~5^`{||GUHXFZP#A$=(^{Z0ZDb00I6+RT7iO0fW5`voo4o?F8`GDFYGVPUle2vv~vc4%-uo%#4<4lm;s#~Y>Ykr#{Ns@-~{|v z8ZOR2JInvffDYhfZfWdfW@GN`{Fml0_dloepLGKMx9W`@9Be%PZwAjsL= z#)1K!ndNUxQ_$bomOwjr#((-n+Rnlrz|8b-yP1o_e_*cWPX9U}s(*Th`fn1(X7+YA z9so0Q3wTBad(hvI0IL5xl^Oo~ME-A(_`gNq{}y@w-^Bf|8vSpV`2Y1j|5s`W7aJP| zW81$C@b5VT_&aEf?Ersg4L}a?&#$@#zT)-?Zj*8h|9 zzrz0xA#7*)S0Q?4b_Vu;n}N;}KzDO9B_PPu3SePu^Y`%nWmmT|Gk3B9+L`|q`CsSz z*NKVgzhG)sKvQeGf7D?AH)L*S_FrrGtJ}XSV3d?lQ`OL-{Xb0Ge{EL!+Z7-+4+nF= z|BR$5Z*TU$7XMI*h}gRWyy%%ZxB>JmoJ@Z&w^9&KsE&(;etzh8PKPC~HzHF7&Up@AXR$-{Gz@daDaz zXrAWz_~Eg1>hQiVLv!%656gzKH`V;I0N;m{y1x*0lcJN8_8^eapbRPFOf%Z+YEf<* zQip>{<6w7ES;e6A4VqxOlhq0K>WSK))V0tbgY3}(+1E6!F%Gi}rTGh5ebMO|Mbh!p zBjwQ8=*V#I4OIU=9&K(M967Hswr|QQaWcrm$mzbx^aJX}mD2^m4ao~VXx{ zUbMk;{tt^kRcF~<(6pXNnsd{tRWp<4)yTb-C_gD63_s*8lhZpuqMkI?H1zfwWq*M8 z;VTn<$`-ARdSLRT zu^%o*VnNO_XmX@rwl{{Tu2HtXsl-m4GU50&5xQ_}8_Vrjs?=M4RBZ~D71bt~9L+N! z@8yK#@!Uy7rB>B~QQ)*;y^yK2>icT+t>;^#6{nQ%vpkHL_1HJJD44dYWA zb8Bs(n8{u5k?29&2tWZQ<<_L?I26ZcE(U4RF!5U>7Quc@yIvb4fkFrTLGh9j5>#%>N0 zKLkQ#Zf$uu$z|F~$7eUA3O&!joit@C;kPVAEItl{PT?=%CpxxuSl^_!i&TAm>xYoE8w#9@y42*NgVL6SZLC%9ADZ7A|tb zGDJV+>vaWl^HeYrz||1~Z-4;v?Z%|hDl8 zooZJ{fF>6V+{rBS!mxVF%f0PIW}bBa3Pnd>U%PPN2{Gl{YE_UQ%T^UNnSskmaF=d> znp@Fb+=o?-Guwy|#@i9Pnc$ZH^cUF~Vsb3%3%EQF7ml&MF&%l~^{o7zy!~<^)IRZ^-xFh`~K18>5N*QEZ62dYzz})kEY*Rw%M7J{lek z2r|yf5D<4SRu25eIb6t({XXuyL0(4VFO$h$b5!Bbm%Qvf1jP+w@oedlJz_4g!ovRg zQ_b7P26U~`{zI5e83Upj)-54}?~|KFvvQ21jRndR(lk^lWP$!v@QOr92I}PBC=pCC z&t^L3dt>A3$k%yoEmPm7DN&PRjC87@-pRYrWfMV`MRb5_uDR=p++xra(@M-a0C}B< z&fQ|n%`#dOe=_g0Yp9=%$G{VM3{^E{gE8?m<>34vKXwy4L;5A4J-hrTwg#nwMcNYq zOO(scd_+AtPbaMiDtQyWm4j{Tp_*rOs`8~o@Z@<{l~<~8Eu-tyZyI##fhM)`sm_Ej z=`PgUq&9XTAEDsJ#m4LVpBP!-66~qn6z=>NbIa^&WBV3n=2e$he#KXlMTqQ=Fc1B7 zRm!lrRJaq(#7a1Nl^=hW7G13e@Xk`or?zD$Tzs!SUtC*--k|2+vDX!O)5*((3C$wX z-)fE^3n1Z7sGTey(Ya#p=o7~V4qpNe%E#Z#Em*T=&gsZ)>AGNaI&bu}sUyCcR@wc2 zinxh*HL>Rboifw(x24Ku44q)(z%t=w^QJ2{mecmCaZggT5UAB*?DZ};_)IaFT)|KG zESjBW4eK#@q$@i~32$=gD>}Tq5uF`65ks!9EutS!o)gFx3ZkYy0DNJw7*<|wv=y@O z0{QX5+6dm`337tK<7-O}%eIjMcG~s|hI!U$zmaFo(yc2;S*V0nXz{U(M&T0U@oUOI zO|*)@-G63WanvfJdEx94@4;StiyzM| zZqbynpF@U>CR{y7c+|P+N;y1e#c7+dFkedR*K_0q1Yd)ql*=A-+y)8FAk#|+w6feI zjj*P_W@13Tfuow131SeCj$QJ!bn~ldg+kLYX1V>MOf7QQn)#C15hfjlP38s%cw-Ow zMZGO;>cc9&h+W z8k62N6-t;>L(+Q){c>% z{cgdC%6>!Y(SXX29$(-hSMo~|mnepYh#W2}5Bw3K+$TfZCu~svytsT0-!}{EVyoJh)uu#uS9Hzsmtnzov~-+ksIrdDlhRE9dulDq^mEh z)ePr2`v7`J*CZjQP+k>Zhq1klUl2;NfN6Pw1N<`scC1V?^r)r^AeybGD7vmovD>YK|ZNZ@{kXNn+gvA72?vQHtZGhWa>`i{) z82|G1oHw{H=F*vz%?iH^6_j=1t@jQxOf#6EU(Ip%o2-l!5rTQiTrp(9Z#CJkeLMQJ zXco~dXOwTLM*WC%pI4{oXfVz6^_KoUntth<#E1=WSmtdztG!m;uw>t7VT^Pmbg2as z-Dl(`pxs`ortO3EHWXnt)jTgR)QVWh0`?J0_H1{lH4l3k(STeiuW*u|uDf08Mzw1#fW4h{YqLS`60!?9fgn_bzDOVxAMs8vh^`ymc5E>psK7p)gLM*nA zd8)P(c^y(PBt!E>UBYsv?ztFyUg9?TGG4u4Oa$H!RZ`bjVQ%b=>?bIm%*HJG*6o#yMc258Ld>noaeCXYPqQ z5rxUtB{urOFT?zMV<6m3%LUJ@Qple|R^6%q%P0Wi7I})4GFP!4tB_x@SS_{iKg0HeCBQvhKnIY2Vty>q2Qw+myYX*#GMh)Lp_1U?|6YNJ=mL<6 zwHJWHs%veL$DPV7_2XEEFU(K6`eG{<@`QxJ$umDm&S2KbjDyuced8tw$R17m=GALA zcmgyMrha2F{AFlSEz;t66$cR^UesT2xITb+^BEUE5CoQ&H`({&)<%#H0`-Eaa}M8l zDUD6#G=e+IK7MeTZB-JYjE56yNU6?G);~y9u=D#OjBiL7&v0o+If^D}i}SfAWgYxa zvSP)bqLybX7Or&|@g29Y{5hX}uQko^yG#|gUudTyQTn}l<9du*pQQ07J@!-yu`vsx zo<*MW+e5mST-9~umQDS64n1^9>olrxa=JSbEWmeIR8YZ(qFdsY`1<8arz3<)4GfX+ zXTLirBwMSxMj0ml6t$C89`0p(b(@1Rr&Xuau?1(jPV31gvO$s2xC1UBk;Df+sv;_3 zrhK5f8#jl(Lv?4N2#GH^8m9$ApEk{$5!7Dmx2m3CgS|14*YZ59%}fuZ8;eTCKgU0-F|OBvQlT}n3qv%(`# z(?*TH`mFU@9OO5p7VZLh-$(MQJK7;AMSMON@ZF7Vld7mns(O^68|VZp7JnEvOM8(x zrLE_4jGOINf;S9?#>xQO2|y3#A=&7fDG?!AxBd;$*~Mn6wp`47 z&)?l-u=g3vGni=*y6O(5Hk|agJ5Vj#fYF4Bui^rJYAxSJjm&E<>IS8p*QRutuqtzp z8ZT!R%Qz4vA5PYml-Utb%k3y|ZWxULX9qUF$;rk~?kIM3GL_R!5xcvrJx>##M7$x~PBBF4z@9 zpxj(RMt5pcX#7y_2pXnxVGTud#r#OmvixE;gS z>dYEM24UQSDIK-1Ik&&IUdfwjJS>srq@jP>RS`T1oD)XASdH#6tu6ax{|-77_M?ES z*miWEn{g|HU?Y;(^0T8^95Js`?E$wXxEco4>KPaFRp<_GXs^RvylVC zRktX3PhyoRgcwXR#@fqTzU@Gdg~+Bff9x`o0;`RhXb-b$KHjHisE2N82j|w^O^F$j zr58}x=O;2O5XM?=sE@64JDQe2b+PzI)msrc4Cz4r+w*RdHkCD7i@2|y6b6CTF+Eu% zz|Q|-*uT>MiK(>Za!b%s2}=K+vUad)w87KWsFH){#P`KrZ4`2$>FWf))$k;&IP08v zK_7jY56CWJHm{iTjL-SNNxF4VOwA5nCq%5ISq3IM zn=`XUbA5MVF+pM5>~?{{5$k1&2ND1@=dAKgy z6Ns#(@>SbP60kV1SoHkZPFxwrOK!5Q&!A}Cd3HK}vSbL`E@fD*CkgLAg!|4OCJ47+ z7J}nCZ<)hOwj~o-7EjhHs>+CKr_ZG5s|7{D39hu^Xn~#9f~I;S7K5nj51mmdhMfVN!f~xfKMnS&Y3dmLK!#UQ%|ar3F9_(i{jLU zw1k9sif3k3a7rG(-CnoeqHN@<7d;cMIj^X!`*{s~hVlH?0bNrH^S`&}GTEw02rItS zzXMu>he0TzYQoXW3aOZIH{WerwQ+{(p#}GAE;QBsVm3*2OQ-Luo_|T?7?vdnb&cH3 za{>jVzB(Z#BVy7uPb^FN44~5My+3X#%MZh09I+CYf9b;OmTey;5Gy3np^s(ZeKGnW zUWEzV9dl4(1@?uQ$rH4_6y>%&D@|*Be~jQs_oRREK_RPuwhFfn=kc%7P}V z0AAGR3%a0X>!@fGcu2Bgc5%r1xAKf~EVDxOMEBZiq$lN+CpEUwt`N}4NmP4T!1mzB zHEW18jY)9)LC;t5c}+1ps}tk3{A@blZd>IbVtaz)$q@qMm7TKXWIw*GHp${n25Q_O zv*a9*5=sLxW@o+%wK z&pU4>(|54G{jPEdf2CO}GsBmLN$3gJKG8tbwU}Ougd-&qN0Z6v%GiDCl3zd=`N7`t z;7$19F(1E>V>kQ`lQTSUY-Ll@UwV>5F0Cl(vsNKr%5?%gp$P4|4zq3i{Y%-I!20e* zbY9Iz(~6$7_N6H;jUCcraaWN=-eb6?H+u>b|Exv>f+XY_1SC1}9<(;2KnB(P=S?8C z@z5vMNpiA1LF0wbD2iUE!*ik{O+>{g$tPB$>wJP>*iP;Pg4sT^nl@KRRzju8r+}qc zECUMPjEoo+f3(+eoQra_h3%=WEem2F!OC?>9GrJQUqu(t(4A)e0ETl~v_a?a;PFSd zFuz>CZirHvQk|6k@y7A5CvNH4=f{ z3g1bG5kQNjxfR#hP!SeOSsPhYiJtyq2@Nz-Zkz_fQr^Lk!_2o){-8*3cT?rqS_FEz zz0}H~XrO@7B6~{u)It+ubl4Y&Tr})ZAKO8Td{ z+0!tfMe!V3r66~A@@;YpTxRMNxYLNC^JM(S`h#`K`$*|hco444tbD$1NJw(vy+fJF zYtYpfw84$~q@`%=VB0p*+t@fZl7 z&52Oyk{Qu}exo9T`EFYlB#HfJD$$=`=>1GZWT{6dsP?%^G?=ss?7&xPEuS~`u6|Ke zg0enMwL)N1=Vv^U2e8im`Bx$M1u~K!8Z+ob*ye2NBjGTO}y6KPJsFFzkSCLBi zAp{&Labx2yw?+|&ZZvhM>KFc?SpIP<(KhQWLGR(LCKR#^u^*F`Pj#%VJkYH(Dl3L! zSsGKYhm9&W&^*H5CsLF=0)+0{*T58NRCNIEn*vIB;KMW|<0L&0#5De4sIW1}cP2Wq zcOs{uTpX+Y1zTml_fGOKXNaNi)b;u==0TSF3HKtU8HE>)ZjV6?vRC30XE;<5x}{w{ zVhvA6u>E^*pXfs}?H+e$;Ea>O{SROr&IfShDzxe7(V{NQ8&3 zpTWk|K8|}y!@DWxZ_KDf{1&mPb_r%ydRYxI(@6l+L#K{6hll8p#u)nO%obYZn{gYj zk$;>Qf4Ez-^bo*d6Ot@|BfzOyb$d<;{rwviDuW!>QV)vu9>+zmv?kJ_NS-thO8 zI=!TUD2YW6j03dSj(AW$5-fe}l)XOdF$0OctI#h7Yej4qGe!2BP3tY?g5W||I~y?V ztN@~K&^I80pCitn!g$ri`Q~F#Hpk)CL?s3hI4}=Z>OgtKyPLBRBMdp;?7)R3+e9ay z%3%FVJ5#zYxwXX#pOE*I2L7@ZP&PW?#&j1HzJO5(oyJf4UDnwV)*VcJg4O5bRPj)u z-0#;frlXUtXOVsMaFVVRM8aB5V^VG@t$N6L7d{Udvt3!2S6D9Mt#Kz8FW)i3jBopv zA4}|%84fjt@a|fe2&3PUjwWs+v4M1W0!V!Ey+=h+Gr4b1sdZB2nR;d>RgDX}^O|b| zVf)Riqy5JnhBCWLg0}=pxYy$s$P)-c&XW30afIt>*-_$3nG9Z%JtFK9l;^I|jtq|e z6%dociB?8c3cK2~SQA9{FX*Y}bIF%i@#VZQBF(jGNUP$Pm6vlrHd=Ruo=1K&uAu?>A=914lXIY^n~ zoedj1^+<@#X)3RVU9K>!y|urkXOb@dkfEc27FvPjd=0#U#I6(W_3d{w zf}swR(caJ2?zz66nWGIyarJKh^j^e&MX<;ueo33eZy;R`+v1Jf3_CQba~=2jZ7(mH{~t1r3R40x33qRAC?PoyLhI+dNswD?#1OdiYp< zQR8V)CM6|jw!f6edYM_u!N)w5;JaKs{h$xo{mJ@fL)`LSSTTus9Q?c_FZr4Y(jdU1%zFGV~E%4=`iHo-kZ=6is-{LO<#z5*iQ*&ZzGUp~i{!^%aw-4q#sd0Pq&kH~Da73XmvaXENV(<}MKD7@qY1URieS2QROPE`>x0M0ggdVgH zU`n>%7X$8MR;;FI4^D|KVu~?47-^i`7_uiEGj12EYVenlH8_Z|4IJ*2c&cfp7N9Qa z>kqH#l7$K=e_Dw*V7+PHas%iUy>4@5Bd5YH0w~AUZH&`zypz7rtHwjT;NpmHF0kaf z;OBVy@Z!vQ$uuE@;&5of#)zhEiht-!8(!{mNb^rF^OuW~?7w`p)d9zh(XK}zu~g|S z)>Mb$me%R&Ey>ZuyVl3+^%pTMT6CLIgV)svVyLtA7XJj|AZk#ZsyD@DW>bqTe-285 z1UEgcI_%cEGCf(VAitVX5z+%3j95v!7(30ZiMiTaEUtz|UqMEduSS)JlTHMjECQw7 z?b2IPU7~z`2(jGD-|tsLG=|IFI(&j~bPqb!Lp#C-HJYI%xM}K8G3VUPBa4207|5Z9X_c)D zoW9J2@)<9_LA=$*r$G0W)_#D|60#lm`*`;N+*IPlAGu+vtK}x@@KB-B-~IX3edMzg z2EX<9QDrKT;uSnz)>y&6&ijJvXYnc-TCoW)J_c+cp@@{w+zecoWgIg7S@fRrrW)*3?LNN6gR7q}(sKb*PVo z2fvD$1Qu=1*nChq1zriYx_S8UBu~-vUz3D9Gw`9lJKSN=-F zE}^60ubMR+=w+)i<0%ctlFeVw5?FFCC|{_$!sp)e5i~ksiyytPlUPBz4}$%E_km{V zCxF!7bqH%`oQ`wTR3r|pS`ENVGA!YWj5;*^^nftO-=Y<9AT-3%a%p!RcW4-0sZhN6 zw7(J-J$UK0(c!#$a2j{sKhWB%$7x)Rq1l*R4`(KFcxXY zJc57jN3JI1?MO;(eYnFq$wcA&eDHNT#oDtH$gYYA8W!B7Z?%W+P5PA^u_s3E^K1KV z=a6G*U56_~^)`a|;+V?hnjJ`a2R&gn04h$a546gFZR96N*sg1cQ zHsf?iS^V+Q&S%y1>6i;$aK6~muQg&d7(-(L_hXas<9VdXxlxlf$$*{OzWcNisTMl6 zs;o}*w;(W@zlLz%BUQB~qQl?x>xV$c^4FDHCR(u<@`z1ThOedj6(=HhBW>Uo7lq$O z=8e9~x@aYn962LWlp(^sQhh3$dqpN@&(iHY!E$6eXsuqEPQGRqt7h?8PNz))1}I+kvcOW<-dUL?A#is zAEza9Ww3ca+|HT8w^ApNx)}sg0>iJX0&h%?28I;?6$-?+(xqmU_dWe=a#x{RVYb4P zk`c0zluE-8-aon%D37z(%7b7t5{ItHF#VR;Wm#i)IMt?qRzC=#5$a!sD@#ml7bzd% zbaeStDyz*{ih*gGkPi``-j&71_a!%G<#4Iqz$pF*5=tOxQTg*k$Wnv&-1j_?jjt*p z#FTM7D~8lerJ}m<@+jpb7)JBLmv;XcfjeTQ%JC)bGn*G}(_Ax--Rj3Tuz=5FrL7y+ zMb%PWdsimC1%kB((!@?p%m-%suA`)32^CSOsUCg9M51+P*^hZ_2tfvhrZf6>H7o00 z@&Q3xbjn)et_jAOhKjn1u`MyGC!4}_AJn^>d>QFaqbpOh`ba`kH&-S52{-&&ci%n{Jg{6ZwD1B|*l-lb}% zN@ndR?^hO&E%>wU*#pvK&lPR=7+#L5nhg4hJ_ zAH=Gyo~=Dm?QPs}l_difsZ!tALQAJJUwq;eg(+^@3Zme?cVAxwkCiy9?!f#?vsS%4 zSVfapq6T(rDDI3rkUO>1@S~yH^ZTiS1ZiUC;!60UADS|_?N&m^nO$LAlXP(DwNp*S(p`9LF$%W)7Uo-RqQ8khaik%uy2U&q zfZK%mBwPx5q-t(EOF(1SZeAsh^U6@iY&!;pUQXP6OaI9`f}cqiqEh^G4}2+XEs}bV zUWEKzzz#<+GncWLgC=6%-e=4*1NazGj9dR5Y4`=4lug2i?*?NCkDO>8;Sv|q2~Rea z3yEuAK8Yn&$6_15)S~UkR13~tv$@W|)cX@`A1d;YF*yezTqJh8Uwt1V&u0A57K~IO zXI7=Are1XdgEp9o%*8>b=4tmxNl(l2QgO*Rg?x`6n8jZygJYI>0tvBu)Hcy1UGzMX ziC1$Qb^r9cn*-EXQzzQMp&Z=y!H)%tdE;eHA0!e%Z6K`zkO?W zPJ7r3>|wz0R}C9OO)!01>N9;Qn$X68xG4yZC~Onb&YTeyXH{7mt`fMd-xnM|b+1uq z6^eYk?1zsIDC2kttqR4MyNL#uHhr?+R5k5z*Tg!H6=`;TRsCL|@jVmN5=6 zrb*#Eb!*|Th+U#HK0f#Zx9#V?=;hky5qj>OnrKrUoiE;9{wy1)Tn#DHP z8Odfnuh(tF&jq*1X)-TM#*FEz^v@?g%`Gy7r_uukG>mqIwy;a%wCp7g#6U8>fvYu%(H`p--Y z&9Aj6^bJiKmhskvmWz|~`1l9lv--X|drJ$+OR&7kcWW-4Yim%8c8)ae3mok$ekGMc ze)=O7B8YY9L|_$pOGuClP|_N;ez-Qm^Rn5hKcMFaw9kFH+k)LtGbXS&gL0wXZyijf zK5owcyu81^;{b+EUP>f{rWd1ZPpz3ZDx+7nUxFm?CAT3z>d1B`uWvf@GI>KgbOD|6 zT#P<p}~jRlxYgp%An}NtbrmG`bW2elj4`( z5bt(ayaWckGqJM?Ne%-)5?(GOGTw24@~8K`puCkwxsxg7%g(a*#4B|`ddAzPJlRN{r>+`fY$R8#l4 zklx$)^*xX&6R;pdaFTWq9FH;^-G3u!W3L9wTZz~7zG>#S`<6O+_VpGU+ZsGFh}_7d zJyn7GtxXfmNO1v!4Mj)%t7wIWF28OQNsIvSubDs z;Fc2}AqYuim}Y4BPN7A&M%a7}xUe>o^DfocHiY_gM3)Tf@Og^T zGyOd1eOx}wQw=RT`*cS=5QqzoqAj~dv}TwzC)AC+wF?f1w50buqL4R4JCv<+RlDER zk1FwS`h;wp+r^<=Hm{Qw#wK1{tPDK79=_rckRg2?$)*aKY)PtdtC1y^|N3P3b$iOl zkvaCI_URq!tbJ9tA9S6jRj+9e<6b6-D6Bi<*+mk)T0He7-1t^3S@lV~ofsql)Nt_~iP zm5THjabU2d@JcA4r&h#9tcp)vA=b;RVg=aP0iWexRZlApZ|u^GeWKNcfG2@jz~}@k z=oC-^VmqTtqPCHx7C&3Nnun0j%PL#7^GcoN&F}G2X4d;xj94#cXgRzlum9qrFQSSK z*D+O?Bpb33mEu{ybw?w3E6-7}UrGvb?yiD8=-n-Q)8ix(6#rdbS;s-Z#0CAw0(R8e zMk^pLA`dMSg+2tB%QNoQK1`Wk->{%0>`~5=TtupDw1pYQGz?|4?G>B+oJT2T93$&n zW1Ew5a?Y+2UY4J(@p{%O?u15sXG8z36&eXxj<>&3QNda;Wt8Z{r)9C)4+9bN(qGLG zSAj_8)!%FrV;T;BhagN!K7I2hlwE^xEN2?TNX9*{)Xl|I$vrNN#m2_Q=pR$_)!E5D zK0C8=(H%N0KSlR+=B>LWWj?tJRQwK{*>qebNu*3vKbH9UhInW?+iI{H!>1tFTadP_ zc&WxN!jY(P>q0RP*QLtYc8~KW8`Mu2`$^eo8FI60qMU3}uwa?-kz;BfyNx|h)qBC; zT^&;MWB~SsxrKhu2MBXTW(Iu}3`1xwKn!LAn~){1JT|U@VN^xg)dOu>v|}ADj;$&S z6A^gZr;OIS=>75%S#ts-`%Q7sUZ!5yu?@vPWWBJ``!|~VrX>C1(hadxLp z)X*QVd1kd2qK;^Ms56J5bA9EVzJ_n{!RMR-;D0RN5aZ+IF!oX0^4J{JP<`NO(k9>h z;po7+qkQhfgTh~(x$IthWSxHmlEg91@^Hi`eDfS~aX_|`UOUtmBuG75TRFwt`r-G8 zO+XVV|KhySAWmGh2FyWtrM|b~@^;ujaeoPeD_n#m+3eSRjBYKy_?^Z_KOSx{s+@}DZR$P?>g@8Vyd#2> zHWL%6-MlG_f&WAr{bjyuRK7^lBHkk1HFFiLtHR_wJcek`ls3jtEF{C0wdV+Vf{f5XVM0_FVR8^$4KUuUuR+U8Y`89w3w5-aGwVcPADLgz~$|yFU zn2G4OC0}@s^TcdbW16f{{$^W%1{y7&ZIayZY!4b`oAGqKdmRiap;Guf(HH%I{^>Y% z%sDwEP$?JvLv1i|Bwl=Yg%L|94|9pW$B{Q=?L}y!skb_)YWg?{JZd$?57& zJMD$ylh&LPuqy1e;f39@e5L>^A~QjZ8lMSh;VCcO;z-HVIa>$rKJ2>w@O^*CAjb5kFJLIOd#+*g{UeA_m>7Cj0UB=b zB7&^w%e>TmM;sJTV!>b91Wup;XPjA!_1MB& zq8MON$ry@vX63)=B(jRluR~?8#+vl*bZ_{LoH7OhYAt&R=L9t z31~@?Gg*x&KP1-&?41O86-ui^19wCw;G+st&TVf4(YmAZT%R~d-^rUQoUAIs`{JIO z00cuB*Pph^aL>bZ$znoH*yLwEy2m*TC7FujFioxFB^|ieKJj3Mt?spB8(2KgBcqu~ z!6BZ|6?j+z76W4%gN5@0H@6wo;ogqqqdx~NBxa+RRKPp&pcE37F|ETlbY<6D#^r4l zZX6e|FMb+5>}u)ALZi|30_{dMb1o6yVD#J7YIvV1DNIy*oZ57QM;Mq9FP*9K_M^FZ z=~04bzb393Zb*u9mC(8cv=_PvsxU=T`-|Ln8Gox_a<7lL`|Lw_yW7zPv7>U$zK*W;%p#K1sNhB zk3=8DR}XZMR(I?$yLc13T#d4O?$m=g3lK#l^{*F*gEF(%a?tK|{X9H&|CIOyR!!Yr zY>ArU$eL%R(9oVdTc+*ymOQJ|w_(nae*@xHzz#wGn$wAYwc#muOUX{<_{vV5sk-e< zqKp`si;{~5-lwY>{J~Xb0*6>$|DFEQ!BL2+Y$AYNaU;JPz(w9+b$cARp$G@RtM*ly zvs96h<)iU!b~1LH7A$hgvUli@5X6FLtsEZsl;9@Yuiw>1XZTzX&5Crnzj@q|D9CqB zM`@?4QwqJ2Kcdp6paR6da1%G_D}AuEc@AS!39%;nNt1HOv4%iQVP+e+!kzPs_M&ez z{QYx?x{G-VcS$@b%}$%AtF@0sg{BYFC|vzwm#30!s&$>M-N zPci!6iP|#QAm96O0K9BSS3kq@0*jG~&`Ff%-D?OC(i_=}z=OHE^-w-fKzNlaqnRQ~ zDPAi`7l`1i!#|}8NJ)$)5|y#WHbMRiNiz<+k08y`o5-Wx?anEijYbkL^qlkDYHI7H z<4r}j6{tl8v9Y5>ZFI=SOU_leH;1I2dT(oL(NS^sP8JYRro4U00hQ@kdbD#=*dcN8 z!w|T{n7>@KuNXRBoy@G+IowiKd^gFsGVkgX z^H>WE3^7KE_3A(L50dH&za2Hh=LZQ=G{3$P)e(=N%SE+hRZJG!l?o2K(!4H`AfU68 zUq8OS&gOPRAs7bEz_5%352mkMO*k`1VrU^%CiW{N|JrBpD*XY9Y0DgS9{l52#hR8s zCsYXMMCzLjS&~cs2N8*~vWm+DqLqTAWtokuqw~F9H&n0V{qSDD?NDZm9gTWPAKOXC zNPlv4kh`TU!ZJzgnR_o8I|<+?er@xPrOVnMP7aga@4HQVW-rYP zvlc@S5NtDYg*qOtOO2!h6Y`~fnS`88TMu-4ZWM3*p{f$kzt7+Wkh6tgd2qRP2Mmny zJPbJ7psvO)6jU95U3j80tPrOSi_HmejDQ|ZQW}1EgiT&nZnW1FeYYX_6@q1d-7JY` zTa36N&ESMrDmf2M2Zx*i0NMq!NEgeP> zj|Nd^$tS`N&c;i{pzoFn(_N`sQK>OiepMbS%y${6x`i@JdBuXd{iVcrPki?yNKWd5 z+w;Z=iAt!RJfb2A$F2<(69wm!PG!dD_uAA@qXaIi!8rE@On&ENl1sa!UnG{%wUcfcF} zTzC> zkz`(Mi&a1Uu~g0sfn&?-MEW^SpypREW959*$ZyP>$}nH(O*LE|4)wjU8o%>SV>VTy zhQMfzr^-zI<}+|6MP988nL+X(&Q=xD#$LR;Nf2AHc$2;=n8nJV;FPkUM1uR|iobfy z@^O6X&mWPNcBDQgvj(*et4L-MDv#bIH+DJ^KPDo7&paoI)1$f9$ATZBPvOs?&`eJP z6n!nLmKqvzQ*h69ZhpC!Lp?BZc(z(1Gg-uDl=NwLjHw2hhYOf1_O_}k%t*vwsK_l} zPJebTJwMqjcmmB11;nJfLn|#pf>N{i3mh!9F2aE`+Qm7vXA!@5@NG)_stQ{uuHWx% zSNcF4cG;T2)TcIQA=p>bkrT*7HLs481KX;D>qx=UlL@I}EoS-7=14UbKmh`;$KSoD z)#GPMgtu*(P{svJ3~?UZq&e3y5S|UZGlF7Pf>gXXz!p!9iPsnbIUQK%pE&HMi`RV^ zZ~Z~86QLbF-wKlxk-~6C_@*l(27C;&RVFc}Fs~9?Li->uM5(|e`Y~0$w%TykrqpbP zVb{S@B{^QMz=+226v2#ELhbPw#LVMGS67v(hp*#3off;wo0N_aXf z1eA=ic#7X*2lZXr9>+jx=0vR%{qixezA_CfE?a~Y40xls{Tc@lxZeT8!WeIa9pD~l zS4ky15=xFO%P!}j@PN!R|HV|A^i}bF!zB5n7w$Jq}d$y;2?QU4I4 zv7v0C6>?k@66#>k{|H9_xc?4)=F&I{f9Nu?I)#Jshn2m;xA=5zLDEu^^((8ee~4?R zeC*;uE8AVT?m~0JIPxYLc?w+phKIhEy9M3QAqvNnbG8mTZTMv}KrZ@p+|8IB>jGT=B zFFXfj4|@{=dO1T&C1)EbdRYQS28RD2H8?ss|0X$@|8GnO0v1LlPJ;hA{{Mj-X0$Bq zw!{{{`T7d^ucHLcK7i1m*Bo%T8+uxg-EqN34M`S|*qz3mNL+otw3e$2$1!7Q;ClK8 zF=S+#)?IjAoRe0>%t({xZ*78K8sy==M@<ujbaYiy@wYu9{{DR2Maj>n?|nj78uyp`*BtAkeE_7*Yjv;|C+N2lCnS zolvm;inUjxN`M>pD;(~Z!VFr5fVohi#t8U@+0IXrb34>ZL*&zP0E-icUqKO|jMHcf zpzICq5rKrS>`|l%vK2SqLLnB_%m94?MYjNRyI(lef(yHc9h@Ot4ub=PgN+T^l(()x zS|bW56EI^Cn@0&K>Bsb+H4<@z6`{F<;Ukj4!60D`yVpxdfcl0vloKT`tV@Di0%i1* zfC6k7Gf09+1DYxej2(hh4UjNmx5L^4>av}Q&x;3TE%dGwkQ)&Kr;|{F-fuvVO>p_g zvte>iz{wagzi+JjrvoGzhaqQ&l1A~jFzX`;fXe#k3&b6i11B9tvjGR2Ig^~#==c+W z%AtjmhBN02qQRcXA*Tm0g1QT~X*5TzmX}iTJ(2D8(CL!^bItGjt6k{`IfK9$-HIRH zhcCp!DXi~(2HOJY59sCT+;KtS128A;cEbblV@X30!YPDP(CzE;RenApK0xaN>!%=Q z7r}iVUW_hnL*VGgU=9Js=G2}9a0HDd+f0|H~gk0j2IC&}i;r(~!0$-4M34 zWG|pJH2GG+*mI!$GWBrauk683W)M1SdB^7|fd5U~);0!Uzikm=ISjg?S6}GtSuu>f zz7PUk6uO85LUc5{ScwJJT91frJDXv0wP}P#4SN>D>g7c_=2NyG-If>Z>EffYDy;4W zX30(u06ats>7ST!Q>#(!f$PJNADQpW8p8^o$C$km$#`fD5yf0B?(KW?Psb^OHdnxsNIZRV|`f_d2t(DbPOWRyW zIh`p@v)a$Z#^clWMeECPFZU)N$48>yo49~Se$)5SrDfZ5=1rg31^$x+3=V}JXTJK^Nfn@x+} znAnm%(V;zFqD@ET!Kj=w=|RXp(W0&P(AnWc%&t~dnV7|&=19#y zMgOyE{@4!2Sg$jj?#uf&#(!c`PX-RCd>@oeS`-NJQSyk(bd?$?Tb$@$54Xcx1 z0G9WEcM9C5cP5&jTdS+8xGpME)4{Eh+dP-nool_&(K$fS$^H5Kf{)YnZF}=>UEivO zd0h2Zn7)9@`iE^&$fV;E=%%9_=JiJV^2wI6#OhwH`=h((133RpL4S-2@cDvvu<8g( zumhmq78PaL!lzeD^#)$3_T6F?$pg{X$Mbr8Os^mL?;!vJyw3D;IB;;M30MywZhv*% zxgRc_6rRYPwWoZptf}d}u@1?4J+%Ds{Y~y>haWs;MGuZ+H9Tn%1CBzISa&uM ztouU852B&og}WH}!FNNN#^hjJBEp^M5Kbw}+ftMRsu zFwCS3z2DdQdQzBvxG=>Fh~pZ&=qjtQ1aCYxGtNO!~6_rIp)(pZ|)zCDn6w*^F-27O~f=Lsi!w@wjAMCpXwif3T<08gz#*Ix})W^ ziz-V%hqpYW4AK!pcREW7fvBrbnBW@v%}D2ZvI5-AEtn1%sJ~@4Ejxb+*2=CNm2|Ra z{&er6)VMr>+v~38Wl8rc4SRC#&yi7&_f;-CqVokYeJ7#cuCS% z0xwGTf+xxXqHlrN*LFKBldy-M}+hGA;!I7@m?jF^2aKFNZ?bPY((h19$>$AuUOmmPu z8y3I@)fw~!y@BmVU+@*)gx=*ty&Nr6rQPf#>FLs+(x<+yPdxlPkncjvf7Ie>84AUt z(gUCASe;DH%gLq1caFh|NAJ7N1je*>2#6>+tnuplx9KhlPrVqI`{nNG8KpKK3_i*B zdN?e^p5p{C)^59gU6zr2?Kll-D?QFydYY;GcMB!2vf&?0(nNuB;OLvxDp647Q`BnQ z4!?Vs5#pBjcEFP3u)4iv=Sg@EUFqj#aXd@+4PT>oo*nyg0FiIGYMzZ*Q)Tkyd1d}5 z*v0A81^rAhw17~T?v#mkA2fRH{xRD3!j_6JqowMy zNsnzNUv$UABEVMBiEy6wOj*_L4QfizpYOQ1-Rxc;H)t?;@e(*pfe`VtKQ{*mZJ)R} z&vF2bycnsBxR+%&X$*FY$2v0mws=>j^XqNGqhI~?P9hHQb32PUpYYcvs zhzX!wF|F>hER+LzwUJc^H6x)6l*k3Rfwn6(u=_>ZMjefb6gvf}{%FwzTe9TS4yY2< z0dxv<{i0*Yi}7d(fNT#lSl7q>;lpiA{8{me(RFdv?Z!2{ad#6-?#4(&PQGuZv;-Pc=_ynRpj6 z?Sl`Q@9K@z;_c5-@X3&W8Y*8(0_&%YHJ^7X8UKD$(`c}|@j@{Ea}vVv$FsGP?*ReG z`_OskAhlbYP0y#OoCzb^(V=I{j(#J8{A8X?1ReH^-!ghul?x|oX@s|dup@8 zE}?@i2yUSRw*14ZT-v0aG^UDu#cLe#8>yBX{oMqrM}qW0L_r60^zIu`RsyWVkKL$H z-0YE`40DKYxO|_g=0z`@`nV?Eg6ykVzd0&Pc%AE7WUH~sr z$%|Z&PWk|Tq7_f@?GL0&lYCtu#e!2{=4`(oZ;!km-B%WYzVj_gm4CzYVX!Yb|fjDMB zo1Ab*CdzSYe~Zs*tQ>k5e*dRnw0qG?@|5FpjjLU>8QT8+m9fVN7b`hZD#ULWFlU zu^cR7SgX%zx(j!ElSI8qrvZ^tV^0g{c8)~_*btAT#bk=ZFvhf!eq!h*e4*wT1xlm$ z7z8ShvRjSb8r}?#dx|bnE9}%q3~rU?kKO*c#GTw1kdJkYj6PScmo7%^&bH)2^d^r% z`x_ZiN(eScMbwBn6on@tWF^Kqi8%$*F~NGX04Uh9_uVZWmqx13J%;84!cV}1%wt9Y z_tA}GwGRv3|N!Tm8s${w0#hVA)BgiapIIbe|+!FU>B8AF$lOE=7e^Z<`ZkcetA zIdZC@yFI`m0jf}{+G0_<9y|%#WN4U%qgUINXOPNFah{qP0lRf-iW=P_XU%=gY6_&{ z61K%@hl4j1o!xXtUI%QDF(DjcnmTTAO40Kr72%q5o`=1ErzLHWq6g<#_hyYUmgkJu zB^m)XH-aY=y~TUbN$~M+^WjDMFt4#8Rtn}2wW7|m0<$3N2)Ps#*$VYXz_+80uAssk zTC$`F0$f122+OT7QS^c6FS^Me8A0|zV8I$J1Rkd5(nk+Ws>cEOFDO-HXsLA$b*lA& z6P8ePVjhl-ToCaTE_bM~z4dNibD9?qk3S~^O5(8VyaJBemD35wS&!aA1;=1i2uCHf>^&3Qzljx-y?u8J#it^HVFUe7p zQ;||4o+zzIN8hVW9wkqQ&{UZUlQ)*uIIsNuF}@nR4ctVo5e9e5h;<9dZ_cJQ;M?Sx z4{aEWB4+32>YvayVX{;I&uOC`dt#CiVp6I+?ho;wj<7FsZ-DLan4-I%Oh7FTf`b^~ z2vyU^25U9Y$9A*?8f0etkvt@JR(45L#SB16>O0e|!NQENi40SCT ze{PX%L)mQekuA)|O3(g)C(}{EH1l!fPTdTj z*oZku*XlN2s$Kt+p!IRGGUbsUt9oT$>;(1McOFWaDn#u|7aqx+a)=SzIa8{sbS@lO zvX`Wt&w+k+J$m{B*zj(<_rDn>n3(@-qXYxn|1nB1F|c#|w?>JQ^vy`xHpI}IQ_6SH z>A!*{z!<_1M`QzRgl>fB*gWY0GqP)8@!dUDnu>CgQrj`S>`|IMntr&wiOS63=|f=H zg~p3>^@ND2F$`Iv^^7IkgS7Trv>PPjws&YIdV&U032suY+2(Brs!V(tB~bGEe&vno zleYiJ4|~I(+6219S6YOgDtyIuc1@lVjol{SGi)%;bmEm5r1<~H>t#C-*B@smYJSv3 zu;vsp+W#FMKRBYuirlDEPy_i3pza)!-$ULhR5jCTeFxCE?2$XNwHkJ{3T)qY}_Lf=UQ zUS+d_N~+1(Xbp%lqbQ&cBgqV(USpf-q2FwVrMYK}x?(~op+J}E5wEY#@_;blZGJ+C ziMco}Om!m64DS&qFa#@FjnCo)I5kcYLBz@;TGK6@D1*`1Al?!UWYFB&pvOv((33`B zhg5R_B3NU+2FNyn292hZFoTVzqfl6x&lIPBWoUzqn8Il)U#0$H8J{q$DLsY9x#<A`MxM-eS;NtdJ>cX`)q7 zlf|OfFM?I z@cz8*?(+F;A0+wyd={#1N7a9Qoxj!9^?9#6M~89bxmbTjWiB$)u>R{6&df8Eb!0x< zVs*7JWUaCcSK%%s@Dnq70|r@RS5nK?>bOBp^*m4#Pf z16fi#Mx-wd6MojQVp%FaQ?Nz}DJ)YyQQJuda>^^aL})q8w(1W>*a{OTYZ1WTOK36g zIA-2)%Y{f-gyrxn$xHr`Z>7=~PU;$51cY`C*EyCd8~d-A60LKcy+?pCI#fe$U_l{x zV#78?3-Ywwe{C_6-usGmk-iK>y|{B<@~PfkMNeFKk3;!#Jx~82)@XTXxM=vQHy;$@ zuBGy9+Ljj@w9f1A4R9NlZ9I;d^&RkD!?V<;{obFS4ll^HKGRm`^ia50Aby?&`z{|& zzFVk>@uT$me7zfXrM|x8Ovfy{oJ)A$KJRzA8aGxogt9?)CH@XQoxhEx{dC-#ih3$Z znwta6BAJ4o=Sn%v%&A}qxO!ZfTp z>7zw2K;B2_E2)Q}-~weJ;5=CoLdHE^5VpRzAb5S@Y0BepWz4%=c|=fm?729zltdZT zCx+^OtTL}1$cJE}#*_zE8^XuR>|uv6KG%z&;!x482J*Oma|yW$xPuK!5nTE+=#B}P zL>mAN5+n2i4#Gif0~9#iR4WmVh0VUQfNBB}f`iyS!^NKNcc++d{iy-;WIVXU#N|x3 znqw#ltWutL7|EcHUJfx~oWBcjE@HSJAjP-$_Ll?68ss8zKU^}cTB1_Gd~?>$fsgjS zeJ?Lc%sFM|<9$X&pcv>vcl1c`$)yp=B|8zaA^Mx<9=c7Kny%V zJP)79IEAxn3q9$WKfVkj;`{G*vc1h1UK(CF~9!e0LnB?zTMjZ z^u*xktUB@VkV?YFF~`HfLlG00!VKTS5e%>c5f`|C*v1ijz+r^GAGhKZkIy0wKNgD@ zA2>GHD}^~=hLQHy^|ljA=5$hqJ# z9@_zn9>v2xCd`TknVzP~yMd(5n8;CNHBiPO5-#-YeKqL<4w_pHxk|XJL-RW$_Sz4e z0IXDVkXzt z7x%{k4ISU@d{cX8Uo(7f-h{W`%yFB=4KLa(s0$#XlL83}8)r=qRa&yH5avsW69?rSzZK@aiv3)zkRf&uS-65+~C+I$Lb{2I`2?Pzy zny-Qm%#c?@pef%>$N&wk#8x|n}B6hiB(i@$S*=DS(Tt@ z`DG@xmwF9H*aE0Q2YGmf7>`1kPC}%KR8Z)lxOI*eq9nwCpky=zh-W&N0*wDt8wNyx zYCwY^{aTcsMRlS8P#kIqeH5#km+*zox<{U@x-rH%Dm*P|uXE22ic|Aq7}Z#XxydYa|_l=VD(3sYPI* zWck6_OU%+VAP1`>T$}B|-t|Uu8plUQ|i`YHo;w=JUi|R7DcHqxEYy^fg zVYC@20VsgC1p#nBuLKZ3hKB+$4DG=PKoon+7Mc3DUZRK#2oM3;mwQx^i2A*3?sUp3*YEoV z9_0i4*Ika6v()RPvic^}iV|$@HZbX@RR11GO0$LsI+Ycu7GgEnGAN9H|DJq6o=H!h zW$_x2!gXnICJ3>D}7JWtJ0*7riR}y;lf{-OE;Cpg1n@N@hTV z5QlPEJfz#eNxc-=jL>P;E5T#t<9RV*@p7{Z-C^yg$Ohj3Wj0l2^YRnJbIS>&#a5y7 zxqT%CSEkT%UDrRW-YGFP&wD$_XPy<@Ye;p~Ql?wXZM`W%1Yo%wZQZnuT)QMc72{55 zQ#1C}o{sULC$O|vPYIBxx&c@3op~J?-LPI9`{lr=uSe!{Yslb+Ax}yVnsrym~ zSN#H}DGIH_G_A@^gfT;)86x?EIg6;<7$~K8icXdwGFF)JL~3)zkt^5T2r-8i7d0Kq>m)6rKF;T<8AxM zm_xKW-R@Qxd^88>D+J&-RprWJkxd!IQa>mDg(mu{( z(q7QFs5{f+!f>Z@t}4?KKy9Ymh4F^_!${n(JyJ&&<4nlt$>jAx)>%!4Uh9y_cvVmIZ?_^TshH)Lv4 zc(B&P^s_zD7#=N|Y8MB~)LWO9oNYNlI`$c@_A`4fjISjn4?B>ft4yaWBOPYXNOsDr zR|@&po?TvsE~-9#nR;ofsip8eoETgSjBMQ2Y|5odwSM_COSBtdqTdLM&w5{9jA)O~>E#J#Qnm!}> z@uSQaXYCvo92dDgr=@**6WI583acVnX{4pT2WJI>6K0M#DrNh`rU#xfE#8bVEqXw= zakXD_f8bmOX1Tk0BZ4WE|43xA7Hrg_&QnJ2|WlVb5^d-<{Ub(yCOKtcLN5 zBUw`@G+v70->oBRGx`L#t;_k0F5Ty+BGQxAx|oh7Vcb=7qor??T!yES-#JaQ>lFsa zxbGnC;=Ia(v0=I=?EC)pS&8gtPbzT8_IW-De>EL$YaH1()|cD%F7;C!Gw~YFtWasQ zR4G%1_C=4kWcvHt*X8C3Fw4f}Q7}iw`4V7EnBj+)O>Qy91W5s|O!hA=-M`n%y)eg( zDXL)LY$NDqN5bh{vc5hU#VCk+F@ApowLC7f7bB$=sGU?+4TE(lJ zlktOhwS9jJnr}J(*f>fJctN9uvz6;Daf907B`|I>*QM3WZIj2rB+e3jFkJ8zS&=~e zy-2e$Wb^n5)(@@ivm?}CYge$AosCX@YJr75M2WTbsFAbf!7gRbuqK_Mreyj;d~5A1 znAjO&{5>7TzuTQdQ~6Q(8=u5x@ck_N@k6n3ZvMYd@c(aKi~o-}2o4UG|7U{#&HT3$ zypQ_KBuNKi_lweB==6kpam9hgdJOMh!qUEeypwu;>vY^KAMdbE-$o{Kt+4Ojf3_y3 zB4U+=nlfXmt)-2ugME!Ecv?xV3Ik(8*lC@t-lH*hdTfLvKaCb6o|f(|-S*p0%m3Cq z$IMdN3SO%(H+2&_&s3qW+RNM5E=s+2Ep2eoyH${OoG;6D+_cX?0$ANuFdr9VN0^1U z(bzv1LPvD!+YRo@)wk;1VX75qb^ujV1cA&^FUp|^qHIN4_6rXT#Z9lV8ON!O8VIU@ zNGXX4i7X101`kTdl^WV#Bypp_mrD1w< z3I!GtP-xeKfr#cO`4a$*YDp}F@(@tOY)bv>V(85b5zjd%pNtIw?Qk6tiVi``M3^6A z;w-2~>NU$(wuD7*DsXZgwf0OvH=7os~2} zur~4q1+ozr$JBdKd}1y62Rf-Q->Q2TCQy$|g$&`ED-05dD>JOE-#`Q&pr7|3ySK8L z-V`)~TZjnptnjib$KTWY`OtRr^A6?C?YhgatLHml!cF({ebH9;^ZmUOH1=Vq_w%xo z|FAvB-(}unt|^vwxV_u^9dNUw^&O`DG)qc6=OSh%QLNS6e%29%FYzjJpSIik^}X%? z^|ZPRyOzfPbJ`dFi9AMREgBg%eh_I4vaUHp8^;F$WwNkh30DJ`JbOT1!n`gTVW@e* z6{E5{c}>8krkmEU1S`y(){sdcQFT4rwPtXK}z zRC`RQGGShmt{I&=D|3B_V3;r|JnNk-**>1MuW->~{ZHe4sa(|2eNfx7Yft7JIt+Nn zjfuW3xtC86_-HKJ5YDv5r&A10Y0IKah#(?|@Lwh~b0r1HfITzK+sGkLc=vl>HeFAj zhk9H#o!rb3r?OnFS-GKejw_Y&WWk^q6PQsXFOXXCINsux4*h)g(4N1@)#N38NpMs_|tukMzNe(GN}IdFQRk_?zZrZV=zoPt0ta%`bItZozR&c*(@{ z6d|fl)MKi`A#x_)#A03%*LPN#u`5-7)$K8Xy2p9m|$Lld5}7JY%$$`6)1&z zKx7{&PKkQd5_5?g#@rY!cgn&=aAS8F^lG^cd@>Ad$<*Ne{f9YVTXRhs_S;co!Vesu zfR*%fqwN_)HMG8W@k&SEv@R*dr?@E|Pf=l6kgI|AH6%XfWGS8%w(?=h2Osm<95x>I z6P5?&2;y7DmSicJ%9^SR2f^HO$3Aq7qQ$gM9lVJLNLDTKxfkK7)^XvixoI)vVZ|Pp z!xQ;aO5~YY+ly0Q$Eq@SE@R>2@``kQ5Sn1GRA&~ccy&@DHCe)`UTKNX64)ust}LJ8o(H~F zxSX8f;N)Z%IZd2phAG|N0x&+&U9ZD>2c~TR{g*0jB$l4#Vd=4oz8=APhTjCc^WAa^Y z(?5VG0*gEU`*hCnU+&l0{vQVdGYi{)9n~13sbxn!2J8D$w>HM%FMHxk838jkbxHGvuDYVCEtV%B{LbO|$!3zzuQ zC8q)NyK>gk8!o3Q-&E#Q4w)HhxbHtU}NsGN-jXNq?PEdRvdcz+iRM`0yn$MpcSAaePATmE2 z^~^n+MTh_o5Ww?_hzJPRY#%U;fi3AOs1+{=SgDH9l7SU*T|hqnlKFKZABX5a0#^)R z64KWqe9jnH6(N5>f)Jr9(9{368cdadOR8Gr6}q30&1xS#*feJeSHu(-Lr{O^V@*(- zO`l1C9&A}qnT_%XKyba<2Apv{TN|8^6I3XC+yVk0$Pw!ZAr6>e4=0qU-hd%)RwF7d zUiLJ>!yP2#Y#W#_bJn2scEQjWnYVKmn*bQ!=hOykTIiG)X5Z-2Tlr|vfHT-2bPH7U z5mQ2Lz8{j$GJM?RF?7H~9}J&%xN01`n6j89{f(|tU?-ogND>6MJwn~{HN6w#iUF7* z4OcRtx>%`He48}P1vsu$Dw*58S?5p2FD7t=0tzU{`dvq2)i3xhjK5Jiz{g5SZ&$O$ObP7PF@`j68trWMskt11YR2A#4%55~3Z|L75!!U8jp;_$upN`-}%#;mmZ| zN{!N3_8?!rWnG6ul~inV&6cb!m}U!F_`->8^?hVRWHu@7u}BG1ie4_17Ioeqp%U$k zKdaKFdNV1cR;(JrMJYAlyOXmuE^s5BA+kJRw-rQk`@vS#SqpQ?f=iy=rvTU@A#RRL zozXx$$&oE-HDOFsnvJd_nsp-BRgpR7I7PS)F`(S<8j)-%m&5G`4m8mVMv023Qk8}| zm0eHax=_4m8^XFxaNW;$_3U}n$s{0sTxuyuh-ws+ke)VlddDOZBZyGze6_R3RUIU) zJ_eh0jaQWzKB*^ETV0`EYAM}Gg^nRMrzRH*ZNqicpPeec7djiOtT&aJFBhygf3Pks zv8+?T$V&!NS=N?W)+_-vC}CTR2de1+m1qH}X#tfI4OP?pD-?}OP%;vUnlg!WO2#Ed z453~;Q@nH>>`1O%_I2s)`CFYMt`@DHH0xxZT$8FAvjpHw*sn!jiUO>7Qd6t5QnlL@ z8W2;-s_sjNIrKU2k-4a8j1LK< z_hGNecKx?gV3nP@KkaJ+PHEG5z8J7X(2}%hn`MjbaVI5HICICGc%F?N8%Q1TFiEA)92{rdZL`Cw}X_&#Tw`yPw`0Hs3Cr zy0&p^$CQZM?0#KOb@-3OyT}(nPC3-5WUD3;#?djYpl$zv$Qi>JofV>5@#Yh9gH% zjb(`N#KeXlkX|ypGAJM5=(y8ZGI5nnG#Cgh_)=J>1|#aOj^(Dh~|p4b^AN z?iJj0Z2)ykJg20I6h@*MQz^HcB~Z?wmy?$wwLPGG+Jj^jMa7BAh@B=>sDHGO9C&+* z6X6BDkQ_`65-T-q(D;xfben(qEC+4?@fcHK>U!`cg(o3|Q|4~uOGKax0F>?t=wfFI zlGSNB`>rP4fpSatLz8hNFGn%CCwk=0Ajqe(p7Mz#sx*hPj0Zv>A#OdP37BRQI0__C z9M%?LHM_qT;u+(}vIIq+k`Tf64*?B-sy`ZsFD!tlEJgaptN0HR97f2XK*7@~h2aU> z&7FR~cK_Vdx(J>D47suhM<7@pV=A*nCja7K9Ul(G#W`CnN&G}B;$xl5QN+|dnkAe5 z<^#c#IEvc9hL_FO-1=sCZita1rf;k_ z9uTCTAgNoTajhaNsjOj9UIT1M)9SbNJ>mNXC}FPzOhrn%oieKe;wUjC<@&d71IAgK zc2^+@5T}dz#CE|PE{us_o7(Q7MCRrr%t&bbd~80q^5gPzaC8|^tdo+$iefD`6}$$( zZh|%f4li<~X0RTl zmoZYuf?{RmsA*L@HEFoVh!sZkoUtserLV??E#G<{J(y6P)PR*ST`HD-ht>W6t zK!s9j&wX8oN|{wI2);kHZ$73$&tQZRqruz7x|p&@)lq!5^77$(rfY@`_w(7f<>}w# z_YlqvXI**32?y+Zb7i~cJ&(m@A@xlytp}s*=<0eJhDf=Ut*+8?MXpc76$4FAN<>@X zYr?*gxF6ZYl7|%Kec31JqJiq~okQ;nua=JhXY(=*y+kV-&88ymk)) zmHmjNJ2?G*@C|cXPcKQ<Hb{xMyeuY{0jfcAEYY!S-jb?-7FK1EAulc4mU$=PBq*z@qY01^d$y& zmw2htzV zj&_j;l*mF~EAirS))-^hRg+)|9eLe6_bd{UYO!|G+aDd9kCu6YJmo^pYIv}KXN{@i z<|G~A0Oo2#1ty8ve14C32HI>N34qufH9VK9LVZ_2ZP?=!!JZq`*Z>P$a`#N63r@-z_N!^BDx%PJU`}D^8 zfFh@uMv3!}iyc&esukmDLN3BVom?3w3iOpnTa}(wC8=UiWvvfZhn241GrrM02Xo!S zPUOjT-{`lDcM@i7Bu04e$WxWHK!|7?Qh@w;_Vrr(VI(y;gG_cs!;xk--ic|GaJw_{ zDt3g;HF0x<94XhLq^F@C=?2hC7mEJ&Ufa=?O;f8DAF9u#|CkfNoWsNZ`l|6OVj8br z8(V9Z?IxoCde~gkmp)o{80gN{Wuphcj}!j=%$Gcj`*tj}(6G_bb8FAj zn!BYfMN!q)Rvt2xOSLOo-2|NzSq73;$*i-J%UV<%CYFcoZ9p38fqzIHZgTwU_ll2ndHm_fj-c;f?cbK2^oPlZ9 zZ%3o7*n^fZK|8o(!8jTac!7lu8oKxfB|97WX?ETe>;$^?AYFrO(|^}(e~lcm%rNEM zLZ$GqZ)c5XJhTck{u@Zz`_uxxaBwW=_|P`(v=(^WHL!R!EHq-#`Af2`JWm>|(=WY> zI58gN%$Q&-<(*}6`r-_9*>UVOuo#oBCxNgX^G3rg*k){CaJAs0p{@?(?1WZI4|%m` ze|V>Bc}}{p^|)<+es4@DY}$^Qz-%1)3z8(&N$cP!@_MphngP{mjxASawGb*k@z`U2 zK1){&s-E0ObHnN!hrR@4-ubKY&bf`ImxphV+5yr zec=9*E}U!yX7}O<_nu>)Gw-0|&9D8tnsg-;cP=SLXS0Ercn|p+U1CkrP+vo+)7cm$ z(8f;kq~Cg^Q13;z8Qg@T#;0eB6?K4d6D>30-kQ!yaAV(^%DE#F4*ixP8F4$v4zn0F z`uhV|TH*7*`)fIVd4~z?3@xE}c%bP2Kg_v|j4Yi0$DYf=#QNWF0JC}P$l72-KE6EJ?pB*bB^=%m@LgE-Q22Ft zUAFN*2yJ2Uui`mhnqRc{;cYGS{XI5*xu3kr)&YYxh; z%!g3$KNhC$QSh(MG{N}Z7rHq3VvD@8UOD3UaQoz^3>4?r9L;4Gv{HtqwH{TUeyPjo zn}?{Ut**i@mIHBZQFW^Qd>%vN4lzuw>pfslKb_z3aL?5$#%?3V5IId3uzDisP(sbr z5u4I*SK`jQj2et&^%v?@im%C5ijr6E1R8x6YmNW?tCAkL83rhKd8w^x=v>6{0jsgp zFYSD<8k&bwRCp$?^s%-1!q%ln$Lc%ZEE^4{6sQ`o`{hl}Upz7Amo87k{AztldV)Bs zs`2G7vc1?{0dXw~F~yymSM9Tz-u{mK=Q0FUs)O5yTvVYYn&tDfsn&Vt(PC=yeAZUy z3yZ0qr`ES(GgiA|ed&O#p!@vrvRpUi+d5wF7LevnWxRxpkwF>|Y12Aj}Uefq01_}!nUrMkTDJvndq&-0-;{@%5} z59(5wE)}GntVNozHZokL6N@YN0<5q#ckSb^&VFtc z2Q8`AwY0k1RSY$vgEgdNA0Ba1(ybv=P;xd}?bcU%%1QIlZ~>(SoOVu}jEr3ATJST+ z+a^4BybMhi3y=9lRUYQv%B>?)hIYmqFf!&)p0|#4qN6ROz-)N0ceX8 z$B7nDF{b(847l3R`VHnxGx?-!hY>dc88ZMYRBcH8Sb5&O{w*!Q$TqxJTo}K^^ZGSQ zFzUwLCRK7gx4aAv7J$`v!&(4ZRxryz>UGXi^#Cg=aAwTr&XMWD*f;-26}De7WDH*- zFvd(Qc)e|M6L`IgeW9i?&uruk-Iyd0avENL^c)|&{>~ZAJ-`Wk9Cp8H!PIZ5b8RiK z?r7ubcb_Tk-**C?rpDJJ_Lq4VDH2gH!^B{1mJEAP@7I2f$Gv#dX(Ggi_lB3&js>;u zv38)w#hUXMJXA$vxbddM1)PS$1tDg#WnE_;`-*2@6yCA)=xJQwwFYB299zchuhno~ z0!qJ|-~&#-OB#rd&RTU#b4z9B{h8h~$v%eBz3_>(9GH4L;SWlC@G%9WFFP&88XL{c zzB{>!PO~AQKGr!`Z9v+==6$JlesMwSqWn5^V{N^B;^L!HBmFCDNUI!@iDTTiE>_#m zp7xp&+B$&+-D2lrznq^qgH{=4XFLoDx8HM-c$sNL|Fv0bxZ_TKRQVJT^C+8IZ-(BpfrK`U%h35h%!OYYn6sqN?cy)N&ksaV~m zIAt^$X%T(wlAc6lIaU41ip&pnJlgjTIxv;{LYWXV35&!`F-)WeyLf^GUJ_%fF7F8~ zbq(9Rt&xtLgb>M5QC$`!I+ziO0ZB}CKL63p?XWwnrwbVYNlZdO0)r5c&>$EjI2aKL z;r&4L1{zXw<=s;5u{(_PSwI4l5QBcYJuse02uf%Yf)avKxb{ryYI~dK#^B}}B{&&T z5kXN*Lh!d-vzoe>d2FqixlLX>UXKO0ox;rugEAF16$WLBjCg%*uuBA~(jic|WK=7a zmMk=y%p~$;Yw+&_@nK-+?V>{9g!~M6bcMGzO(cV;8}4W2oYnS zaFph)Yc9%i>GXpotgEI33&7sAB?%5+r2sqQ^BvWa!F zjcR3*a*V%H1E0wNAtwsX!QMe2TRZx4?qzb|X^VuVDT)U@*Q{DriGzul*sqpm=16|5(;H)i0a#<>dfO*2RIKKHKAu-Zl!%XcIGLu!2<bNHM(5g zLCR}Gyu@z;}2MdqN^X&|>(T~f<(Kk(Y?nt{wrp?#$w ztZZx&?x9Ox%haxeCR2T`S;a-vs=IIzC%L&{e*j~y!&|wCjG%pa>NGSgY4y}$YR`J1YDz;8ngH`ZRs%cgOWGLwe=}!hiZmvK{2f)zkbnTH>Iqj0- zl+-pw>c%=I-CL%h=dmsU#+}o&u$|W^saRi)%jM{XSDV5y)K|$=jjsAL#u$pqU3^`2 zps>E!Rrg2SMCwKtFxB)1t&f(2;CkDz$J1m8YGi=$a;NF~U=P6q0dXRB$^{)ftz26< z{3aI_R`9< zHIIaexhj8^gBP@C^qlgHRTlmU(IOjf5_|FWC_q)y@Y&TTV0@aUA8m)eU3C^!oq7za zGDQhgxzo4El;`oQ(t-bu_jdb)juZa>V(cxT^7!?xQLLqSixqcwcPXW~ySuv=cPORs z;L_sm@ZfI6-QA13yWXMybMATH?|y6D)3u(>o@D1Ynb;(0CNW7gelKiO(gj=d*#@QP zleeWt=0e~?Myp-f!ygT6+s5ptv#}W2#VO!^gKd!26G1i7&nodAH5=CYk@yUMC#gH69i4~~Se za8ReF5dJSf@g{k4qOk23pYf{rjMRn^fx`Z%$|W#$s`ckqzSAyvLl`ODhp;UxfxkN6 zw4WtDSp+WKr@vX3-0S{n+avyT@1ysDN=N?cRjC?W8-{?pe1P3aBIm4A?AR2;sR~d< z^|o$t{!Pkpun1-G_rUy4R+I?COJ7fmQ}kfl2JT$`Lp-_ETykEX&bK{mQIi(l2>yBG zxrN)A{Vm5ONH^CL67HXVx@RQbroKHRhndvCeu_3S+79>ujl(12W84Mn>12pD(GyLm zPHb#&-q+u9+<@2CV|hLfAqKL~z#aE3b-F;r<&E|B!fOLJ^BXMajO2sTOAXr=(z5Uy z>~xOogMtuG`jjxNO{rD36CwuN1}n;SjRh;%ej))QxRGt>x7z7B_vxNKxj_~=l2nin z`IL3U4sf*UglG$y{RZiS0!D&2xTn}>oJS{MNcyy2VyKS;M=5P_6f|xAZ+Tf7J&TJ6}6t@6=uEx$~VEj`6h}@jV2qj zV6N6-ha}0T`s+SkEe!jTwGURZD3j#;=B`w zIN%$OW9CuGXLTwsxU^*|-$<4<8E-3=4X(K+I^tG-ACz9NjZ*ot*(hlm7OSn+Z|xA{ zoqsSz#>aE@E-X#saEG6v;$4U=en*B<;OWj3p)K3|2-SmVtaq~NHOSPr?N{^1t`9f1 z<+}7$AL{HVK+{Ubv%8>{=f0K8@Rm;THns$XrfS#3D*JOSgn)kAziVu;Nuy=s9oDbkoW!uPMFY;*ndEqm!qmDY;N%nH!&@ zV>p`=mBX2k#K7Am0IvRCJ$NB$CEmmXt`4dOwiuulZxSuN^o_{$Y)B$yo*(tpHbm9a z&#cMTiC5F)SrBp0jnCGJRnz2}XsMT_fi#x*B*}f^5GrO*7e~s3`QrmRLhifo!JlD- zRn4Yb>KDvU-r6BfcB|YZ%2=Q3R_vD-V=RYNRzQP}!7*5i`&XLf^LfRyY7&o6McOC6 z{>`MTAYDC?v-7d4PlrI;+0*@YykQP#Dsj4IWA9%(5jD7!VsO@~_^v&~vj+@lXPS_epC1mr@eSnUH(u2>sCz16t3V0`N@c;JT;;g`Wwf}Nj zg#AD3*x6W^IsV&aZlIL5GPXLT?uQfVydlgA^5<9>ES~@(k%e{QsEZp2&Z9k@Z)D)k*+(=b#&@kZcR5^e+9N57o--=zX1Rh(pA3{pr zFx>Ppb?0h(M_d%@PIx|i)mvz7q4#PuJNG_#U}5;>=<`*30ZOUFy|C7)%B66z1yXJF)7h+ zEEf^Ie3VvS0s~#ins|ElpL4{*JQbH|k0+UFRi|d|u*-SN_V}C93l5IjyV~*|D6c}d zK#Esg1J}*_8(ytqdwjp^C(WypZkk<3j^3oD&%Y$4*DOa_b99|i>?8G?)tWi~Iz1cV zaQ&^_`m(HK!0+1bMc=i5P4&fraF#a&HtPPFOjOY5rn%xUeEA~6XZ`SD)q%AhT<7v7 z<>Ao1muC8W`+nyE+3JMRtM#P$Y~z`;a0}rk(njZE z^HG-F;^^>)`hzC!dese>P0(sZ)ncQ|w{Io-sLOq+NeSvXqJ_T+KQHl5{t2tV`N`|D1W)z+5-L7%6) zx`Pwn`&qlTmxs2t=Zl>eubZ8+>(tgV?ip{kr=$DqVSQFhr@52`sM?HL$VDQKmomG> zrFV5lz&08$TZwwUcd6i8?=`tqpGRg_r&ASt0jFZc&7hCCn(nk~A5+rxb)riU9s@4W zP7y{>pg|~ITvZ+Op3^6!w0hAT+s?Y5IFa#(K&-Hi8+}4cSZ7=h>{+Lidd6#JoEv0H zh&)FI9EC?j8-pUdqS+ilw$7HqyWhN=(P(`LZ|8>{NVqgGK|6h#9U!cRnCR~W{Pn#~ z#^bS`d}1^A;pl@Dq*7*(erZn|5b0k1>Svp@JppF&xZBBI0ubp{j#GNZ##>aVrVKoc z*9(?Y-&$(bQAc8_tsE9psf%T751Gn3CeI8>1wDD>@=8~3hv1FYBY#sZ?E=a07Dxu@ zp3%tZDqEInXV>-P-}$X)^nVD5WkJ1gD81xMT6~KM_I791O=0aFi+6^?w039q+8r(3 zoeuqLqNiwSQBXb|N*e8Qv7d+^7Z6-U^sLSI7;dR|Lgd-f2H=5LKQ(ZXzm`7&`l*zC z{-W4TGu}|8`emV;Xto~73gLF z{?LLOi@oI;N|D~D30zjHJP0132WU4?6ZBV*C$uw&7upe&JJI1}Rcbld%5SQsL0aaN zH*s&C`Xo7+?c(UKDs~VQf%ysp3of7Q1U9r!*w<;Sx?D)w`gE&#>n*LTuq~n3RqJsj zq1bmeU}|M;;FHmHpU*4;{Rvyx;-D?1#c_)u+4HiIy8V)PYmnvw7AUL(7ci{}tvajL zZ~TLk-<6H8!TWK)p@6_d|GAd-`vgv3`T>Vv%~I@sTX!HVyf_60oY4%^9B__$3O^v# zPD{lI3C`e!fxLZ`=SJ|sRpTmb$3Rbnn$4(x?~?5vQI3s-n`O#o`7Wv345g-Jr5A&M zWL=ar!msL^f6asRLa^;d?N{7fCsNVM`#TQ!aFN>9R6eZR`O$AiHmi%fT|ev2FpRV} z5IE-I7VtO(^p4qQ|hR@c;fyBsnpedSbL>HBQfF-z?v-HG?B&IJEHxQ#!H~uyy5pKa^@SU9WOYu zrX`^K*Z4i~ zU6MHar}i?(X5hKkCmtptOUJLQ4?4Xz!aQEKH)-Ut(dqc{J8T)FuI^u1z1s(?lJ^4D z)0U;vyUq_yXD(Yn@1AzbPW~3(kEh?x3x({+g8b~b*hyqZPCUL|ytDms+gs3#&&W}I zevJnkc){D`Ztr8pDK~O*xZQsTcPo=N5O69-zl7mlk(mn&sksFq+xqW_(MMouZe?Ca z)aOUp?_PFvZ>p?Ws?Sv`cKd-MP5*%YCBzF!)YU6N_A>`FLljm2)(es5I{ajXW~vPJ~2jw%{Ixw|~%HKjBR zNUwn^C^N^?9ISV3swhiD-5UjAy^uZ<61?ql+-;CR{Y3&QshwZ?xeWh%pHk#4p&z{p zJLeFB8;@^qv3EFMvzCt|5Y{0e-J#x%MAU^0MUhvPvhs7(jp0`Bcc*gqS)Ex*wW~q40c0R{26srx`Lkv$o%3k1M=}q0IRUxd5xqy&hs-JM13`Xq+O5UmW15?fJO$ zb|h^r=*u(!T~ldmUld|eU*7+sk&w<{Q5is=JLt4J6^6&A*H!DuRx zhr!ufI%a*c+1~*pJ^5Z)+aGb*TgG%pl@v)}W`_?E%#EcK!O4D?ohHM`;87VwueDbaY{6)H|G{1jL z+2X)F&1 zPUgE3D2QUJP_(it!^-N3SzX~i*aj)MIJ!N>4;yX>?&p6<&K%4Ss+P18s#HBHNlNpG zplz7p=&_WHU!fOpNu-&fqF?fMFxA5qU1U__${5je5xB$xoFI3^?HSha;6~o0kp6D) zV?}dDpi_1K&iHQ$t4zHg>txUYg=wgHpuV)c@X^(m6of{$nSllC=*~j|?K?X2OLY>g zHy{G5`2h@7sgk$Fl&T@|+24AOifI(f-B@a!ark1=-m*FBg(}H^ln{i1Z=jqx!rjt%F9~EcF;w z2(}8cR0wgyJqfBYD@kXbsS+|4d_z?al^|;B`Whc5VMM8{^XSrkW@KtQ31|pOb)Fqq z4BF7IA>ZS5b1P#$FYfc;lBlEZp&-$9+zCO2+55=1lcW$%6~7atC(;!u603-YTHL?K zft5VZ2)@Sn^GM`PZo&5HPIAJ`&oVw|7-F18F$0)z+je}81Y|$$z?smQ7ig~<+;CB^1szlYsT#{s1cXJ88 z(~?+tH&zql{DDZ4+=Ap&><=}SO`@%-0w?Sw)ffU8vQn-cSP@!@5D1mQwUy5x$q7C` zEDSJ@XJFh=6$1gWDfu4%r@A| z{Ow!(8i7y;MVsEYfcP(}!rqcuMZ^Lo$`krA>kiZ1q+P{il1K|GF^*UhDlwV}11d4F z+{*c60oYkeqAIfVihN~_Zb9Z4jlHMmODxxQ9}k=P>%t}RJzF)`syz)x)eutPbzd)X zFSYEhHn1P&jXYaZ)@Ypu^=rEJ%RLN{)T@3Xs*4$>mizQPmZTw-E$jXyB1W2;Uufsi z1Wr5823nTl^Ni&;o~>H%Wu(B^hv%sho~>!`fttGV_UJlAjXTlg>~n(g2cZ~aNTCR} zLOvf~_lbS*a5^W?%~9;8XoSh{Pd;pE3-6{jp~qX#d#VV$@fhP;qh*_?ZBi~wcUpO2 zzjH)zBEPr6JHaDb;9BASRPE4w5hRM+>lr_KVuM$_$hCtp>U{$Ped{uU(!dA2u7JOQ z`ceNApm8y6sdFf?-I%l3aNBtt>v8z=f50NF&EFexL`>V@@!H^h9C-(t>i>`l+K9n= zoinO-(7wGE!tF)KwaWn+x#0H7;`YX02>*Yut8V>&V^vSS0+sIIWxi4WA2?e^`|fkq=kodz6v6FHrDR#)I_5(KG#BC-pp6ky ze~t*=NEpCTg{1A@k5_+T{8vl+s?`|pao7PiFpUg>vcZd_iC$ggQmu11tajjgeWHIL zMkG+r-p72y?Nk~_%`i@BQ1!o4>aX*^0PV59&V1u`?KR?rE$0d7kw6I^?>YN@2c%Kp zYf6Z%e*k9efix%ddH|xAT@+7AO<<8Gx%`+$w{Lp(AeB8`MUzjnpVIhH(6n<8n^VYk8BrRb|{G_DZ zXXee>bFGxuADcus9>qWkV?O*sAy$^Oh^Y)}Y&kK@F~*bb$!Hw5{B;XT&@@f{>gv}} z#^xi`d{PWnpxhggGckWHfuU#=xJ2>jg#SsK{E;p}O_z0MYmwos`RMZt6IV$_18S1_ zQ+WK?mlLy+Ac`cx*z2nG>VCr+*@rMt@Z<|L)cq~+Ig_oile43Vfz2y>UG~Au!p6n^ zU(a#sEy z5xqX_2WS2^P6uu&YA3_Ko&+YGV6?Vn{&{@cuP%x9TC=;Z^>^&sUIIin-bmg0o3^v| z;iA{Qrk(bi1hXlm0!-k->r0Bd!}lIupBOE$B9^}PTaO<%ejz7#irJFeoH&+R^wY9R zL>6u;)hj~6uXEV@5nbax-*UKD+HXSYVde3QXlQxQ4 z_k-YQ)BFsZPg~1E^Tv&5yG-_Qh1ht)X#VV(`r@a$pP3c!aXiK&TJ?39XN~HZG=-B< zs+nP0N9hpH+*Z=@tg=#fc9t$eca~2~7t(!pYz=-GIPN@itMvx)Nx4*Y^9?UAATxNm zwvhxd_Z_PZ{h?iyLJ90G;_qR6$QNKr-+5B98JGkg`b^XNfJfJn<50+wNqyQL*g?#E zR{fY9A$(PhIHuChH}!8hLU)f{EqZrc>S_}V3DPi|YtAl<7YD`Y-Yh>g8p?e?UcJQ` zA8EYz2AlWZToW;@);=6V zRLrepw)ECkEuZ*cbeVl^TQ-@2Z7-+I4X_X<8= zhxk54uD+bt9jw0WwLM?oygaY2zFaWATx_H-P7#)_raukLCqK77AKlk-sCyb7l}B{( z=%+E3`|BZiOz(Jw#SorE1-Z3D32ihkG0czl5u2q<{!V0r=1@E03F9zf%*EyD z;`N21rz*YJKZsv|OH>k{s3i_*7qqoqKlu>Pk0A0)Oe zz^^-w=FseNr~w(5%Pc_2pLHGr9#9p&ssLhzO}ELAeU0M6kgd8F2a^w#PsWA8MGp8= z!^yspm8eY!2#zzmX7$+C{`M3u!>_UaHYH|_?Ntg1NRhbM4?faW^Ht4jc|FVs1?Ew( zA+fP%T4WT$$w14QWH z+JAjR!W1YfPbJR<&IKui&Zp$U|LeYox5H|XLGsp>Q#)<4;vgL>>X>!AoI zEH`dE>3XPR2PaGSM$U36BB8|{o4rtwV28!>JO8U0!^j(8@Ii0_Crib?f|eq0*-Xg` zAvv7gg=uhemI=hDeI704y=P?|TNi=cls|HAk7odyB#1KCJ4A6~gCU#Zs&_+M6se*Y z%_T$l@azlz?t4!@1z4Uq9Ku(VX>r&1lAy?<=l0!SPS_lP4L_k*RXhCb;gayLBz(`& zAoZ{N^jO7g%~gKB1`fQMJ9rhMk{2#YaQ?++GYvfmFbNXq;y-Pco}QlCt~ zOHiLkz~fRMPe|cZA4@36Qy)#h!%!cYDYBopd=Bmoud(LSq%)C1#_3B)NMVh_qmNe1 zRuq4cUH$DN6DTpeRCct|FtCJBnLY_-O; ztfVAmDJ^ARbV9+PJgJSN&wEn(58sH%7z8lJKF~)86O%5KaFoTw^zZ+GW62>eVo?^4 zH68;Db;!S`9}grZ(jYtO{;1j-SWAd)o}xE{m>j^E#DxcAB3J-VICTuzNfsuV{Zb$S&?rNcj3q&ay>p7st139#Q9$#lTS zfMQdGD$h#UpuZf5jIAd6tZBW)C&Q)W4m92%JM&>Ch=b|xk&ukC_7arvGoSXnf9OF0 zERlwidfhi;!YK{1BV&9gzP$(X+)*8l-kaCSI0wwI`AhH``>jO13bB@En= z%FqFjNzQV@0vW z+$X3u0I9K;QYu}aC`Oep5RVIq>=@Rq9EBc*G`0b*fxog!qK)KzV`B>ofcxkm&;UZL8C}AAH3! zvMlE%9CtL|*$Ocd_l-`w>V9yamr&rDY--4G4fItd*~dkjvHzhW{l_Rp&AOy_c-n1( z5Uk`MDkIUi>CykzY_X!ct11bQMpLktV&2@aqkzHgxBXQ~=iT`3s*}c|P`MO9psfSW z^Ab}pvoA?gB^W}!de^7-l_9`Gz13?4?ju#=Kk@gj4zG9J2;-f|F`ZtgAWl>hc+All z=IR%(N^*#aHf7%+BOSI3iw$Qhrf;<|ls8f)9t^2hB^FDV#)QSzP}RaSHrB9lh>A9; z=@t?N99I>i$!knRhE`_*?JD(Vvzd8iGT0KQy3o zo#Jq)_^~xJoFf$fxkx>s22r1>z&v?lbR85EMet(CUEt+H0eh85UX?q>ji0Wu8oJh> z%U~dwD}$NH=gqwNdhd<;Yx%G*-Y1yCoo^A-O=21k3RB!1l(Spnma81x5k?wwwSJ=( zj}0m3Q;#A;G0-R{5+UetmJ|x$3nDKMfN|*CtlBScDOqe+0onU5>2( z+25s_x>*Lo2(FkY8J}c>f8d$eMw6o1G1G6W@p#Vm{|PM-RIr=|J+pLK zQz#B}SzV7v1E^;xKT!XmNTQBkxN-!Tv3y&~^t-${QQ4Hr57_Vwx*3<_S$6-6o;Txy zJj>nyHj)t!m-Ez-B<|j8j;4>Jt+JSdwsB9EIu;t(9pO}41ZMik)vp>$ne}2v)piM= zTB`X2foe2FoZ-AhCH!eG36Wl&MhyF2Of7=tGIB(6u@{GIMQV}NV;yMEs6g3>kh!?8 z-kcFErpD*ka8KE|tICr=KkFOm+#q9pV7*ZcY_|UXkpM z138b#BhL`Q0u$HDHSpd2{HO5CZdf+rQ#NC3;pdm#lkOvIzOzz8WXN2`zoM9OD4?7W z`#JAW2}A6Sd{lo&^wcuO`?vBl+y2>zFhC&u8m@U;O!SuC>#l1*Gt?@q%01!W{=nXL z>(A22A3o}kugE+7t>hjh{6M=XrXKs#R6SUWyyWBrEQ-9NN;qxuCFO(Y>B2OLNv2dv)#t$vz^Aq}_EJzp3EqM0L4^guoJ zZT!Xh{8-HJ{I#*=2*#1jRAVrW=}+xWyFS;@Y6AE3DCa&pv^}!gtE9(ff(}{R3xi%SjV_S6FGmWiYrN;VwAYBPk5oE{9(%$~W{>Pj55Kjpkk zi&(Mdt{;wOxACWQZ=XW-+sl%yjhHg-cKC$z;I<#RjWc^D^A$JtF8B|yRy}Xdyiinq zkbjkmatr6}Wu_2M9?HvAUB+h!y7GG$9?V~Pv{l7}1yA11-nd;gvtMp^M);-TlInZ# z92k5-G2{1)O&j*Oo_QdIO!4<^QvK7jVhq)`JD+^1JyXTGS79xPob?;jUVJ#Z)9tfv zll}dsShW%d{M0pg%oCO>EHtlUR&k*?JJRbtGn~_7p7;dkr%s3D{es}fdTBRHqaWG> zx-K!;M5GUw17CP(OtwR%1A|h ztEs$l7faSTT@*sc8B6zQhUe&^<;$F99_tS4pQ*BDuzDE#Iqjz^nX>RW0DbtFeDCcl z`|`5C^a8ncKx+7Zn>bW`shG=n# z9KUV>A>h-QauKMUcTqCY%gw$y!g5aD#m(M9;Q`y+KvVt*wuc^9qo4`Ci=L< z*UvY55H=lTClq^%SQTfwBt}Rze3S0Y)y?LtpZ0N z?s%U*`v@`>`f1)MA8I}O=%)ozD{gWGR{axN>di@s?_%ZQS66US#O+<9matdp!L+1P zXgc`o!?2B*Y2v3TwWg=MakZvpock&)U{rdGiW@G&lJr_K($Gi#>clLo$mJR!84)y-FfLqh*65G^gTba=cOs= z4DVpI5b0^YCCOFmVb#5^ra*%FXK<&nj@0F_vkqt2L2Vg*fFibN>e!#QSg(8Z;~RtCkz{1W)pVJgxt;@qCW)yk%#RS*58#)_qx(g|=cmOJU_WN?%k7SD+e<~nNme@hS>lr8)7Aa>Os$Q-X)Ur=ZY^Z8 zeDd$SsqOL_n};o6KI9Rs_j1L1ayEIEXeapcNa3_Tlgb|U;XMzO<{C#qX@}_)MLBm( zW{UtCFjI|(77wo<2&Dvpi~bX8E~6d2{q37P2o9VYgDx@O#0JktXKCZlxr*^ffcp%D zwY>hn$QXphZdkl)yj=7kBO07;Y%vU2LWAQpDb57?Uxd6d3)p@`P_FHZF>IMcz6k&d zpW75cQD9|~DO#0xXGt&z$48wfItF*G$|Ww4sicGI`s`aXr!|4#pc<#*Z!Ypy^%Sva z-o75D0oi|ktuF?((>Qg}(#cQMvb06-m8|HXTz=$t`fU6S9J1Psgw{KF?OuDbJv zs9JwAv7F}MBfEZfsJdlzA=V0;M#5Q#bP-gI0!N7kRb6U3qb~_7M)q5Uq!2jGB2)9{ zmEp5^3~BF>qE3#GEVfw?5N;=1L|9nGXNPN8g=iDR&L9`^ZI|G)G`t-UCYdFQ-gYPj zBtMYjLg>o;&!f87z33lw@pjnO%sjG(PbJD~uI z>sJLzoX2~7szo8^3~ShNp)8Xu-g(fa7wZJH$wpT8XI_-wAEHqNd1bI{`y(mpOZ_j6=NKHv=OIn*R_V zb58N_7;}nWi|1SUZ~A{rXhz|sR2KnomJ0gSi;(o;!E&vIm-Oj63(&c#A1c}BU{JMIDoId4TNu5BW=Kmk)X2%}8 zB-q6s>y_?^jC?MziHEo8-NVh*_we1xKI#UJ^3__D+c}7_D?Bn9c2e)H%GpL8~}(hAQW*wYcD=1;X!oTU&Evrc<8vZxbJZj zaS``gGnOr)6E?2nG50E4y>q*NiCkrK{Jzq$dyp)4ewu8Zpz(e;`-*+jtrP2fh~n}& zk)sQ0n$jcHxb88KK<@bEh%Fq^f+t9izV4{(Y`E-n_e=EX^AHYUNzF=E0EbjkaLIFt zeIQGTefR!S9K3w-`;MuHYQiWa;!ZxyE$dn#rFN%jj$pD7v+;J1IW^&Gj1lf&Q#Clg z%+^CXA0hXo6ahT>m@@*O>z(Ek`U&Q{(hoEW(V``%UpNOg zIcRdN;ns7PgLA7c&-GvZHkwA%8;?C>zZ$Vum&%bUW=(V=ybv&R|D^sr0sQv8WoyOu z&#b*S-_e_~uYSe>EUBX4ir z!5xdES5pQfX>T3v5w+3YSg1ms5eYl*K9OetKJvFpo4llxu2t zhaV7qZ9=sR0ZG5ewktAZ;Y(CbR0|3>{N6)UR#Y1bHar}kjQl-u#4l-dh_tl#mZHM+ z3BG&|-RF@zrRvXT)fj_q7NG-o#1Wwbz-4n#WKT*yxfdIUyK0A+Q7q+OD%+u^$0{We z$xeia_6zG%HgQ;F4~3k{t-1BNbnq)xex-cD;8xRwA88+oEkwFGjbihOy;wQiF*^WC z`IjQU(tM(zcoUNJTsDkQxgOKp`qTb7bQ+lSaGA`{uap6%KBz7PGSRquERDQ67Xy72 z@EH%b>&YA21%fN>di4Nk?xkOZ%W2S6Lq?OHTa_P=MhKG0ZRhc$elr6p{W@F)xe z#FNe|s@>Z(^i21Qzw{?Q@X^o#L>{_2EK{zsJX7k(4x~P4k!k%z4mZ0~uJ_9pM7gLx z62wMRA>a;$3o%1g4iMRB{||N&-FWA(DF|VOKKH6Jz}R4$LTcxEV+t|TKq%TwS)Bfd zaQ$Zi8^i(nPe}FrcEo@DsF|S4W%Iuqba^UDA8N4B>uh5CxxgbzN#*}Jgy5iJf-M*F z=k`PLkqf^SR~5Y0-gIy5b9(JUK?7YVJfN$z{V!GiccZReuf)Akk+l3UKDxQoZ-+2U z+3gg5*l#!>hp5Wo^m`UNziU-OdRC_F-J1m@D(Ip$-`|aJ7YwjPaxUJv)2XWwQVK8`9U0O23yxzgbjj zNbD1H7bNg)r;mpH-0=?X9UQ(j@U`f>4ul%Ns7i|rtj*b8q4DXE#U`FN#3n)L_$vQ= zN&5F9C{6~to2X4d@O!Jk5~@25DvS)ywPNaK~!>U@x|!mk&X^@ zX3slzbMtWdzvR8;Uy>)(Nz~>ejq2@PPk#QXfc0~f{G7V$`~7fv*i6}$PX$#LW6XVE z-wUe7dwWl{Ss_4yf6hZX^_K+wCI3hWzkksqv^_Z=8|`@O>^G(#^!6Q+s5wCP0g`8{ zA9bX&oV^K32!$rfMkQJ*fPrA)p@1;9ra*yU!KAF$bC*lnsK6R@%=3?|0LHh>nBH#% zdTz09u{Mm>HmrZ(_ROs&(q5~FYt&+OihrEJMr7k=#AwDDqbYVh`xu~UBEj`6Fjnax z=zrv0ac3k$HQ&U8>Z@+PJZGMb#F1Z%yqHt_Usxj%fcN$^ZGLCKb?0sB6Z$3-*)_Kl=R*3)M0^jxj^xR zWJ>Tyn5iDjJ7MwlQb&sjl}5~%h*J4qeSCAf(`%;n&Q%owQVw_ZDqra4w_CYuCUGBm za@b((#d2M{kZ@awZ`%mot+sgIlEZ)C1HDBt3`u#5pj&F$Ap@mkL=haCky!udAtsMc z(aJ;egVu}7hQ#6$;{lrq0(xkoOTyV&g9?oi<5}ehi>j?PQ)`}@qapF$AkS@lL^7?N zd;47dxc;W~^&pST{Q2i~lT;I+{hhg~N#WC*fg6>k8!K|~FxLQ03gfHoT*`+{bMvDc zk@pTW8D0XzxZ8bB2bnFXbSE#W-F-Ylnns@9kff54GXn-fC~OrCy%(GnwYpHNJWLmz z)C*yQ+5WrC$^$-UoJWeCkoA(-Q37Q%?dsYH%wCK~%wI=_z-l;WB(Aw(^0h`_N%kiAhQ5Qm=(- zeV*fQFagtRE01%FZ@s3*-G(e?i(77D9*@4r7lCxMt$#z+M+}yo+kHn2i?sg@olLeD z7VZmQGI$gsf!F5+h5991`u{eC!NK)k?&kczxBp<~1dgV7{rCTWs&#NmOBsCwNEBH6 z!JC3F-E=9e2ovrD)%hDZ9jwO>8u}P+DeZ>PVsB}4s!pok;qJ6DCsK+gx`aok2*pX&+b;elw~8}+RrKqjvRSjV$HcqFHh%Ehk^l%aeJ;sxG%ZD_eP3K>00feTb7=yp z5%z`d8O)|kHq*@xYAz>knV9}I@zx0Up4aukIM%u!JRr!L8}wwdKT90tEgP2{V!8@j zjhL-I^o;_WhibLx{)u0mIsaksP}$lOUq5|~Q+ho3jAJ_F`c1!UF7bJwxI|nO6dG_V ziVr>sv*!`_;Xl2RX#nJXT6;diWpk>V74% zA2$kzLFS8O=$WiKMJyg5Hw>q@@V4nW9JHRasmhFk>mb7yJTu5$kX zEzHzgao?IetPb(I;d_?2!*V7#+&+RBaSl8pcs~lfn2LBZgg)7Ak7EDy=0D-^eeavT z(KB~*$$d-}9AB**Ui&e7)L}#U7<6{ zf;L5shsx@WM)D-XI$j0GeuUZ3k-Lmp+0HYaORv{RZ9=ON%SRLX1EGqtgXWQzL{ZOa zi?wGbjN$3>#Lb@@s;f8YRYfjeo^LPGeINJ0FBcE1FK$mazK<7?zAq;)PtSF2F9(S) zC0B`>t6<&y$*X(ttgBY%_QXs@a5Z)JpIeD(A@&n{-9zq?3%^R&m4wAI5^4u#OXBm~u%W>^E?TS!V5K?d@kaXnb zwSF}RF}41se1qDot-NW*6m<#8@_VR~ZT6G30Wwer7|BZ{Ee02X16~NdfdeZIH83+s z$uKkczzZ+WxxT!P<&yD)HJp}0>a_x%A7m8vG))DnI>aI7D@c@j$~y)D7P(mL&yZ8L_#03 zoWlQ2d!sTo#DOMxd!sg=P?x7~!aw0*)MphTW?VKQXSNndr|oT^)DuVj0e=GJ9xW~c zWn{l!+6mD56#htlzhF2ZOi||`e)e~>ey_(*6WmDK1R2F}{^KY?v+2u_N!BjC2w{3I z6!m2ZrSPzx(%oJ9995sepS<0mWwwK|vx*BFfh51o zFVsm=;cX8m&$!u4V;YpBjby5QS>;z_q?ieP;Dd?KT6TtU>H-4$fqlQD-AZrJt|^6_vz0Mvw8$DB(eud}(q2kW7LT#YM2f~F z=ZR7F%S>j+Z{~5Lw2;+t6_n0uH4tnCjIs$VDA?i7T@(3@qcycjgK98Ml`#QnU~VFPopcDUv^_c%C(BLGAuW z)fi^iS(CtVz8*a1AboBgrzxrL%tKGk#FLr;q@fgCI1pfo7;r+_8wJY!#?Q@hsw*j| z?8&`E7}5MmMmWR-5#YJ^5|>Dvd7gN3DuLRw#oV8*u>UWAz<{16Jo^T@|M;Hsa(ve0 z-d5D}CV&6n2K0B)!h_2s+5BSZk=@J&&HY+W^GxN1wf;xUPxJq3$dK9T2D!Jw3p}&M_0h`|$e7?~(&SS zFN#;9vGoNW*%I2yE#u@212em*A5E;B8-%E|vg^#^pFCcRj+;w=SP^IArpPp|&UuzK zh{4_AXI?msiPfcp{NCTv19(7X?<2*w7kG4%F%8Tx!G%|{OCP@ClXz~fBM2b zV>tiXL43^tz}sH=YAcRTIM+?qkx%*CPL9Dw+#2WvE-hW4(tZMz>BzNXj7t;jl$I%M zVqbApI4cAI9c^vvPNI;{Lm!Fkx#6G^oTjxqjbIp~d#1F%1=VCb**g1I`7|{D`hG3j z$n%~E^F(1(g?N~7eDrweSAcp2$Z-6)9T>lcl_li!?*%+hPGZXVrwxHw$Y+o6k~C;S z3XCOAu-$`I%_nBvj-GLeyjlAu;>X{MJ`w<;6<4yzRAOD%QwjB^FP(vmO$%2`$9*TM z7h6|3pvaDGoiHr0QDKLn`f<`?jYSxl`LCH!mM$xQlg^W~noke9Oty7mF0;0%NDfhq zxM9+Go0H#?r8t|lJu28l8aZU>hI_4#tZF&i0zc2>^-br6)?mk=St;chO?EAy&#Tjp z$&B~wG2y%fgueF%oK5i1f;gS zr+3b{qwsC`sEfeM=}FU`1gy^SDRgD1`iPzG>V%x`qz@^%nRs(?qbhHOr{@+Qz0&r} zz}&T-YmPYf;xlgmx_3iuo4Q=|Rn3!)^N;ERZ*Sbxgi)wAL92x`jf*Q2mqr2%*>%q= z6X>|U_X$XfBqHh@@}YPJ^WU$H2sf;HT!HFg9x5QZNEnqb5&xZy8WlvrPBNbJ1${xn zp!viH)_<3^Fmjsee7shWNG>|E_6f=D8`}q_c#%W9aYyaZ`_{pO5W~VFxjaQ@)P-j* z%5F6{8{fAvSs%u(4;s+lcrSu?4i!V5efZ60H&%O&=U1KxFo3g(FGf@%7RoJ%@qtcM zXPycVM`CUJ_0N{DQvt1nSr@-Yl4@Ahkx=6Q)l2; zr9^i=ybWg_i;4PN&iZIQE*&??HC5!-$bQA|6n$(iCWgd6W?SfM z-=1mO{F)2hC&txU-N3EmpHE)QZk@YN!bA1mSC1?OOL!l$#@CEj{5oeaF-)G@aH0rm zc8KZ4RHDR5B`RK5Y7q@IPRdd1oQf+n+8;3fd8n~cS4#y{fnAv4hejM0rqE%r-kvEj z#KG!>43F4w8|)C8ddHWR$$Pn6J`21${Ca#smF;JzLidw0SX(R^Twc*x(ar*+>gSdI zo_ukbo?e(MtCfx`D%Yd8(^K6)vBKCstHz@>ysY#q3u2L8Ch4N3OlRXyM*v-n!mVmT zo#L%}!lyvZ+bfhGYqNq>0eZ6tKUh8ad_KQ8y_)&xqXX{4*u8~l?EoK4YyO$NvMfD4 z@X%21c)6v18nr-}ja`5joP4Btl)flFWgP~0jIy->4k$sAw}gU)FWh#2JYp8t@~1g& ze{IjMnI-83rvE>jy<=cz&9XllTN68(Ol;el*tTukwlVQcFu}x_7!yov+qQjI-o4NN zoO|#2uncn5@gEu&&HeLT`?&hxdDcFN zK*n{pi{>@HoP+sf4R84Iq>hOP1RpPnFE8Wg$Q{LWI`USCeg%&>FT&R>4~V1V8yu_x!Rr&P z12FFv(9P?eJC9C$L!s*vF9?1j|KivzIX}9<^Lpmo^nVcv&YQ-pq-a3uEO_L4QMz`1 zDB9bnK1dBA+5%U zm(CPx&^SAJ;I=PjFr9dKfyqz71p8J=FYhtKC#xnVP*H$xE}Y-ZL-vjh7_b!h&hL+i z50*mUeqz^n7c}421J=W>98un;O3rLP55<*QF5a;XSOKI+;GhAk0)yY0$R~h)1;2hM2n{6S95-* zBz|0=rf9YNGI<_;l;#OP|3l~E5J{BGS7J5rXSQr94@xR@o)22~i)3OSbp1(1y_1qR z1Dq8fCS+=Aatn`Qruvar`;?NTZk0MW$srMX_xNql_b*qsNKZm`boRTz7z*fCs{=QN zzmt+CbM2O+-1>u5@Fl4wqsm2eYP;}G4}B)@y)W(^y0%GI{eLrJaB%*IH7x$`Mhs^5 z|F|Yqs7`w&TeIWHJr(&4?2F|>Cn@m(ECi$+A|!jhV8DDJX=mr)QRLVRS#oP#i9K>_ z3#W6L#9Ec)UE5jt=zE;BOGUY(ep+O?n<>1`Alr&Vk-GKqKwCCZ28s8>ED5zGc}#2V zRg&4=a?8o}-QwjTKGhkUO6R$B%baQJ%@|&~Q|X#(X?hF0&QcMM>tTAF=2T0}u;>vp z1IzsSoM|VmmoGOx9-`%GM;i`*4$*HYC_AU-`>rCr4yXAdT}O4((W-=f_iebUAuYW` zuc}F{P9qgl+mSfLm!K7OEs<{{{A0X2L#gfaMLvIf^NV4R0=JJQ zb(YC&d(^+0XZP#!(;}_4O;}@odfoPSvA+C7tvX?`Rfud zduyGnZ7csXfq{lrKmTqHN8)>~O3lR6>yq8r=Lh`BuzX+m)j~oiGAxw4lzB1&MP*dWP22)s>>}R{kr#=U-pcg zbjR1TS#Yn}_b9H7Z)`^cVbSmP$Hm6O*2fV$4<28b@eRDN@UZ9`(&b~HM4Wd zUggaPx5|)cPCq(eEf>4x+u9P&~QGB1;-g|cMB?bFn*fBcsaKBf4E-v2XcG({md$S zyKNG9wS;flKI;!BgyBY{ueWS7YfZ%FT|ki`6n(DCo47-k<||;kNY54k_s_XD->7na zLwLC*@&bKpxguU#KLv50l~sy&=+@tV;dkJ_~k4H!i#bz zxF7I72*Cis-r)`ZC6)*m@(s%02mh4FFQD~^yp-ZM=-b0z&^M@khOYIE7f67=6U0AQ zfS<{**LNMd{?ah>Yjs?f^Aicm&W#w!-^1v*4P;q-n5z3UZK~gd!c%UiS9ZsQ-C_M@g5BW_BG_iCTnVv@IyV^t2f_5D^yPqDpY%FcR@gPzB7Rp&31m~37@I?7A!doycBk!78DtR zFikKj6zNN8=!n!ATYfDwl9naLiyUu$h`6+!3h`vpGdfJg4m;!%b@Cqw!xdveT~k6m z!8djezZb$#cInFf&!b7ho+`uZg%hfSq5LMQPC3Y`sT7&#_R45q<-ujsbhe>kwwd__ zvDGgFF&#b;5m!ue2<2~YUyS0|v!H!tKqHPhc2^;-2Z!zXT`P~$AL<*#Sb2;_ATapk zk(I&gXHE{Y-NGk?oqh^1SjpFiN8gdP$&?uiQy@xEc$6nUYkoBcUdUAGk_^Mmg*=FYmiE>w3@-LnXoNCeR}wD~iA2m9Xa3KX9&lYeQ#+7^PJr<_t7 z#W?)I;}T&`FoF$9!Myu6u!4<4R*`=&Ww^3)m?P-%xt&jyY`Fsyn$4eO#RBzXoP7Be ze${b_0904#5OpFo#jKmJjzHlKS&}y&9VIP=5!BE}2@XbDDkGq}Fa#FnxQ*|?Lvl6G zFv?HjV_6)d!*OragTwW3inM8N4W#mrv^IQd9yfffY;Zwo(QKR2ja=pTSp zMq&3jp13UV&afg%@(6%Uk!xl}VW%{N>VYB~5nRX*!GXcM5i|H{dc!xwAyM~5;)0D* z-T& zUYmwyW&>pEd;J_qk+D&(*n#iEHk2M*CI0AiF-xiMk)7j4KXK`{F|{p%icAR}!p2Vv zW1UhBVi=1WMvyy4X}FMY8O#59ARH8=^EcxhR zwa3k0x6!E0$uC)WEMaE}scjfwhT@)KPuA>6lhHgd4RPuBkv{?LW8W4Na* z1fxH;T_a&D#wiFNi3w)uAv5Rf8t79!6YCFZD9KynOT4^&)3Ma{xZ*upT+A>?UxcC} z&p=K!3M%z0)nlGym>oWq>QX+TIR`mI$z)48Z+>rsSO`NiNSDchjdN($Zjms{gW8WG*T8M1WzrDZ zsK@9)uEf&A77nc#D1&48qB)L8#ClPD-c%$WiP8SUe<&M?QLE z^wD9arx2hwYas{AtjCkA)|qCGNRT01;b1-4!hseitcU|ReNOe_6E!xon9EMrVZtI^e|Pxq#?6)tJNBBov^}*$7W}d}*xAX+36_hxp;ize z;SGmsWHC=QjxNd>d_3QBhtfj5GIQRz@?eGqC~vzU01!X_zvKY8Lt3;)oUE zTLxLocT0tv{K(T7QCBY;SDiKjwd`ysbom{SNrXU(#@kP9Rhf@63O{XVK1U0irjbs{ ztme*?8tGeV`@oW?c=ke|4fz-Z!J4u&c89E?dy$~i&U{*uoA7BjxVj0FL@5{nxg!Z` z&U-`Y7WJqymkiwxBqQ(frsMvJPwdxelF-z*U~R?9P1$dvR*uyg>jrhg{9`s+cdyQ? zhGrQjN=x4o+9LyZhxG;_Pt~X`h7oL#nIOLsze|L`dYS zYkAw}a1_-e8r$$OCWe&L1}?86oAS|`iJvwlqsOe6pFk2gh8ndB>~0nks`}d(QDl}N)hFK zUj|21J*GJYL1sYSa%yMyOwG`#lGP(C9f_dHdgx)jvoQITSIZ*%+U@_fJawqz!$Aot(C2?^{ow)B1Pj%6(kJV z++S;0p{BW?R=!2Ho3l^BsOCEjZ~47Ap1%Yr9mVyIk);qS=8XbArEfK08{FF+7X6D+ zD(F-6c0-au@0Q0eQtTQ|LgcV9;ZVbBlpzbAQO$;qsm6;TGrZ?C`YhWM>z0vnCdbG-15o``crF*&-vUHdNKqbul-JyZN@o{DOsqIq6mOz|lsF;``);c?5HMH~C^} z^J-!Pa3`W+>-En?&|TCa|l&@aXWbnY%o>~AoJJWHv> zAB(*Uo|v^naWxn32dKZjt zZe0!W7y?!qF|f)4HN~ehx@gNSWDL?&S;-jzDUa~BZEg*=>11Uy=M@B;Z8iJ4p)t_W z;%mf;n6etN)tWo6pG@oi1}UX5)t=^M^)?m8B{M}0VB}ewxLJXJRJd*=7wk6sb8@B8`X;(ktJ zsQO#~-$oJMaE(~XaSyoytrAbMGlS37qAETq47DBJcV$a}Y9W>&!6ZIt)qxM4zIC3c>9tk(o?W=$%7x+7w zteevMxR*~zjcOyZ*U+T5U(1ux!t zB`>09nRkf(S>shB%&;QQB1ELqj2yercbOWr`A?=%x|DDey{sacM(L|VnzK(*JYC?@ zGEOtaZD{W(yMJ;jw!iXzW)`}JO;k%$zdY@%QT=D#^*ie;js7^yp*;6cY33RK6GJ@2 zL#TRYqUzDdNO31@+tvY@=nfJY6oVP!6*Cv?6hRxWbRuWsnPTKlGW-L*)&706sO&b? zEg+m~h}Cz{m*TiX(<#p;eYcK9)GKLxEMc0K(%0VGMW2OLUjNhM2|{An9zgPuGb%9% ziwQNr@Q|-26EXAI;%sDJr_m`MM-5rG}idwGm=r0rpp=e|Tp*kWd5MU4&DpAb}FfgKN=@gAe=k_*W)zs8*fCjSs3j9n{9-X zlj}cC?(skCyD%|x{^Q^AA31omj?pzchF)Kz6SRO6B&zncfCS|VIxqssJrF2SHXMlu z&+VNYDVExcGhe0`T+0Ski5SZ5r^#5V+*}8((r>yHJ4f#9oti1)ZicAw7iahV9XKm1 zjrSjBzn5n4scgUlg??DkEYq=IuP7R3v(mwCgBE&w7cYjg}asB=CISd zE_Xf^;XE_aTOVjPw8@yhXoR~iVt4rE3}QATKeOSos-;^;6d>zX8OE`=w2HIVvqQ#A z`5vUZf3;>=Y`8NVTZ*Wd^U}=)@04o&PBv9sG11|lO4EPVa)7aU5WIk)8u`bu=r8{b zjcq;;s=C+NpX}T8My=!)v-64G6a7Q_l)Lh_%{FTFA|!md&|h3L#}M;{cjwpkS&&_q zF^xbe6we^F=6L78vyP>i#Ynrb>xzO&zKNNs8EX#fXkGOPLDN}BLhWBMOU>ArwekD< zw#NHooz$(m!)#?*m2S3;<#kcV_hg#Z0gKd)w_Tod8BD9LI*M7<4!p|^E3cYI;>!v1 z)!4P+BUZjKv7RITTs?~0s_%-eH~c^73BEYTf;I8k`Mhm)j2~WO4a{T=T-(d^apwAq zxZ7fdVtbQTf}%7(H?PL zX+DB!{$-+}Or_!LEpJ_Y$1#qzQ(4ubCX=~2Ua0ffB#mvHIR5w}7c|_>UUoj(8vmRp zFZWIHuTbN86V#MA!ZG7K7QaS7`dPN!vqvM%+1<9h|I_8b`-f@cdH+`b{St^UnFo@1 z*uTFv`MUQe96XMb^f1P33iab&?w+qU3u#VEh|y^aVaVWdg!_bzL-$aKKY#t%St_DWWC`sV zcs*1%*pXT?t)N|l%No|Uat8CzhMdXBnH?pcMq-zhj)Zc$#ow}u2d5|ONd*MBhL+~4z^cuE{{mfZeH$#^ndb=|si7BLCK2*8LO3FZtNZ)O zkO(&0nk9lK{W)AGmikURbxM2TIQ^s=(_Z#Hrtuhbtl>zFtU7-*^Rg=>P5!Y5S~Jhf zU!I5%q@veAgre0zI9bdf7&^?JE+SU=ZNHgT{`Ndzlr*-pM-W!G>0-hd*OUP1gVzC6 z(6I$m%Pub+y)BY!<>Id~9F2TO=53}^*a|fmVgls(9-AQL+_424x7>KQmS8s)U@r23 z`3b&WEK;y!1X+jR$%!)- zr`uUWh(zO_Gu=^O(NJQyf?y-W9lIe!fBZH8`>v?N2s(KH5eOTRc1}%1E*MWP*aXl$ z0eVRrKvxEaFXyT!AE9hY;qnw*U*$;_6`A_qKD+<;{6kS)r7SC$Nj> z9B}`vU<(;%;BC7~Elr;gUy`CJTcg`zDo1-l{sHO-P}iV%aP5Y+Q)D~!uc1{!r+Oy$ z220uKZlYs1Ryx2TWXW?vhK*8WgDqzvw^EqojSd{^79Yr>$}@w~QZlM^SwP;Mp`l|( z8P{|EjGbJ{XT^k$bQQQpf>Tug;VPyXi)4~wnot|lepZdAZ(PMQNH0C0=dOfgeCxf6 zGvI1|;!4qHQ69CB&mEN4mMz=dN4f^k=K{P~=k`5cw8LX>0LFgB7>)C!)` z6s)-%l_Dk;ozr|~`y>yANLPwfusu6Uuy@*ft}745A0?w`G?vD0b=&Sab*f$ z$pHk2mAV0gB2)1o=?yWR9SjzHJSr5}eY=<6wc+JFK?OFS_2FPD_KiR+Xgrw5(0y~+sg4z z$s;K;H+ECzK^RKfpgbUV**@~hW@K%BR^i>rpZfT34?ptJf@>%kILL?%fZ!`nvIz6H zYM(pE%--mJ_t#ghY*P>IcvY*R@m%*SUogg7k1JicZL}XyIq_O0^(UzO zP!h>91EtCAco7(}bUI|Q{cub}@Uxcn+zv8iP6~${lDt1dHmM7`41P;_q=U#%GIAE9 z!Xd7W0NzJSdU}z(PX(QI!hpW=d5u_$l}UBfyxtNEsroR0WxOn>-Ra zl~Jb%9UDQN>YN_%euo-R`G<9i3T!|{>zr8?82Kbv17P4CQWXsp7Jo`{7Bhd`B}VQO z(BkazH3;qrF)b4^>|vhe>|$+~+>#^@;0lE$i@n3lEzNcc z`zszQX#8Usg!IlWLF1m~JRb#YQTB4doAny*a?x~=ApYT`_T-40zm>K%A$puX3p!>U zb^C#of!~|e`v^0Suf+qjD{3+K!KSva99-*UQNxFQ(W|{aW-nUZ z=c#NXWmWqi=57Or=G_Wy^`N*lpdCN-h114J%KXxI^O!3w?YS65J?r=!CcS21n`&%0 z6zG(A3eU@HPJ?+QKD?seb4Yx~=<`d}W-(h@+9xrJAIeq^MXcM~U;WV|32T7DGmyY5 z_uG}y#ZgLnka|fQdK>p{s4209Dk8?Y-@m5m|KZh74!HPdOyC&(d}vjV->>5Zv^7|U zf&mnes{jX>t*{0zi(RMy*ibG7$H?HJ-;!HGyC94OUBD$sb`T&q0Tc*MKm>vl#Gt6( z&Su@?^MFMOge5G10EJDe4WWL;foCWg01*sAJk*t*3Yi}Z#RWteZUpf2XM|=fQNZuY zmIDVGs;(+4$XSuc|EP))%iT?*AT%S$Bwlpr@lnmPqjP=H+y!{p;DliV=EEr<=RMuaWs31q0dL(sJ0|T2u0a?szT{T z;hs|sYQcc3ndbwm$$D?~bIKyELLuGVRo@uR(*EdfN?=?%i!~%B6iPTa6#uh%fgq&@ zq`89{0k{Hy9<3`0Daf`T zfYV~VPVmQ@kNJc(kPIvU3%+y9swwOOxZn^tF1eXJXu|IFa+XT|04Eu#74Q?Wz)eEp z)tTjv$gfSwjrLoU7)_^H9xkJ{%b#N}E3cm0Np}cDg$MF&h5Pdp3XBvIP?#vc#^7EZ zP(JIW9#>!ZJSrBp4=w9!h9}VEul%21(6_?RG{^a77XGgIGl-|>g(7Pa|ffj9aj-QHy`^oMqZ&!5u7*qsp7){4J4BlILIO6E=OkPn1U}fF{o@ z6m5G@%NJDLF4FiFc^pi=ikm(BPWj-pV2-G=h03sX$p-?th z@K=-lqkHJsyg|Tb4M+J4!6)C2A$WaOfZVKf=K!!p4Ce?#^ zOi*}Y*J^z{?7hyylH4Yj*$PSOAYDnr5Y;=tN#IZ_0NVHJ$#077gYY!H<}$82jC zUlEO<_!_^?4e)mQUeQ@U;J3~9ST_?Msu z5{FNt3hj3bGg_eNtTVLmulkwg_JaK)gAPgi#Yrqw^&4L-rkttw!2u^?R)}hwJ5CCV z)3uTeW!sqU6B;f}?}3DnXAC#*D$Z=-4CqP{7z@^N|6KoEzX$_~PTM-kltfbyg`B#v*W(to_2rNIv23SV&=M10!Pk(@o)QA@X81rrfD`4LY)^dsJLO43srprST zKtrb9Bx|5#{4GQWhrkf4`J?M%DuWFU!QNN%hcSV@@8Sm=uriUEnc8B6yQPiiJP;ZS z6b(EqM}PxVQ%A)#+{Q14(MeZ0rH$)1Y`=vxfnQ8>rj{;J-t*;QnbqrvC|uEg6jdF$jNwIz-b2B*_5*GUkA_ zgdJ8VWS?(sPZ@3R&^4ia3jdo;f{Tms|CddI<^Mz8jP^0| z=Gf5djwrZSC_CwwRFFUF)ehB%J%Lyb1_lG&OWyD0++{djd1LA_P@!fuq*s&UpVtr1 zm;e_X!;wM*s`_;tJeB1vDMY_Jao>z&(!CMc2>^Eq_yk?S{mo* zKV{Cp{uXD(;vFJOjQrYeLO=a#k?zLC`&4B09Qu34xplY5Q{IFxZur}YKu&t(sCWGu zech|wd3v8;Q&rcVU(@mKDr1ga`tfz8{@MM@ys-|y=w*gF>wwGCZ{dEwY;})&Z&pk7 zLc^n}s*J$%%0MMt{>F}Ev%s&d%uvO3Ng2+_pB-ZfGlF;6Y)p^+@aJJxiL&Ogaqcaa zDi?WHFsn*=lBwr!U^!;3<8rKYm36sR#;qrAb6$tONjoo&)3nkNOwY5evJd#>avad# zXEd&zG>WvnFMrvzwmx}NsKfJ|e{Ji>SOr~dSMxdBXRGA3TvhQEShw^-g{NK{;HzB! zQFzXA&M+=}6}KpQI?q76fPG(V(wuyDESoh>X}xkg_&V0E^6Py6wm96-&OObCbSsw4 z?k23c&x=Lna*ROHql+Vr&1nF`dc`Nru)_XzlEoR6;~zjEz5+h;V&6~DK2 zETIEsFQ9;&8GnjrFspGI$ZY(U->$Zi-!Jd=-`*Jbx2G=|1m12+nivPn^Wbe3V6}7E zpBL??NfRH8ucp!CEg8|K_{=|TJ!Jb;eIoC_5%(YkAPD;+3KQ^1CS#$J3C=_)o_}DR z|8vULc6qI*bev%z0wrUTI!2(UZYJ!pngP4%YEB+9zfH$Ga_iuYXwSb%hUXOSPL4NO zdSH^~mKDR@J^V9$h1}kLa`~)DG=oUWnk7Fl9zVQnDRMVRQw0 z_$l9aUsS)@urhqv+Jm6P9ZH+pmqI%yGrD%AwhS z(fXm;bIp1=ORz27BI$xrIz{GW2I6472lB=7Q;Kl(FD${J(=Py}k2Wi0npm(WI5R=I z#Q1YM|5{J-wn6i1)CEY-AmKD(knVm<@@S>=>Z8$o^O;Z0v5tGkT9xxZgD&r0yXacU zvv@K!mvfRYDb%r0)P5XokY3IQ@7|_&ka2Q&kDG6cda~3g8>GA3C|Pa2%ns{jyDVo$ z&hk0)v4xju{?9KMWYUFQo2*`9Qa3KF!l_nSj!4pmS=-}kAlh?u?aPbOv2Eu(3IVmN z@8aQ4C~aWPrHzECGR0 zHB&bnVp8YjcF&j;+2nJV@5J#ybuaS$7x1pn71^vA`g$=~rfjDUI#X@X9GTg*iHB{F z)ap#Nz=ai|k?hF*^IkJ_-BNJ#e9A|6N}15+(35{Qr$hc5S|wA@nd##BILr7rbJ_aP z=RM|BCLT}7#ALl?5zLmPjhNA{UY6WF&AcBlJ_Vs#x5dZ~hGq&5rUE~(cdORYtmMptA~AB8>ybuASyS+-inFa}M0J4zc;{ z7r28qf90l5U_4@lZ2vw~d>{Ep^@c8EIYkNCMINgJVsk|aYICIkVl&m}>|Q#zWO;5F z76@gODM)j3;t`NIMZCuGv zmGypc>y-DWp;gl4$Qz^<$fTkt%P0i_1dvr?D3 z8GztWzd@ifAlyMbCRAM}4{*I5qT_I_yeQv&4js_UW(q%ZnIxIjskZ@>??!A`3nMT}-h`JG{<>Tf7N{6w~xm)MW8 zEI2^6{PC`;>#VMXH+r#pQjI!pjg4dcJW&1p2ZRUi0rReTE`IQiG53fs&vkHf0=)nT zRXKYhdF4zy1EqM!g@97L(0rR&1Bt$qBwF@B2f~25EI?fs*n#~n3j929pu*~X0^OrJ z_+h%D7~V$*@ir*3^#k&p{631ZKmtXTur^A3?jfe$?~M2CugQTPMv6KMgR>)9^oTcs zgoIDa3%j#c))Mn9{S>__#VtaQMWM4*U{1h~g{P&A>%YZ-__~b>=k>!860&)c8kDR= zD@BP`xPrAZmzWI~Oa59w7xWSRq^bx1!DpR7M<&^VT zM2__l7K-j`AxnLCZxJIV^+DUEJJ4^;S^Gt6rdF{VmLD!NaC4ENnR78-Q28R3s# z+!p;M%g|L%$isoonh>{3XULoDCSZKma*2VdzU{$=|G^zgZytKR4d9T}+S6-}90yb6PjkF^q$R zbMwSwsNg*PaBK7`mL662ZO7*&b{{SKGRPD6OE8}4iNi0mWL6YpJ76gdPgXb$eEOb7 zJ{~$bpPa7{_3IE2jpXatf$_S-S1-&)Cwgi7>7SA-zLPn$rcHidv^=p&2c)2N5KkU5 z0VNx97y-y-+=YjGg;l2O;cLlRZh%woidPnl{*!Vo694B0PaY^Kglr3EoFtN~FD~=- z(=VS4a~#?Ws)2Ah=tt?OWf-6S%K}Y90JIJJ-Q!7~6(Ns_wlpE5{lald!oxlw?gMf| z0Voc|S?4{_$`~clvi;X{G&pA471Iu(O@Hqwy1pGp2Cf`NUxlEK2#ki6}Q&2Bh5d!v;j_Mm6El_%z=hJxSL zwu%B^1S?6+n_rk3inqRDPR*OM5HG{fk{n-F86HMgWXC1*${ex>1t>%_2d2~lC6mJ{ zelkCBO4Te1StMu}6zc)XrG;skqMijn&YK)k@#FoGS}NxbQ#=Lt%V7UhbB+AKq)b`o zz{F}oaAI&KKQKSJv>P0hUXQl`tJLsZ@yXNLi-6n%Qdif))M{cjRIM0F_wb{68@TDg z6>e52{u$||jj?=P$n>6>jf(N+{{@GB;w(yaznS8R1UEH8|FOZOmjZ^E57lJ5E zPVNz9QTqDXpG2UyCIYoxh5#MgE0dcN5az02aA10r-!(BjBh&=*Es;A4k7ZnoOgb@K zuNVmq;UCr&?op)wVpp255I>@wkl^NC5#BjYh&}GXu@Cd!)%N~e!nQdHb0G!}Q zCCXE}d2h#QMG4=oYIvmE&h(1wo@L#CjPTr}EpRtb*$CT0EnAyQ`1`d>Z>U2aKGaSs zf&)1!Lg;?lcBRd*8{&wh9G(>q7UD$~P?f>*7A?+dM+4c!u6JgOL) z(`|fuKF{;+FEPd-|9BBrHXnK=JbNtcSzzN@(3TJ=&Js{N3phrvpz#w#Q!3uJ048!T zT`ESE_DY|YkMF8OYU(W_3XLsK-WgtYGO^4uAS{G%0XWEzT`^%nlz1GV8IzQXjV-E* zd*Pgzir5L~OEA;Vhclfgtb zkAU^#a9gMi5n68k*}sRsw+04{#fr80r#BxJ<4k)lIyRiT{F^L@bc+~p$GCgSabH(FC1dQK!fsh~vmSFVI&7 z!QwCPs#dSHo`N0T>fb)Oe$1!Y#x(CpNNhNlLDr1hH5|FaMLdxwjH^f}`uUQ%{DTYa zchNwMkB?XPP%)xw0B_6SDuB0TkZRSPLx!!wUT>at=YLY(K7R})V3-4lxt@TAN5D}4 zwt`|`8+D1xO5eK>`LCjn@7(WSYyTJ11Pdb<(|>B3U}5|3S}3es%>S{wg!XVHSyST5 zz50w(C6;ZHBy)0rVgA=|s|J{L1RkI9g6O)gu#;Zi%}9?`R89sMAG`o1J+8*Tc&*!Z*g{R`7gt~Ray z1&bY(M=17_1Xb313f->8i}{*T&4IvhnoE^J(~QwwUW?=c%>p@<`uigL;N&DWJCzmo zFYxb+S$*}A%QP+nL1phF+H&5ZwY&Ji?-kng-jJ)cdy^xLD?wRk%W6Shb?A*#wgVPa zc4W{TCC(~QUUj6}ikD_o_C=wS6*g=q7)NT!4;GS5-|pcWXTRIYS!vHI3JJ%Hq5w`h zg@!5#^_Hk5@+Q;xP~SM{Tv=(d$`I=9tZegJG=FXh*w)pnTVzQ(GdL|&s1W^9HlViC zl*?+^;4@i#Vz~d6yrAS5?vzK$6`SX3T@;(w!uIP2^s*M-ol#H-rv{zxOG3RN?+v=s zWn_@QNXcLSd;eghYpL^!agp=dn>8bRQVbc{#pe?VqH#J(g2){G_tk;er8c=!2^%pc zdUBsAW9m76JE<=t`BbL**q^@Kad9u*eQS@3*M9z88ajz7f!(M&BXiWDLK~6P76&cQ zW~?IKHWmY23h(r`r19bql|z1Z{b=2)>%P3``OPk~fQKCo8rO(|Qq zzuvW7Ml>0fzj@&Br{Ai z(|eI(vx3s2&QtTImX*%AUzPuIik}=&;F8(9%LTXkr1F5(U=h4{I=~b;Lk>KR&%kP$ z*<5GYo5S$3ZqwY(tIGzL@m{pJ7YjK<7F>T6AVxFkeO}Hgxf@bRR z`1zfJ2hoP-NZ@4w-b)_G>tx9j;!ewoCoQ0TVYOz=LoN_;xJ&Q(C=SDbYwZ^w9VboY zNX5bT>P)zk2F()<3U+C;3YKrq#L0rCj%*G~yF%I;nga9~SZd#wSK3SLl8r@`ARIF# zqZXMep|_m&yk={-InXe(G1Se1e(NmAI9Ghy>upcz>T2PrAtRyZaujD_4~%3k?(da) z{jH*-ktwKCy5j@pIMA}lgyL?INk9`f=^{yd#@XyHL!g}i3qKY`!y>fecz2@V9AiX9 zT$v~awiTCSHz1e|6@}=cIQI=pZE2urt49i^qawC-G_FRHc+5jmWWjZD96N#~_Yj4B zQH|x_9pW@jZb{`EElLo{-(98+VH~D&Rz{gmF(Y@8vX9ofF2%e=?j7qKcZ>Z9EJ4|$3A_skpQbFcn5G4l5 zbgE35q1~?MOG+DStp~CVnTNE`Msr7E7iJ*GCg1SwNJn&M^_uPyK{mFhR`Uv@Zsm@! z^MvV;?H?Dagkbj)cVf*3EN&?yrX|)WGbZX4@Vy9= zT4I`mI92Zmdow2pe-MvlZ0P-xCa#?l)S=P&wLJN!dV%qlm(g9Y)=cg5zOe7F_EdX@IqH{s~zWMTt>6Pz~7>?T7qnP%5>cQvfaJ(3KVL& z;U?OINr=5g!o6%L=?@Q<#BwBA5L=|v6?VjO8jh@tiGPAd+z69^8?mDdXydEk@Tcn~ zfKXd9NGL2dSbyyiG*$bIppsV2NwVxH`h9DqKV&8!b8}P3bdVSQCvB=MSZW_Ocq$)K zNZ`mL}Y z6KW#6USKD4>^$u2O!CcfUNm3ey?`=;pIIjUCc|e2Zm~RJuow*4^4Kq#FJPddC=T`f z6|pZg?MlS9FbYn6_Yx9g#45lz8D-3Us_paudkLd*)Y( z?J?Yc7SN;=DNX5HI)g5yA6;3&djmyHUm|M0uM+BKA+E?}-W6KbajBp1!lP<=>>DbwCtVH7-S66>umx8j_)c zv+>gda=sL#0Z3zG$}tT#E-c{--><>ZYm^zy@y~!xPxSp-mdh@ZApgwrH${b%(pH)m zzTlRwW`5#{TnJN*&Vruu98t@`x6`H2uZFk>4=06#0+` zTX;zmaW!_gp-Y82gox!>MujPDTXS?Kp3EYT17WpITJ5@kK_^oJXCX%_4Qv2r%^F`? z!q%EsH~&_9;}GoEy0Gqv_{Z}75VX=0Hj}?8{2V1_ka4Qs*iXq{QoPzuo@lW)sv%p+C~$)+Lin zaHOcg{Y0i{E^gcLwXjm1mtPkliq>oTjx6^-FQ$b9)HKbAFH9C3pW}M-ja^9D_G8&$ ze8hJcK5>>!=QhjR@Wx4K<|LqIOD`4HV`oXbmzkq%D6n9ChHY z)ZY^|%SxCKzX4`LgYRk02x-?yf@yj6q}-1996OM)orM5@F}^d*s}zeW@lDp`SAxI^ zd$Y#ss|38-HgFV)r?~?#QQ|5d@m?Wrx0oJy)frsd^dRs~w%l3HVeUraYZ+=2pl=H* z#v2ShK?Ie-DFedUB~o0m2CsKsHIVP z+Cv5jPG3fjD-DKwrlx0h!?bd`@PDgQFiw{kl*$>9L(U`mxelo5~6F^7JN9)n=D<)%Z`wy~nP!omCg!fXJog_Zm4AJmn$$b$dvcn^Io zC7O#uRjoMp>+#i|;0Vv`` z=THn^d&ah1Mu(3>VrakgWB=YhF)(T!0*UQ9B5t=Bk|5xg*w;Xkv(oV~9NRAv*3+Zj z*(em}jwBXOQo752{iGgK4{73`iEdmD!5tboV{nH>#zbcqbM0A|kj??m#T|;eP{}OV zxK6dB&d+rOLPa|%?)*);CiWY=@%VFSTbq7>i?q~Nt`Kczt%V7J!2^R}IB9Vz1Xc~^ zq&)?LK}=jmA|NE?R1w9x^b(=ZY{tSsLEBJby{)`}xfXkki8ml5j11BYe5WdB1DBjjuCq?huz!&P87ekc zRVT`?@~U-?{W7CEu3H%mwi4LR^&(~M+(Gi4eI03_sjCz$qXCS^UKT9+nv?YOD7AU_@-$w5Fw2tJ!XPW@7d=N zr5e1(Tq{PY8~>`5dc~QUdb%XG(mN`g%TOzNdy!c8^wSWqeJ$NSEEkZEat7}m<#AV_ zAJy|B@4i>^zo@f0w)b>Vv--00oTuOJyz(or@vYYpFMD=g{Q4O1i9RiPe;+u1N!3kB zzgyYt{zFsR9x$Z_p>{mye*^TFrc$TlaOy3k=UwLvMy?^Zxq*an_*&ly7XL{Cvv-HfxUl z85rjW9z`x+UlHZJw*&kfZaMD0oDaogdmr5j7Fd_9Df(}`!eHc<9saVr>`aOpM~ECL zIFcTY?ktIMCyCbY=x_bn*O`IueoJv;=@RL_fOe>KR$Ve>I_Oi-4mG=;aSpFYB;tXz zX6N9#6*ruP1_k{!&An&q;s=^Tf|5p-J&}&DrJw7TQVU(B{U13=_l46o`6T;4WB6y) z%b7&J&k3H*#%kYq*Vk+_)_J=I*5%qZ-tqV59l}>%zMWTR>7OFCK6)KLw@xA3TacaoygMDOsTFzUo;KQ)=YjMP8JSEbnsrK#s=X#D(Z2BB^4+FIEI z(QfEsf}Nv}FK0)3^N3_}?f=EvSAfOQEQ=yRf)m^=!5xCLSa5f@g~i?7ogg8&y96h= zI|=UY8Z@}eTk@ZC?>YCKd++()_rB__?Ww7$>Y3iE>h9_7W^GK4zjetm)Y^nQ>}e`0 zA9MN5ukxAuO1|U%YrJH5)P;fKn~xe+de~1rQ>{p!1oRR3qB7XMe&7ibSnKJ&ZqyiA=G#&kvBT3)&fozYYll{wgo+*N-0g?_XfOx10L^)%Xt!cp!(F^mSicK0X8{6?Z!jDU&?VLfOe0fk}>( zg_-$v!BYoECsOd1F5tWj$i~#kjFgR=<=>u~5~VHsRks9roG7$yud@ zgS(J){W}UR^9ul{{VHF}XOo52*lSqzq#>5P{f2ecwh5EsAx|+|(FnqcZHD~!X8lp= zwo}G=u}kx{il5((v?@}Dnk>xoX1h1A)M2%*X*5!&q7o#bjZ13>P1gO?-uAXy1_A|D zp!;U9>QXq~mR#-1lGm-)NV@z&wvlEuTv>1U6pvXB^})V8sXiV??agXUq_x(vgBdp5 z0;}?&tac& z@mR8d)#E#2}=g1X!)9uG)sy{*-eV0M}VOi^_kza1I*f04?OZ;Gm%JfLO{ zqqEr|(9lu*HfwE@ft73NNC%AlTu&ZCkBdRa*hC&dz~otM{nXHmzu3&mdA^?XMNnkg zx4@lbUc#DpLOET$rFaSUQo0W`mQ1HQs7ltC5HX~}tjDl9?-a`u8Jt~YF;rq-k=E&q zI8niGzb5P)tWo}{Wm8N;mP~b7LbgH0RFtt(buD7@T6)X?JhZ<5BN;}c66&*#TS zRz-K_s|L=F=jJN*61A(wW)^m#9~6c*9y4srn7{?8XN54(&zN8&L!C6lHaKPZVFp=q zVp`qc3Mosw6bb%(5V>lkcXGK*Y+*H~vAtHB4lHk(vb-$p(nL&7mrJ?^p=vTEn`kij zEs>JrO3-JdjgqEI=2Q<0n=Zzv_

    %=^?qzaAeV@s-o=QqCX|H$M%2Ejo3{2vSY|> zZ%vW=Ii!t(Hb92jp8A_fEWy|}lkst9(GgNw5ydNrs53gmonN&)w$`M=#K`7-O+_jp z-^l)e_h5C<*+4@b$Tj zHNTr3$|Qz1-tMn~&?Fw5mN_>xr(_4n>7?A{f4PNJ4}hfSOb{j>%${7Y{U%eA*JZD& z8D#aDDt0G0rKNuWEYXOKZ4g2&RmP1P8YV83Rl&}CTE8!U=%71%Z?oA&i{L?PiFgl% zp`AD}wI_jZmh>2~*R2x`CDni4N}{dz!};m3`=#&=c-26UEj)YXD&zXzw-^sxpryND z#(d~aAjF|x4X%PWue%l!8c{4Zv<1FISLK~sooRi)caU+P)`GTE=d#|BWNs~PcKSuS zV`GEf_8znoOjAtkBeU)nv2ZMtWDr(rOa@w9 zzj$G}y&U}UVss2AEGgz;B^jOEb2!Eej?A1;WD$QaNWyWB)fvJZFJFd85U!Y; zJQDI_abij6FNg_9I^j5!A4Ne&*Tb`oF|lQDU2T{~ZE0*+1ZfyrakJwS@%BJW`#SWI z=szBWT@_i8O0B;*N)77K@JK23sI0L+o`fh1z-_e_{1q`=jF1*u+uI_r}&+N0Q^Vukk;|v!OT+#d;CAaq?iopXEZ?vUk9Gfb}%o*pd^0J1m z>gf9&$=z@zmR`B&@J75iKd$9#cFx-(#+x&$lbhriblfVOvAJI~DvgH6=7{G%SX52x zBoU2ZktGy05svvPi>xmaF6&g>`tLdPp%yhcHyGD+6Mga%-z~`vV8TszXAxAVuEEV_ z3TGUHqsD0!RA9VCVKk8=yK%@#!|%~S_nwbJl)iFS$JU`tU_u(9)kjlhicat5|8&}8 z70eqZcucal8h+0a5}w=S?wgLDkajbGr}$TPNkk)_mk;QrZb_H^?u#q=xe7WO8ROW_ z3|flrmE%JMDWRzY-X!0&FION}rd=_bQIpE(f^A^OKDyo$jp(0nR<5A0z%jspKj3p(CQc-{)W4#Y zcT|hgHXN_IypB?C)^E=Xw(1B7^@$bqTDt59y*ar?`PqnrKms$*A)aG&J37E??5~FYkf(|D%@axjMg9D*y6OKF3;44xf3HLIGA)+1k!9w=AQPvwTS8?Ji z?S}0*c~+40i!0xUx(Ukt0+5FKW)C>EB-fm&S?1>B@%k+F;;)jz9wZAJ^#?-xR1^JRRCyT{%s(0 z$^fD2zR9hQC+yJV_hAD~k3>BBAtCu!KBPp{jbtH>R5+p;Fo&>rl~>pXn8v~vu%kBu zpNRT}KVWCN1@y+yoY+~V0Q_K%DKr4Rr{FWMEKUj}^d!QbDv3Xdn%SE7woBzWd-e_v z^Q04r$#NP5Q1IHG09cnUOF>nm8RD>*q=;D^(VT|pHtdBD?|7cr^F2MS>h*+eD@pPi zE^wmu>KYtzkOO^u^N34`Dz;=ag7BhtoO4E1+2iL{N0r&*z*rION0YYTR$~K|!y$|~ zyK|f!k-iza9(=8mIGw-Rf!T*~DWdW>S|xc2f^^OR;q|ad8SCa~x>|U;zY}Z89UM91 zh3H&sSpYG%tVn~Dwc3RDev85A$YW4p-F@N%I+a^ zO|dSTSH|HrPW4=qjW4=K#-R?b&~%dx9GXbRAqQghCr>>7gwbd__ga zI;qTcUrMLV+5$t>lB)~i(Y10%^xS|VHZghjpld#SF+y7adRxYK1o)$^e7`7w9Kt;O z6ux4G?kDVUv2{OhGttcb$fY-0BH{*6<=&?<*>$LyZwZ4-j7nMO0*kb$#ur0p-)KFQ z%0QJrJyH12KHq;4wDf(DSTB~LTXgb9mW|Y=e&_7V{Uf`sqsMq$>%Ka>&S^AO$Z|hG z0#+Q9I#Vg4ueS_f(_kPf#VbpUop^@029xz3{a(sG9L5hR7de>}9@IDi4zpC~7iKW;H;x(cLv&$|XHDH>2S zbQMw5fB4BAM5!)9h4Auxg4#NBmq=(E#;Pg(#fRGRtr1`44g~QaE_M_Mz2>K4+w3jZ z*|1F4r2Csl>M^eXTGRn|*!#IX-#HpUP@7X}c^m6gVuM;0w&o$ku&2a(w z^Uh9>DZ^E?#KT2NeXrI}tp%+@MLstf?G=5y3gxJcPg8)@>xtU6EXy|jirXR2K}hfr zkH8p-ua{?mf|#GlCw7WlJTkG;WS|4J6)$eo8Hs@R)0A(AkFWc~z}y}a6G=OAY~S!Z zHtAt{mef9WJ|8;fN0b70FN0x5(p*YRN;Tq$3swsvu_$lVqcHf)h zCC573hyAIWB>Ay5{mc%pGW( ziRQo!?d>9|z+Q^Wos@okJ(F>SS#rzjx=kp2uF0y7$J@u}o`%Joxf95m`H0s?l*BO4 zhOg!0=M~&dRN;6(>iFr}B#ZN*bzv{BPDUh4?FSas<@mF`@%L96&TzW{FPcn`ptNy} zYy1+xgOI3fhy<=y;6r=uaJPXcn#_Pg;{2r>x8|I;JA|wWc}lo3Wt=rsN(82Swsee6 zMMrfzd78g5Y#g4Mc?vxP22;lHhAo0^v)B0GF1)p727Rgivw^U7JzQc@c#>WrS6irO zw`n_MWgQ-TzfE-SAnTu5^mqEt#v@aSd?FKg>$a4$_$cjy`&}>7c}p2-3kac7#l+RVA9c zJ<5v5ICi4kOKyi*??7mCcdpXc28||;->hxORzm~sF1_v7&8%P`wS_vntp1$g{_)o3 zh$w3Rx`?52-6UW24dJka^u861_Y1`~4cD=Ne zz-LpSo=*cwL%`S>eOEaF~X*ppi_mJgIxNRs>0;y8W zD5`%bDXEZ}`eCh_n6H=RKB<^%!A&(){Vk3Ukfr)r!QzQ^sIkgLGb=>u>mj1O&`tB; ztpJU80!uB2Ht5khP90CZvHW*px`k#>t&&o?^L}Eg#UWruO1kdwDwtT#3t6o@e%A7h zOF5g2~16}+hYy?K}5tHo-i z{D&+0IfGP>YD;EmZ@kZw$}t{^XRai9K zNR&SJb4}sY$M9OqATBbGreB%cH(yyC-razxQKAxS#KIg4>&m?&>1u!C8-jP~orO1g zpJ3S%`hLbEA$9ux3P$>%=Gxk=#!DA_fUkQHD{3HEyAf z;mmi}IVI-fxmSi$^|n1gegEfP+q;5Y%$7FTsYb|tXMG1$)+&N@zA5 z%DrZ>H0_L`I+lyXp{qr_sGr*=mQwiNe{Q9&64Fbz9pEwy1eEirk*8IB=T0JTVLH5! z>CHOiHCj#emK_jocx*p%M3(B18&jc=nQ^+~M+U$y8RZN`kee*4SeTvo?3cHZOu8hBnu*30uFcy7n} zz2p9Qgy&1k=}FOwucW z6j%n%_kTn^#@9Db^&52=^%;SvXdTP4P}1vK>e~-SUHiZ!Fp&gI+}pzDIiDu3pRjSW zdW9nqqiAcdaUY4LQtN{1`6@8Xhm2xA+!Y5$uhn_4y2~F&_r1a>htux-m^g#eQAyj< zADVw(7b8+3*CO2h01ZiHjeA9uf6puYp+>`5w;t$nbqtQy8YnPR<6>S5Cg%{wEKGkX za#_n@>&jVIu%osLU=?Q|sU6U5wrS9^FXmDqr1i`mR){I0HzqE;nsFVxRer>KHhAzm z?uibiH$KS(`I=7PA@yWcpV)bKUfJ6}X%C*aR$pIc)8Mkh^k}-o0tD|HW1p=z2CP5q zU=hv95d_x0=~;t?$wmB>6!~jyI#c+mq`fC}{2e@l|F+Nv6)6x&FUf7#n9D61K2#1_ zY=ER6BZMwvHc4%$K%Ms#^;=~BaWsi83PBt{#*e<^*PdDLtvhzv-w2D4V#Pq{LNrfb z7+R)%j48U6!;id#R;q>{gUOWU&8mxSBDpjpU1<8_=?SXBSK8L zl2S;3)(p9i8?*~GQb01c5dRZ(zuCWV90`8J&k0G`(SMiqT(g-!2(*`?CTIp@ypEcP zNS{PzYFL5_`ppYEnt1!8lb9YygHdU0&?isayAGKzNKDY|&8I53A26|z=_nc*QG2qk zbdj7M5Q?or_Wql>Pt>Ii-&HS4kFis+1c722=)m$hWEq!FxmQTcF#lCKt{;AZ(1zu4$TBLQQe?VDXcPQ|@Q}b<*{SW{ zK-}{f-$Zg!ZFz@vPPeTd*BW30v*IChuKYnD$l0|KvIENJ!w);23n*_{CKW)ecVr8%5<;3O$JT}hm#=v{25cSS-KkXPifU(V9bKMHGjDI_n_lHip zd9|wY0SFS>hPgNft(qvtAL_A{y{^HF2z6JuYa%=KUDh1N^~(K3!|L5FP&P2j9!S5X z2eKB8!0W<1BHSk2R#a&lHV|(;Ow!0(Tk=}-b^CyYo~o^bg?2dIi?p2R%~GGLuUEG2 zs&}^v+wzOu7Es6^uMFV_KO;PW%L<_b*+{JXIO%@kTDRge1woDM7q^KVL;&Al6rs;E z_C%Zp{wEY9E|K4tjlZZNS*+Iz*BQ*u>mBIp$bJM64Mu)hw44@~kKfWvBm8}#U&OpP zA#5O)qtCntYeUcH(`}(&V4tH-!6b-AqMnENCZgYZE@2$MY{%EaPGCEc{gzmoLkG)g z_O0u?$jo`9hBax$L z@iH;Fh#r9k90Ex|fRr}e-%F>Qlt;{55#7W4tZG$(nBkaggq%jY99N4B!1229wqsBN2V=fHW` z>f_|OtFt)aAuse>OxPRPlc-jk^~J}RDW1BPX1(keMR&$$k$JfZ&M|s+a-sOl zEBO1pGu#Zyx2NQ3=jALS+9eW6o^)6641&L?xYI?S`QlyqE1*5#F6ES5HIAzmVoW4h*J|AohF+rVXH=c6FLu?D^fdG9A89RV zg&n^;Z4I~RGyF?=w|=Dk=`K&iEA;jmxO3^ciip^8&Z@v9~YBxGCcvA4v?z$rF^nl(F^G!zBt{cKHX>pQCa4VYY=oOBHO+$+O0HA)6`9ZNpqsmwK4wLaV^ZYKZgmb6)$vGnt z?iuzKc$t$oxiV|+Z>=-#G*|egU{T<}5X^v9NPR``?Rof70KX+o>ow>hA$XDwD;$;a zZRc2lT}IZX{8^EeKdZ>GDd-~2!NBo`OYxEB8Pj(Vg_^B)3r}0NQ&-bPeE8J#mhBOb z*I;;jyNvz@WA^9A7w|?Qx}E>38O{Fj9~abDaIiIYHUc@2Qrj7usDLyWSQy!v8CjWW z5SWCVoy=??&UU2Anj$i!tjw&;q;?J<20I5^7js8* zTN^_wQe``kk-3Svk)ad#n1)H&8E64AasrDHaR3=Qfd$GKg7uKPnuFi1nStNIIXHk! zXqcoy?yj~D#*Wlr#eW#V7k@Hz0+CXG;(1lW{E?ZH#Q+uQl-c#*u}Mjhp>{=)Q2U|NZ472RG|~bY57vxH2_JEE17Jdh8sjG6(# zG3?kDVWLc&JJ}&dD%N(u!mg5EOIT`^JZmrZVmS|2YLvf5A@WMXkmkxFYO!dqIb-tE zW=+Nvz_!#3QTkz}q9sI@qP#qA)5_btt^vTQ$&SEv1BLmc8qf*7Sr^?{LJmtb( z9v)9zpYHWF?1M)A3E8ZH=!%U_fa)B6{mVxqZQQ`!g6B#I7E@vQ39pAvqlteJeJj!sxsq;=26 zJR^Ap4D@Iq9$kWiQcY8I{3*$q?JXy*1s5xFf|W_eu=t_zE$1V_b5sO=v=ts5_u(|L zGW3TH{ac)8QPE(EDBf;_!+h?j_*14w#FyOMXbKY7PoC+y`4c?c&qOcLzD0kLM6jel zwQ|wE1HRq9xw&t}&6m+>%aozl1!*<}UO{mpD3ARlOl;<>5&pAmYO>Oaoej~R_bg8j%Zf#~Igi%X1gc70*QX}#`5-YOt zV#qKB#$7<@6rsXcfO2?h-#u=qDS*Sz-W@ZrW#r0u;ROSr97YFm@(evK&nTas0EsC8~zvaI6-y; zeoU=;iucG$A^TujRDh~O&<*TwkNWSuR!DsrnadP6|BMmR zVb*^IpJ`)R6Q))f4yej`mas0JQ~g))nKsfjoihSd$~XG6zhy0nl+?}E$=2B~9#Bik zaA=u>ZFy6TiuM4((ukOim`z9Gtf5@8*IY2;JH2=W+iN3;bRMu9usbM@tak6XrNbSQ z1w4Z3)f4=D9k3IyLo1G4KS;kfI73N*m6qW*|2B+UKUODJXQ#MJEk(BuhX8p4NI+T- z30%d&#lcnQx2OaW@sF)h4%ERj1usB{@%ts;!SulN)D4TlJ>1oL3v@3io>y?f2=z#&_+ex}MlD9dQ%Z^IExvxP^je`sohc9CI_0b{V$xxR_?T z{yG|8;P-}p$GG+#Ws0bfm#yu=!OpjRl{0pktVzTnbo)7Od#q(AcXVkf^m^mivd`st z|J3*SW`{%PWoP$ncWVz-eeT5~nq=0tvjNoB{Jb~Ep}!_Tv^3iKJTOwU6k1gI;lcl^ zti$*D`1(F6bZP4C@ibGzjql0L*nQizm(r7fd?pa~U$>~Z|F6idp#(BPV3M>k2Dy=H zGn2Bgv2!r%A}}eNdw~8rKwwfQ)n*}OBV_@Tm27RnvyRxnYrKTkm4z^TF#V+x zF(CD6RNq+0$uUTni}+frkUM0tjW!PuNoJhkAkImK9-mK{=-j$ z$2xKv%`^IEEln`Pb09fw_PcMsvGHZYeWj%leLQ{oF`Ea#>S_(0D@R2ctVn{0zL^X~ z9c3k@>j9tj$~rnJsX0)@-uYNGU7~ObxR+-XacIys?^B%@VNQ)>iO!p=0hs_y>ea$3 z&33z;Y|j9OVwL8IS;fqg^=TDjv{1PyR1@Q?#m6V8M-nMm1yNSxS7Z0lTcMR=Emh7V zaaUsiA22Vf6pz~H_4;J1G>^*XiTfC;>Tn;b^sE{-Ip!G?v6l)Op2_#mnJGQ&j^(gUV|V|@-0rt4+%p4G*pj&|+14?5)aLeR^Ld~P%9HU<5@;Sd1L?*20BMHY(#5Jd(ZDNE@OC-spYwm z5Qnv4A|CPw0SR>Gnw9ADZgDfi%HJU_)%Pe@pXwKEvbiy0KO+v|tOw7FRXg-0ol04K z)nHGWI~B9~KJU@ja4KgNsli?cj7svNSw)yEl5VYZ^6rR<{8y zvD8JRj;iMI`#QC%)vDuxgxNAjAsSx8cwU-JF3MI3x!+%u7+s|4+b0uzY1Dq+PZn2U zMOYk5iy%c)2CmY_$beQp`UvG6Xzpj#~4anxZd=wJ`i#r7=v@j*YrM{`ZmZ|vXz zG1Pm3bXNz^p}0NDB)U|Qb={UVbAdDZT%$OQd~iW0TE01CQmqbTzt0u*UZB0!IttF6 zy#=+*6R_O-OvH6yrn%k!kgVQ|z<)?u0opURo{1X0D8-Yn;H*8UC>p)g=pSX{>U&Sj zcMzgELf<}q0@IYNj&|sNJ)}@|m>ubB^)2%O1eB)13|PFB{bTy<*GvO_j1l|_U=pT$ zL+ev~a{cM6Q1Deomc1u57DxJ{5lu8+v(fF~>qjG-Aidi2imQETIIahsZECaXx|qO) zkp^A?8!$g!GpYC1N1AuMik<6q30wIi_T}4AF-9b?^)69kdgf!_Z7we`w0Bd%KJKP> zvA2S{9|nLH$rCmeHt7C-xBvDo4ya;P-Cug0i4iFcub3I3i_wye8-SfqflrSSIfTmA zigppRe&OE7tTdsNGI^@1qMKZ0mNndKQT;u_aNQM%1ynrlTa*Q06L{|KNw+HO2Ty@3 z91T%9OG)Q#Y45V8K$eOQGEMagkP34ST;IiETM-2ctSBqr60`&1=5_rn0CmU97QqI$3M>)o9V$aj=3iR%+L@Z_hnpz}!KJ;1r zW0rT75AH?4)+%lK&zQF1f!H18E)%k+7cPBVIZr?`FG2w0uAhcklPU{su7-$nOy0@X zALCRD`^z}*Y_GT(>3ZqDX{{Z0Z0|)ykakI3Y#&D>DK=+K>?XO+J6_ViY*aK58LzVYW3^coa>U$5h=v>Ik+~BmFZtu*jVDUPR&s zKvMVzg~!$Y2((%i`wwOBE;P>E%Qr0~!h@+TF`+H{a>~sJfan!y4OC-O3*th}xG)O&kQQ z;~e>PRK00PegC0lLDur%%O*NC$F)^VQDsSJ#6b2ucFoskX*qs{SJ#@WcS4s5cCE+2 z8_Y4m>S|jv=e&&OQa6;*$O(soXdnS5!9$3mmfVV3E4-*SyKS^bQ^Bi?Z7PvlQE5e( z>s`hzvZ2-sB>>voD=U8H#1WWX{@u^zEX&gVD|#NfnoA{po1aDCXW^?AVz0%u>`2(X=Uop5{+aB*oGrVp)FW0)jLL&qn1BRDw=L3t0WM?y4o zr^7xlE8-g>2KGwIOH}dHUzTWtsjPS`dQr)zVRba(6T9b2(aXz_*ojchd`Q!mP$f0& zdsOl@qBLhdos;+`%k3a&6JLW4yAV*JfdB#;9)Lq5_=m&!EE@w-7RQ=WV4Nj&`BV)R z5#_yQ+d?N_NBdf{qra=QG47a6jWn;eV`v{6ug zz)H&j3w(0uy{6gCnTO>hS)i;}x5u!;j@&v{e63kN9{FRnW!R-Yr$(7$rDaIozRM1o zV{n{|$eMqg<4ct7)85SX?8~jFr|W-R}EbPX& z4ZXABGc>Cqyg=fNqHcieMy5t>41V9ksUUqT!K^2IOs{av=S?Fwa%|4>Dr;Wwucn^l zYMVo~37qy$cHLV=;-wjum}Ve&eF991C7?6lP*hTM3txJ zJFvlfwb(|subuVVUYD@4L_HlMu)Jgx)y`DnKg3A^=mk_tmbhQgX>jEufTuN zqQKr$&y^^zbOzqz0s5|#?kxk8e?MKyeUWbG2+zP$R@dh~I)r86Y>>CbY`UY8 zx_V6b-eH63NbztfrC55~tohk3%j{A$^1fMhIBIVSQMCN*(1peIxBTVPw-3Gy9A_D8 zXA+P5O}YKg&JD>Sx8a=a;COcv;V$!h`5I4~^=0^dH%nh{4H{SkwqNjB)bP8X7vWSL z;4Ih^&y6U>=c`%`odJGP@bl7S zK|cHHa;a+c;-M!4{oo`HR^%b{xjn14>s667Fq0Ut@+wphJ@RnI=T&B9cyK!>IJ{PJ z_TC;SV{VN!^s*Pq&tYywo`eO9f!|2}^aSFM7STo6`=jw|`4EsLUeIn#D*Rl0DX!E4OvtgCv@C#Ir{=U33v)n6D1BvB}Ck=nk^&UH%Nn zP(_07z;OKfj5(vncmB;+BQE~;KyY8oAI*CAdsS*oc9>e+<{@#C!2iD|eV; zuZYV_N9K&y^}&4M+`JU1(o4o7Pm%RkTQ^sZlP&~8yf63pFU$3@@Lv35x}N0Ns_zPE zn$5>%m<{F5kkYX(FbT{>2+?EXooe&2ONMYq!DjfCU(ZL@qJ|dV+MJS<#+|b@Jn`PC;mkEOv{s>Biy#vE z1=_)*h|m%G=h-1e_q^qLTeQxe?*H8mWmJSf$1l?EEn^Q>Bf{J|&$3?{+MX-HNvCcj z+|33gUy%4IZl)kFU$E&ZA;Kw?UbnUzvS-{m^ipo>BkvvV$7hs?dI@V9|2Jx#QW`L& zWH6Qn4DrHvWr0_*Ar8fUQpEvCDk8|!!bH;|(Coq(#)i=BA}Hro=p0=p^HAD`1XiI$ zRTwT^HuKP)h9pO!*jz|C&uRIO^9PNO(2{p6B#|9j8}Nj|Ms|d9oswKIMH@)z!H#ys zi|bH2LDF`36`kPq<>oeEmxHwJ{)a--xgp!GGqge<;OIE{-@`cI2tSEP-pzCnF_lRS zz6gpu_QAmbs85CbQ4zcp)&rqPFmJOv|9_MIRKk3&;1kpp;xv;&$DhnLqe4d&EsgK& zyQ|ze!JCKGV|&K z$M@2A<%#DMj5~9>gTMQyRW#O}l%5NzP!tm5U-o0paM*6&rk*dc?}%FtRxZS6HPLkV zD*NCTJp$$KXfnI=iyqJA_uonE(@E@qlGxXk*msfGkCE6f zme}u-*k6>`zmV8RlHC6wxet)sSC`zkliUxN+|QNVZ;{-emfSy<+=rFgCz0CclG<04 z+P9F}50u(Zm)gIU+8>pYEtemBnaYYjboLy#O-!Yo?a$)EXNex)OPmx+nsiK>EJ&K1 zOPYL}Jjt6pX`MWol{`6-JPDmL`7veEG-Wa+WpXHG@+oDKDRt5?b@FTKWMAs!P3j~~ z+N5^cWK`N@N803B+9XB#q-y$PX!<00Lf~QgBvHnse8!}I+pgBz_f=5fuBZkwjRy2# z7qY>Dm(p{_3q7D7yBk|{=y%4FiCFN&?&!t1$>%1h&-wCe{w=4I+2{CqJq5ABxPkzK zpay&kgUYTIu=U~|GR$7A+a}_I{~S3qrGSE^@K!a}-=f%Gt2ofZ%umcLfZoc_pj>lC}YzRp4M#P(S0H0szDLioxhFNIQDN?2gq+X}A8%*T} za%-?_=kdii^US5aChvbj+@9^2g9b!qkQYdtV|K5|@WQaMKEKu0mvEIy$>{qG+zH+f ze)CTpAt2XovPMWwLKs&++9A(}|+{`ZNyl)BPC@_J!mT~95qvLNaiBv?QCVIe6 zvAhZy$o?zUFvH^qRNj~+)`eDIs~StC>hM2g2h!>y+{=M_rO9)&yZ=KrQ~G~8``=zJ z0H@XGMPT;+;xqSH@+%4lqb$imfoBH^7tuDbiw&t~1v_uMpX0M+Mw$aidR@j0Rsk8X zX;NV4>aPwP`WgSKG9bP>L$_*4V#Fs8k7c+T(xn^Jw({Fav4~WrxM|pu@gjAob(gjB z|2d13Hnb?94fVFnFQE!SO$1@KQ;Ry7RRivj40%TZGC=_buQ&w1IGCq6ls*Wf^23hr z6-l2tdvTHjHL=0r*hwgM7|O$yN40h~Ry5U)?~6vb-qDa9j7_Jv*_=^^zlGVXxelu4 z{F^lI9aysv!fites{pql?0JMG1KuOQj4DKz9^!e#2LplHPDn2J&~@h8Zgeh$fpxBQ zzpr)(ay@ulhR ze%Cs=RWLMR^@U&kri-!B>iiUeT5|BkTxqlNeTl{e=T@a^6~0mxEb!ieruWTGg5=%w zsGH-kA;+~bP%-kS7=sB}U2^6$kX%9Y&eClwoF0)y#5F5MRgj0~rQn4X1#2q3G>4Vu zWk)|u11q_*wSto71t$`{G#J(_h|(kqTv>Dw&@~-k_!i@|y%@ENl z*t&|yrBiMmro|BTC>XkmhDQI9z@GZ6@ko^g%ar+A(@G|x1}W)4Wc{KV^EYPhfGzWQNPjqqf@{-ag!Z~1`J)qS3y?Qd`^Y(Lm(=yMG(=Upv5 zhOB&hp5ERz@;$~{ic_hr?}MB#vn5ifV?utM91!uQ?769y(wFhy%V|%(9i{bVS!p9q zE{rk1PwwCHF<*l<$Z98KmLQqBw1!gKH%b8fLHDW7S_kUFB~66|-bj-TlqJPTFIOx| zB&b)x4E2r4x;m4aK6M1wZiaAK76#s6Jxu?A2K>Ro|7iGU)Xm;%xN2!m5_riX@h=hE zErZJ90IBywT*R&b#+=I>Hvy71iE8&h3jZ&<{`2tn3iUrX^FUQ7vm*F|IZ(7Y2;?m} z=;TFR-o<>Zc&TJa=cM4xggDyypbI4XP?O@T@-||x>?tDoLiwx$Buv9_-m}CHX;H61 zI$#aD`XdFO^RHK^x1$z1t2Y84qM##9|%vIZE} zk>R^bgjid3Bswk|z$R(EgHG}aBTw>Lk3-ct_m>9P{e)w@Q$Q#?_on~^39V9L`JVFH z$2&{*bv$L_0|# z>yQvb{VCbwxj!cWlVG#5cHlwy1T97t&WhNdDnYxebXM&uxkEh0 z4%#(JOexkhfi+Dj$pGzoC8i*0nS3)#;m!w9CMBjgYnkv^q_}?rQC20UENGeN)C?P` zq)66)Or{f4uC+}7b}8X)pe%Jttd5JAO*;3UH%p1OBY7HGj(bH-lKmhPlBASG9TODC zg*`WaJeg2NHu>h^HwUaeDWF2<(Om?_G~FjGiTLkh$qVahkJrVykjcIhTj|tT+0ftVEUWHbIYd zu-jYAlg(=&8g8b})6w|`AC4Bd6_Ql|S$!Ev#;X=wE-LE0*D7ZQQ z9LNDk3;jQjaJ=*1N z7Kmtv&e#QNgi_zY*9j%C!?5YHZiIH-AO^>;Q?%R=Vi9AnI+1O6{=gq6w1V4CZ9zY_ zJ&?b2Tw#-2MlM5tGbWX!_1z@t)t{+iE%EBW?UNYQLjDpbdh0LIOa3UBuaE9S8dm`? zfL5XwL_&HDVGbt)@g=UxCL6^fZcrdOx`(X?!WQYYA7TT}3?O&`nTm?$ZUBzL3{_b0 z0)n@Y-Kf1AB_9P_{qOV7(;m)p&$J2p{Gf*pCPW`iUq3hxJ><)p|^=iZy=iB ze((#PKsuntdj270UqTeXQS%G#LrS44c=&yT7XLa}L1!-!Vx_dFRCb>oA(L6m5l9Ss62PsU;jIF zfpjYLS~@Lo>6oBLcz>?^^v&S(qt3wjI{0%9M}HJ9!)gL7(`y_LknK)2!fU=Nc_EkT zI{8{Y_TTxhq%2PdZMYnyzs{K_rY3eQ-jSC)&X7bi?FGsKerHF_Ksi=i_2LCtm zUScPax#$9;A>!L)$!`{U8S-;brt%n0sW63_27gC0Cr-{vcWtI;EZE7>%jyU6;{9}2 zMHFKR_fub1q@MPFm=`>=Ulo-Ij3`YluKy)6>Q&+CR8SV>Bl||tTLIZy^KN+zA28`M z8IYjj^CI6@qUf7?KQ*0I_*~o4>4fCzFc1D_XOm&;0V8FPREk1wAQ)*HES4KAA{EBi zkFsYK-m#AqnFC}m%v0s3yi#|k7Vp@lWji>(;TMUG?>|WHpgt>M>bsHsZO8^5wE98y z@bjCZn0x~U+%$fr|1x;x`I^or@2@7k597XFcy2<_DmEBu#TaS{7;0s$ zuO1suZzRqBLpq664=CxEtcSGiM``riRf4u0b0!Kf+o;8BA{Y>g-O#FwmP}bWL0{s2({W2t#?Vz~f^;M09&wx&E=$zX46E!*z7DHe>gg-S+=f_ZDDLZR;QKQKTEBOIoEHq@|>l5~M*& zIwS;Uq(Mr$LsCLX3F)Ckq*Fj(06~x#lo)E}+n~o|oOABE_q+e^`R?<)&u{PjTYImy zhCQ?PyWaP=HicfIebcv5pwl*Q)q36U)QnVSByN0+dsDF0dG6JuT9-RkO`6|`1Dcws ze)Yt;cTFXBow?rwNLe6{gjacp3(Lz?1whQo%zMF0KYL2b}oB#6$u7#}(< z1pEn*j*Gt$nkTrETC@6yLZ>n3)Zp%rTH@x6R~tH!){;qQk!CP##s$r0O~K;%0JW}umXw0_ZU5C(qP^a3^1G!>J?jpSRy7r450>#e zjgNV|xXhO*^i%HMLHabdN|>kfb%}g|&GY7|y~z!&s_S z+sNr6>h({JXE?c`lYAnwqLut(WW_81os@KWG~o&2m&HjxdOdbm382aCCXejmpX9-H zj}SAbTqi%*HN(**$dpor;@osB)-_;`1N?x^RfOf+DxS)+P@6+|egVEWdpw-s#$9U6 zDOA1Nat<8k)I7@$Jo0cJOLEs*@?7B8b=sR4?+Db>%IjR$HDbM}?ZFZD-O2YO^iF}I z3;0WT);_Hxxvh1B*AX!R?+~pZx?zG^8u(>?JAVC2eA_i$e4EQ5SWg45zLF9cJ@d_h zF^*rFR8Wd<=@LGbDRFYYyY1JR>BA>;(Hx2eM|2$|O(E|T3qFFQ7yeaHV0q@oLzc6L19kjTXY_iKCuPlL_JT#6$Hw#|0&63>G4=%tl~9 z6-JjrQ>ou#7JKG-dc$KVwS^$0jCMT#HAstn(@`wk^R8T=$LAJ`tALzj7Mn(S?qeuRR;Ppzv zPZ2jQ11~e~kkfbG&^q$ga)L^bRh|!TkXJ$jwPjVd*7dalj$X=vFoeeHS>9kT|8b9dAA~ z%24VAZ_VRoOF%YF^?J6Wf{aGfT6EWbr5w7i=#6RVDZF9#$29>rY1}?qs}{2%EPVWD zXqGlFd7z&**LI0UYa{y}y0)lU6IZc&$5mskjnEfO*B|yO-WPl`C%uGs=-%YtN$iZ(a@?}**{}pGEK%7( zNcl~92aa-{?m{SY)Hk5ysOThmlIUq3CX~p(&5WkU@FA9BMLFJxcf%))BXQE~2e{lM zyUMJ@b?ZUcFmOuF4pDy6Pt;m$S94wk*Y+T=l|5m`^$w#*#AuPN&0kd9#jQ`&_Fk-1 zV;QqT7>tt8u@Cu#Ei3aI=Nu6AB>|1A`X~|`n?E+ut9d6$3_>**+2?v2~koLyA^J%ebD`2juMv9vD z@w~%6!Jj`M?6T^LT(_*jdw_A z&pGOXYwtZ4Lh~~J72cXT`D&bibvmrr{0;*+ACxl`A@YsG$&yVUQ=p~%6}Voaw|Lx# zCUlMt=Tq0bj)|Xi4f)KuQM#qjws%r+X-o1MbZXHXo6?w^0Y2QXYy;wH?*jkQwDoF0 zDKEg1l8a#m(lH%hf}&p$_rzOzjq|B3n<-UV(Cl` zJW+(r9y6lpnLI}Q5p2-tQ220o+b^Ah3H#zJoPY{X#;;5;#Z$=}CvE#`!w(|lefazk!HeY=LaMlYTEH8F&j*T*8Q5wzssy*fGL}_c0{8V(1_lc?GL-jj-Q@sP{j~Ym197Q)SrNpQ>m%KD zc&TJY%mR)eHX{?X)z*|S-Mj>27Bd^2RQ15-t=Lq_b_jF-RQ(S8QEJG&ao87rDjc1l*M}c4->~{X760cXT2;gy^5)%e)GXE zRELk_u-b(WqEAv;_E-c0S|poezgAz*`bu1S6VpZgX#oI_z5P%5!K*CQo0t%F0x$np z#Il)}K3#}m{U9nmhk2+r=;7b|r3=14Q)?HrS)X2$9>d)5@tt5QIV$?mqFU6+|-;+8`M25<~2I5IIZSIrj zL`})ogTEvp4T5|X`{tSmS6nduK2v}C(>l%Q_$A$JtX0?UsGkV}Vq@PXE1limeC#yfOIW{H+zpP)YEmALE|>M|~g)GECa z{;db0!!iPj_I*L{DBW%0MB)DH>~<<+Pjvf}i)HwMcWm8j-dA5BmZdfGqi4V;^a_0? zBTLKhi6G|LLp^cXCHiK{DfD>SoE?Jvkjvt-Q%~BZ=IHNBR(LK48Jd1_iPY2>L?UBP>=IQY-6nrWH4)I^iyBK-Vw3_-~;=Log&|;q(xELQp77 zCa|{O>P3)vNyt;lo%5d7A4mdGttDhX)2HG$?Z0P!+=>N+$4mtBOmItsG%g4H;G+GS zDQ34cthrJo4kuesF>X!F6Ff@FxqSPj-KoIh(*2iq!2J?Gi;kTIGMDs{XugIN0_9ny z9=N|feOk@4rw4o5P>>8jfUR8@wg8bZZUJkP1#EljqP9oax_out%s;D z8}q|aU+QN6*T78tvnoMJGT9hi9np%)((?_)jiD|1m_x((&8dvh%#=v--G*21UT_sP z9rhAd-3r!**uJ!$y??2w>4O@>!^}EE%2Kwlo>G zTZI(ayO*yf@ADR&Ft+Sl)_hn9<&63n%!)W69)!)|FvGwt1|KqL1IC;j{0miWn76@T zPiE6_eJaU`wde$zB20$1YW5gae(OQPD56d*A~onYZ1(cj^Z#XlkPhyVk^4$d8)qZ@ zYg$@Kv8NE{cgcj!00t;YHU+kq_JIPToIboaO2+BtfwZf^3~=9HiK{wh3tc@ z&MAAXdt!~lC!Oi~nO?NiNHial8a!;!`7P|;gU6$Yt{Bfl zxOYQ}BvnpK*YGvL$%pNubeyMoc7D2o1Ma>M8wr)qrm6TNK0v;Ed8OheC6u;HI|Eaa=oKirEL; zd^lO>zICVI4L3GURqL-n>;?yh=9{~;1R(f1rylMkoDq*Y@glaSiwW(_?Xt9-O!vn^ z801e(mGE2C)?6fsdBS}`5yY&G3jI@Z5H2DRPdq4TbfY+&Oo!z@9f%ddaLfQD!)&<$ zKP!!ah2QzGkeau-#MR9TH;Fk6A2rTHFzk{QwcI$7TjSCIpHZU=WO`mhBpl0eFH5`^ zJp+xIey-&kMXn!50OAp3qCYmXlezw_m2c%=8@_eIK?DL?|C#?M)Jt*pd%&w$41E$u z#Y6WRUJ-_;!WVk;o(~f7MCso3lZ*7-ZaUGt-YcYN7{U|svfJ-8IAX%H8*LT)GV7Sd z$Ua~=Z!;t@NB5_Q@V}7r1sax9?X?41_{qYUom#byUy z&X3nM_H!q4g8$tp2@IG=(2>WLq@7NjE=VLV1t>}+8=wGw0*0g_ToIy91d4^l1!gfF zGeKD~zfj{W_Ze?5OdE{f_0`xX0}DQ4=k7Tl_cNGa=D$=VO}^{*4bEY+kG;jrbBIM{ z(KGq?ftNiyM#bp2HFXVe>|xw!Rvv-ShF z@g07mo=FPF={Cg_sOrmk=Xz_DaE~R`m=GPjx980L|%H&IOr7D z@WrCZrITJPy(ftG@2y~^Moltj6~^N1MmSzHh%%hJT&L3besU(#v$rCjYCF-KQD}jq zd(XZ@KT35vwAN=}{GM3-@ueb3S4p)1|K5uR1@pY9NmuGr+AOd*HJws^r4E|5$|I+Q z{(&NlsG{AH;FF&oXj%jU9QZo zBEyi=3Z)nB=?e+EUeR4ChX7|vh{Y*ca{pKqVefOHZFx@APmIWp?x6*0} zL|2RYw`21V_>N&GpD`rWK0BvIkNBi7FY?nB9tih!+erLG)pz%Zt8F^FM8|oj&nzy{ zvhE9iM~P*P?j!w#*%HK?uM{B{({gUW&nome)u&0VIx9tMK1d&4jHfN!5zg;EOB@H% z{aA$oNpzOtS_2rIe(tRK!S8znCzWe=@&_JUjweGBoT2W;xFgZ}3L%MFJYpOVjjM}k_asy zFIqvr3=FoKhbQQ4HGcOk+1wvCp|QF9(V(&IJ@iFo1Cr*#IM1Ab5C)Gh9_u_)y8noY z&G;j-o5u>fu7=LnSLpk9&Kq3#Sf^uvYCEg*tHJ@8#bLxuf5|bHKX({i?af1w-B}DY zYCD?}ywXXxUT1L;ifIU&vH#e+IcCz{>oDvdSCdx#E^mXyUdX0FaawiicPb?hR3U<= z9=(~GhuA{0-ePj`u+vst+MLYhb|9mU76qS)!@nr z^lRKtEUwbZ$X{dEwko=&Jf>It=af!BhQ)I|T=&Gps{4xVi7h0?inVXM@({J)Ymb1- zhwLhzA?BlHRrE8MH`r~gyv%jYz zqe_LZgm6FuoOoC@nw5`W-?b`|q*{yfPMoP)%4FVWuea(ESKicf8HoLrYWBGIH`7+d z_J%o87nD&Z+=iCOoKCpijTyHZ%*t}Yv&W~1wF>2(l|^$Z_L%zv#pKlhRn$1lFnAA>G{jBcjmtwE*{j#Q^ZuXlDhyMA7L}MVEV*9h_b*1P|xZh$9 zXUWo%2cp{)tP+dqR_UK3Tr-{f`TD)OL%P(p|DKujfz&~i_d(rh2v}WK~!dr;;_HG^-V?|H2PiSz*O8va|}6n z3PGl?rBRzLc0>1pxEkfl!bRepe|-qvqrdTDDuyp82QepV?g#<#;QgZ~veHfLu>W#E}P%Sc#R z7pooPLCh=hz%7w1{^OB^?dw$KQtFMb&x^AUwgbRTk>JZ?1D{h`B&Hr}*ATDu!+!wJ z4*7SX6{a)}Q*w8a8?H0G_K4l&F0<`lSu3Mx{Z$)y3(}YRAtO%pUEJ@C^`JFdY5cG3 zveNh$tCM%HygchD9^q(?CUZsaAK2TTNmNEb2g!34hN2@XT`U`;LJwmF08@&|5KH5K z4sXITKeu>A??-#vLy$S#rCIsCWx7_5hxJn`_55IRJ(Pc9ZwD!_H>pyVfSLQFXM!~Z z;ik3H_dcOvUvjiI{5}3=vBjpixOGI3rHg;IPUGQy#l>++8b`&no`!B?ft%R&H&gg) zN+W8|@(MrX!0m#651Lk3^>9w&I#YgK==A+`0MPX~5q(|1L7g5F;zVyFCO~!Di|{WL zAMT#<{6>fd=cVq`RT#HUa5W@^B8FY~t9?+^nv3OkNBCSUl2kgmwHB=bjz7#DrOQWL-c|Vb zDKUu$=P)Fd;I|;rM4)(BZXg}=@nxt2=1#piz0TTxy=fi*S>8e0gla zl`uAN3O^zYObEmvXRzc&%yu{kEOwfNk^rTl3G?J+cdl`jLW^ZIsE_s}Rs2xEd&hR~ z!^HYf+1vk%f;11v^So^U@8j1?zqzgAz3Y^ET=|rbsZt+xhxgEQQA@dpL#;(y?wXlx!2}F#79yJM)-v*;&`px!=*pye8whJpvpmcH zMWk4 zw-s5x(Jl5CO|@{@95=KOWtrrGo_|~^2Py4msZdIuYT z-R$_-lE9DnY+Z0-H#9(aLj4VZnQysKi@vm^=w6k%q~p$Kc_fvgM*ls|yFOX`h>!2# zNR#lBI{W%7Rc%YA}gHZ?NlRrWZk8-Bxfi|NZE&w>9r zz_B-Lhn;MRUCck=yg<#`FDF;NNG;l5aSAbZQLHPTE>VfDI~j{TBAMv`VD)b=QLFbC zE!1l&YWCoFhE;u__FaLyMX9goTAYGO6vwi|x#|9j4QjqOK@`>!D>~c?a1qFW4Vvp{ zRxW~icjc+1!imV*z%6jpAwY#2axbvGySO|%UH0q(QRpMzIR1pPh{-QWg$_YS+n*O| z!rDZ?O6>oT@x&I?pg8ONk^JUWR&9P4qxw~6+kg7}CbI*Rjg2Pq(-c1f z7L)w4w#To*34gO4#SBq_X#cVi)s#$Da9;z>JuwTmJ6zVu1yXNw}$*^;GoF_VVkzv2o#L241$=dyk z6#|?E@+ImNX_35}*>Oc0_U*H#+V(}BSdr$Dz=qz@wUV@j z-jrvzdF2T%XX|%?^hckTTEbG<0ohp9To~irUo6eN`H&2VSAESHsl4h*dmJZ3&+2$x zZPp;Yv0m8A)%nx%!ct#n4_GsiKXN8qonV$fz0pS4YsBeO0dz^Vy(cX=P6(IPky7on zfI`@d&*_up{8C?QPnutx5DKd!n%XSRcLl1=J!w91$l&JX%kNvBlwA?>(scM#Ftemu z-;?GNCp681#IG<z zV=uAhYhBdtxs`J@la}{HF5^yCo3Qptp_p%in816Vvv>#>PdhU;Brg%%v zyd%|(J&&k8%;L976a_U&q$pkHd2e%+mVFb;!*me6hr(vm42^=1!sn=Enm*A~5B@FT z1<~bdMkR&#D96TJ6@?VF5ALE<`iFCnr2RL8JeO#yhIpuG%!hbLzW}~$x2{`++#g`I zDv5$9oYP%Kx-V^#`$Z9cAoo-AOgp666buCxk-sxt0FrltEKu+KzppX;wfeL7Z}#Ax~1LnfVkF)3N7ye8B5_kmtp_}i!F2i z5-4fyP&DrEm!Rd{lPdlm4)60nXw!RC)cp2CTI63q!;!B?%NG5r!qA6x$KWz6>qE%C zs@mMr&JXZ(M_l~WB9-Qz{u2;a*ip5bEe8ObJ15_O|5*>5gaR_v#g&>ml2nh+WH#%I-cRT~FL-~BiGf+A# z$a7RWgkIud_SGB~`VLO=uN(|J%Bq2z@ILbRlM9*=3z}osm{HZ3qr01txtrtfnO!s| z@4mpo6J%r1!EDe)V$kWu9xd+}-@Y#tfIAs-BK%O;(itNpMvCZ4p7R9-XPj>5^Q_KT zh0bVJ&Uh0}G(t|N_t3)$e}DTo`cE=q5Oc9kKCy0%+EpD-w_(OJy1>)wtU7rMku|WRBwT}qf{I3aOIuG%X~NG)x=?reEmO&-qshKttvHd?)H8K9GO4bWD{Fh z&bGk2^F5HzI=2t<;&1>9^xFw&of!vt&vX0&cPRZRxNP_rnIkP5^M)dl_)|qF{AWYu z!D3Xj0w}|WQ=*CAhM7{ox7NN9@-0Y1c!cU?1jpnf`^hMp$uPsoNb$+=TM_2x<4(sI zr_&q2S}s8eM43lmNn7op2>K{JYKSQ?)KDroU8JCvnS26mG5?Hzvi)VCVc>-FKA*q( z9E#?!KFoevYl7#3K66+gzQ! zrwQ%mhgT_2W(#22MvJ(!3v7+;-ab;~kE7ui80U-J3hXYtme2kHY%B0Sn!b76Rcdzz z46j*o?7oMFoFPkr=)n0unvs&E7dw4Hz zLvh-*e4lz9I7_~|mY4D*1IcvU6#SylO?~ydbK+{gU37J)AZJJtJ^-1}e97vfzLfb& zJjR=0Uv@KWhPeI*A_%)qc6D`nq_)seeJ-)b1UClX+M7R%Gn{%{IK|65=T?DH8_Nc=3hn~j&W0Qd4hH{yNIqmwU9Cw zvb5X^i?VjQS`)S!Q&D#lR(DgOJrgc@o?vGc6C%yzE}T76Nxb<>3(1}I)bi&Q^B#8* zQp=$M`bt(OqCzK1D<{$wCt5Nm!Xzh(+fF23M-GDJdAzf);Zr9r%J35-&r#Y1LfS>l z%ms?fMO32&lI9NE#x{MQAP>)I{8wg0i00Jc7ZyX4@ktU>x5INPR=|QYM9nN7_Hz90 zPpM`t@$Nw;0?ROsiK}ZkDMh#Sp)wFOl{r_{xzuI>U)#g+oo8Oh_oj0zl#yaS!7~E+ zwn`K6&#xG2zASK4T}>VSw}=|82Vj>f{gvE`1~7TEX1%S;#M1K~!?*?(57o`o8G%2D z<)=^I1;7NLwh*ATAccR@(w)mEn8pqIy#%HrIws6IrUK(8-|k39f%Urji5mRDemOIx zx3}Q2^M80t2;}Ff`xno1E`0GqD4#EW9UKzZwzz`4-6ScGgpiRiZt+$!&rk)=2v*NW zR-RF0o?*A)L}lA(j@u-&P;rS%;iuz(2~`gwmhdu#-`~S9i(MBfhA~kylaC@i7RC%! zh9m`YVSXd>d#u-^!8|@-$^`zaHd@0^nUoacV=pt4C|!-$x?FVgQ+ZN6r>cUv^v8YH z>nmBowJD*ou>AbO!E-2UhKJJS-1P5<=BQF^a;Gz?bky=p3pYjB7nHd-q?2u7pJe)4rg3;k&zEd zV`*)ogjR4D0KDzC0&AZY52y@KK8ORrLmZq}zeB{a$yLg%W)g|M5kS}I*Nozeeu%e2 z^FegbBYW!`AtsIk7;x!Gd+P_>h}kay9B`lVDhsVlcq$80Cw^h%o)5^$-}tpre}Q1X za})rRJmP11T9O>=XEg-ul0Wvd3icBrPmc5}qIxRHO^Pyrg91elHl0r~%|0-(!NWVQ zce0w5UF;!nGr>d4q(yVVk7xxNzZ9FBlc*p4}Vc5W>^G z04^Pi8G@5P3+OifrTybmzYe&nko)VWNDJ_C<#xmaKAKN53UsB#|M2tLK#61-;#lJ( zV5{Bt=o%&RXiuNohc2|7nys9uq@2>WoD`UvFov3<{H+)I#)NKf@i#n%FW$^!S*)|Z zJDs_mH0fM9+jF0Z%+SN3&oiUCz$HYqPxyqxU4^5u>q3?5BG~F4+15o-)rINTMT*vi zd)Gyy!_VVyV|;OJ2DZ<0ZDScP2>daRB3zy)Zg#)jej;#Qj`1e{chLD_sN+o^tZj{K zjH}pKtK}(ZD1-BPbk{UhdpAXJj_GB}{~K6POo!M!J!|mRNzS3%Zusv#xa{J*I)?@Z zzLr}c;$FALd zy;W@;;;`Ok6k&$5nB2-#z#U1k-VUN}mG0mPml2M*5PO3@l2Mpa^)5(sW;K6#+paFD zJ16XI3&E`WACra^=W}Gvm`Tp4x1Dh(oKb|Fv1^^tJ)BP`5XSTLv{0VR`74=F5u$J&C?(mn1}@bN!XLv~cHS&a=8XBkqc9`BR|d3;DTq)|;r9KaM@9}A%C z{W&CvHZZ2v?J+`2$o)!}-@Y5_I5~jTh@-vB=)uaOiDbz<`3S=!j?tDBrBH2rM-4m| zD%Y&6a>Aln+ovPs#;Nc2N&gHeY2xIn#~;8=b z#74h$jx*130t2{#HT4w@K6u8Kd=vIEW6H&g?>|L8yK`L9GkD z!~5$quY>9mu(usGdlNg6S>TQFB8y&2FvHC7hQ3XUVKEZBw>^oMP|&QSMVvx4zJ+d< zrS=86vn|iUxLF5BdnnjjFcqHf34feFQ^g8tY9v)Xe!T}1%(w3eosK1}WoC3xmY=~2 zsne!#F5z9!vFNb(3Y|VCKaRII0j}8Uq^jelh zy?_4!bXk9z%nIZZc+@x4frJSkJ7d={GbE?68 zPM=o-bDybdY3HwO%EwV5O+B~BI8*WGR$T*+_SjQrPPPK~n_KnoZnLDOJA`=n1gXOx z*bpI`@)grh8t<)+??X7E$5w7a&H241@o!s7a)q;ij|w3i_?}bD=${rvnW+J#;4* zXB)^yk|S8!H3!$NdL*{m5&1{k*iaC)?#ta1C$@9j5(BbvlJD@do*b+&Y24uQbrSJ` z#pLUQMQ5&sEecbsl7c*Iqh2b|whSDCB${^GS}sb!UsvXXA@k<{al`7q~#rO&F#0Rt1cJuN5gTu#^pOI246?8qg+ej%P07-3#E zf}rBo74djT0<861!@*kAZ1`Rk(0w9BaSdM(>!+ANcb&%2Y zher)|@(qm!6Sxggvm5zUhr4hYgy?GvuOwy=|BaWcG(WYOb z4__jjgx&0TP;R0d3_<)+^Ot#rgBOMU;xHsZ$oX+Su~v=2GQ42NjW6?yFOi394)ZJy zP{GZ4&P^y`b7%qL*%-7}vO`lWssORk1hrQ`i*qWY?>$lSR7rv$C)I~RtUl0M}sh0&Sj)sL$gj6SnR)mz?=hwo4Wf;bU%?v(r@JBEbC>!MVzb4e$m~{H3 zPQEo`;J-}L$9CEaYonpY951=gkA5d+Lh6gzX(mHPptRzT3P8&;o~5)hpC5@l6$>~d z*<}OXXXaba2F#y+Y1a6N?T>(SY1^IB_6HG{f^jE9|11(@N==;Haj}3Wz!$H_j(_*0 z2}&gyDr~eM#lK4?8RYS1fdG%u5BNPUVni_nm+wQtHP$XH1NI(4R z9hfU*08^6nIQ?JjY_x;ea)v7jW zcgd@fj4?Mq7)5^%gX>!u<^Gosq< zHp26cA060!R|vEeHDy_Mq^w{MQ4VKyP|%Gc(GAnqjTF!gzpooj*inxDWWK@r!A>D$ zV)|j^WMJQ<|Fg;9jY&dPB>VoIr04@5+)L$ts5SS~bbs zow&wo@G;%#nJeT)KjvQ^gjHs9daBjUi$MKX0ZIkir$(fRz=ot1$nRsNq$nTV|MXkNJYFIgGR?ap6(pRysf}$K$GD#=9(i$ zqqZw1aU(-m3KK=E_u5!3wId*F9QyKx7&d(|A}jb6IUTY z!P0Ym{oGaKJ>Yf1$U^0*R97a_<|o*{-}-Mu(hsvYQ{@C=3Po1lShc%M8Lw_!i-~b# zU|f}z9}bIHYJ**!|29F$1`Q|LVNa1(b6D#S)@0jrOy8+_VQ2exyz-faes4|USHdwU z+g^IwzXsL*%em8w6W=b8o<3h)2#l++$yy*5eHPFR-k{!K(%>fDVC1Hy+iN2#0Cxz{mq)0e@1}GK>NlH`o*zx zLBp^1ocBUY z(Y7d7@CI`Wwt~ymR8FLdFq4Jb9=8{_Sb7O?r#@>0U$K=O!Ru!{I2zj7Li9Ru<-hQ~ zYICGDyjPUBp{Y1s7)xr-+!8mQS(;~|rP%v4Ht`lSN3PNx{DkV5t2T_*b^h$AI3vZ{_ zd-Gol#!(APvDNg*(knTIEexGrznmY%zqs={;YxUbCMkL$JD!>zb^4*SE-HZ$i%ta6POq_`@qbzHtn;i&6=91Mr`NpDf7N+OjFyb&5po?@xRR197lkak9j6Y)cDDZr z_&rg%+{E7ihD9gJ@v%7u4*Z!L`r`m|Ma3NLsGJVniNN_ExjDZCg zekfoKJ}bae6Gi@B@D_S{1*_j#0gW0^mAjhoMycae7_>UB)kZ&cq#v))-bPJSFWr4j z=(KF!g)8)D8=cTO3#&=oD0!$429ONAS%5(_Km733M%yRk|; zu6nlh5^{mX%x>+6xU#eYr5N3LT4(<$K^MZXL#z( zUAmW|dT8QASv*vJCm^wCf6AYpIC7bE9Lx6N$mN1tD!Iw>JdtM58?)qn>xkRXl(vzV zC8ALs5LvMZOJ16Fmr4Xga*mooA)fzuOhM8+aMV~vu*f4zBS*a2Lv1ZK|9?hiEsZ#Zyx z7QOclUg2cRG_}u%l&d2N-%9`q&P)+(P#tGM6W_wSoP5pent2T7fY)E+Ob7*kq-x)d zgdTpQ?LznFd@mxRnSDs2dxdBt9cyHdvV3aYxQvlgM06)tdty*ukdEHDX)FEgU+p*r zatdE3qke)NHHfP4!JpBsjqv3>hT+ZoU$#K;)0f$6{@K|6oYwW(@BI_8?|io-V(>CR zl6G@`(Dd5Q4LtE!ndqfKMv*_;1x~nxCmt$;zW|);mW)SJAQQ6s|H1A}_!F26Gz5Yl zM297L5p?v8o|A&da zefh-H768`^4$*+OEC$`=MTKHR$O5@Aj0u`A`AEb4VgK{Q7Do{B zJ{j5F2ax^1+B~)q;#sxQhzwl{(F$I7GmG_(*OOrh6~t`jtU6u)tf1xfPT&^i9C0(N zkGf}XC9gPiqyP0}TtWpao4LA9S7vF1xE_UfCGXx{i}ju#3p#aEGGR657IxjQC!-Q7 zXxPj}b-LV3BQ|s?rYm^=yr8!hXyMtb*SawY6%1_Vayng)N+U@0DA+3h!~XxPPyBHb zh%vW(+!u&yiuy06DSubT{dnHFv5QcfR3_)FM*=tsyzP#Lx{S@Zum zai{@bJW7P%BYG_yG|+iMeTQTHd4B6Ovp;29Qt@LOa$r*SqU7#%p#Ux^-+VT|L+r9oI!IN zNup66L0edJB+YC-x8cuWhR_Dc|2koa1zuRyfTIxi&OG|R`wi!!93iHL1Co!)dJ*89 k>QdZa{|mUQo2iSNrwi~;zj^uj1o`;+v6z|V)a9}MA9NRh;{X5v literal 0 HcmV?d00001 diff --git a/adoc/syclbase.adoc b/adoc/syclbase.adoc new file mode 100644 index 00000000..56caaa62 --- /dev/null +++ b/adoc/syclbase.adoc @@ -0,0 +1,138 @@ +// Copyright (c) 2011-2021 Khronos Group, Inc. +// +// SPDX-License-Identifier: CC-BY-4.0 + +// This should be set by the Makefile based on values in +// ../sycl_version.txt, passed into the asciidoctor command line. +:OPENCL_VERSION: [red]#Unknown OPENCL_VERSION!# +:SYCL_LANGUAGE_VERSION: [red]#Unknown SYCL_LANGUAGE_VERSION!# +:SYCL_NAMEA: [red]#Unknown SYCL_NAME!# +:SYCL_VERSION: [red]#Unknown SYCL_VERSION!# +:SYCL_REVISION: [red]#Unknown SYCL_REVISION!# + +:tmtitle: pass:q,r[^™^] +// :regtitle: is explained in +// http://discuss.asciidoctor.org/How-to-add-markup-to-author-information-in-document-title-td6488.html +:regtitle: pass:q,r[^®^] + += {SYCL_NAME}{tmtitle} {SYCL_VERSION} Specification (revision {SYCL_REVISION}) +The Khronos{regtitle} {SYCL_NAME}{tmtitle} Working Group +:data-uri: +:icons: font +:toc2: +:toclevels: 10 +:sectnumlevels: 10 +:max-width: 100% +:numbered: +//:source-highlighter: coderay +//:coderay-linenums-mode: inline +// rouge is the only source highlighter in release version allowing +// somehow correct line numbering in HTML & PDF: +:source-highlighter: rouge +// Use the "sycl" language in any highlighted source block +:source-language: sycl +//:source-language: c++ +//:rouge-style: monokai +//:rouge-style: base16 +//:rouge-style: colorful +//dark++:rouge-style: tulip +//:rouge-style: igorpro +//:rouge-style: base16.solarized +//:rouge-style: github +:rouge-style: sycl.spec +//:rouge-style: pastie +//:rouge-style: magritte +//:source-highlighter: pygments +// Line numbering on source highlighting is wrong with line wrapping, +// so do not apply wrapping according to +// https://docs.asciidoctor.org/asciidoctor/latest/html-backend/verbatim-line-wrap/ +:prewrap!: +:title-logo-image: image:logos/SYCL_RGB_June16-inkscape-1500.png[Logo,pdfwidth=4in,align=right] +// Various special / math symbols. This is easier to edit with than Unicode. +include::config/attribs.adoc[] + +// Default TikZ conversion to SVG, not PDF (default), per email from Pepijn +// Van Eeckhoudt +:tikz-format: svg + +// Necessary workaround for putting '#include' in a [code]## block +// like [code]#{hash}include # +:hash: # + +// Asciidoctor uses ++ to denote spans, so use these attributes instead +:cpp17: pass:[C++17] +:cpp20: pass:[C++20] +// Fortunately, the cpp macro for C++ is defined by default in AsciiDoctor + +// SYCL Algebraic definitions +:SYCLeval: Satisfied +:SYCLperform: Perform + +// This causes cross references to chapters, sections, and tables to be +// rendered as "Section A.B" (for example) rather than rendering the reference +// as the text of the section title. It also enables cross references to +// [source] blocks as "Listing N", but only if the [source] block has a title. +:xrefstyle: short +:listing-caption: Listing + +// Original SYCL title page has: +// image:logos/Khronos_Tagline_500px_June18.png (upper right) +// image:logos/SYCL_RGB_June16-inkscape-1500.png (upper center) +// SYCL^TM^ Specification +// Generic heterogeneous computing for modern C++ +// +// Version 2020 provisional +// Revision Date: May 14, 2020 +// Git revision: heads/SYCL-2020/master-gibberish +// +// Khronos^{reg}^ SYCL^TM^ Working Group +// Editors: Ronan Keryell, Maria Rovatsou & Lee Howes +// +// Copyright 2011-2021 The Khronos Group, Inc. All Rights Reserved + +<<<< + +include::chapters/copyright-spec.adoc[] + +<<<< + +// Table of contents is inserted here +toc::[] + +:leveloffset: 1 + +include::chapters/acknowledgements.adoc[][] + +// \include{introduction} +include::chapters/introduction.adoc[] + +// \include{architecture} +include::chapters/architecture.adoc[] +//ifdef::skip-this[] +// \include{programming_interface} +include::chapters/programming_interface.adoc[] + +// \include{compiler_abi} +include::chapters/device_compiler.adoc[] + +// \include{extensions} +include::chapters/extensions.adoc[] + +// Appendices start here + +// \input{descriptors} +include::chapters/information_descriptors.adoc[] + +// \include{feature_sets} +include::chapters/feature_sets.adoc[] + +// \input{opencl_backend} +include::chapters/opencl_backend.adoc[] + +// \input{what_changed} +include::chapters/what_changed.adoc[] + +include::chapters/references.adoc[] + +include::chapters/glossary.adoc[] +//endif::[] diff --git a/adoc/translate_math.js b/adoc/translate_math.js new file mode 100644 index 00000000..dfb652c6 --- /dev/null +++ b/adoc/translate_math.js @@ -0,0 +1,26 @@ +const katex = require("./katex/katex.js"); +const fs = require("fs"); +const escapeRegex = require("escape-string-regexp"); +const he = require('he'); + +const filepath = process.argv[2]; + +var html = fs.readFileSync(filepath, "utf8"); + +const delimiters = [ + //{ left: "$$", right: "$$", display: true}, + { left: "\\[", right: "\\]", display: true}, + //{ left: "$", right: "$", display: false}, + { left: "\\(", right: "\\)", display: false} + ] + +for( var delim of delimiters ) { + const regex = new RegExp( escapeRegex(delim.left) + "([\\S\\s]*?)" + escapeRegex(delim.right), "g"); + html = html.replace( regex, + function(match, g1) { + return katex.renderToString( he.decode(g1, {'strict': true}), {displayMode: delim.display, output: 'html', strict: true} ); + } + ); +} + +fs.writeFileSync(filepath, html, 'utf8'); diff --git a/sycl_version.txt b/sycl_version.txt new file mode 100644 index 00000000..cfa41bbb --- /dev/null +++ b/sycl_version.txt @@ -0,0 +1,5 @@ +OPENCLVERSION=3.0 +SYCLLANGVERSION=2020 +SYCLNAME=SYCL +SYCLVERSION=2020 +SYCLREVISION=2

    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%0D2qJXD_tkkDZL95P*_R-q#j)2C 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

  • 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 KZW7Lh*Zl{xmaf16 literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_Math-BoldItalic.woff b/adoc/katex/fonts/KaTeX_Math-BoldItalic.woff new file mode 100644 index 0000000000000000000000000000000000000000..87d4f223eaad873324b3e0d42a9a0cf211929ed6 GIT binary patch literal 22324 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 S)VDhlcw(sl0RRF2{{RnpDA*?e literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_Math-BoldItalic.woff2 b/adoc/katex/fonts/KaTeX_Math-BoldItalic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..83b49962aa8353a7eb7cdea57fe843af4dc06f88 GIT binary patch literal 19720 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 bXssLhNj(c?!93G5;NEIzo9EzaliuzI?ubzb literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_Math-Italic.ttf b/adoc/katex/fonts/KaTeX_Math-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9c38359cca652bf7fc7e7f9581df11e3267a375a GIT binary patch literal 40992 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 AJpcdz literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_Math-Italic.woff b/adoc/katex/fonts/KaTeX_Math-Italic.woff new file mode 100644 index 0000000000000000000000000000000000000000..959746ef56fb302f4f8381cd199acb54ab7db0ed GIT binary patch literal 22844 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 Ocw(sl0RRF2{{RmnPtGy` literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_Math-Italic.woff2 b/adoc/katex/fonts/KaTeX_Math-Italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e3ea522a6a2da7b5bfcde8aa4cc4825593e3f857 GIT binary patch literal 20096 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 literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_SansSerif-Bold.woff b/adoc/katex/fonts/KaTeX_SansSerif-Bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..f0d6ea739b8405ce37eab96c71feb4b0091503f4 GIT binary patch literal 18516 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 literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_SansSerif-Bold.woff2 b/adoc/katex/fonts/KaTeX_SansSerif-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4cf8f146967e1243ebfd1eab7ff9c596be939f2a GIT binary patch literal 15732 zcmV-)J&VG3Pew8T0RR9106la74gdfE0E83(06iH10RR9100000000000000000000 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 H0YLpfq!Ad2 literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_Caligraphic-Bold.woff2 b/adoc/katex/fonts/KaTeX_Caligraphic-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..710c26179c5f1c9998065035a82a578cf45d60e9 GIT binary patch literal 10448 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 G0002%wf^z| literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_Caligraphic-Regular.ttf b/adoc/katex/fonts/KaTeX_Caligraphic-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..97814db7e2c7bb3039692551a4fbbb7f33baa46a GIT binary patch literal 18684 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 OTGv@~T#9_E>wg3J&>da? literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_Caligraphic-Regular.woff b/adoc/katex/fonts/KaTeX_Caligraphic-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..aec8a33389cb27a7e2e603ece720eb000fb9a0a9 GIT binary patch literal 11460 zcmY*0|bYII|O%kO9<`|g1fr}cXvOyoyT|Ydq3Vxt?F4l zYr1EucFp|Q?WrOy4S)cAHl_gp%70e&?SJ`y@Xs~hs02HyGUiD9yN=4}Yv~VzU z{`75s@*e;Ig!#jAgRO;!8yNsV|LF%1e1ZYskDz7cZ0!I5P+9^2FfjlCV#YGo+O@SA z@KeLo@u`9Tzd*CL_qO_sBMAVIt^xpTg{xk`5}R*kpXX&#=*_&Q#b#~(?3yXu?9V8?_}|*BNzST`u_nM>oL~B%BcXzn`JbYS8y)sG$y1G)2{J!gVpcX^l9lDbVQqf3sxD`r6}E8RD| zzX@4cS;AJ1UHGGz?f$uHrkA;#v+txITcKnpXyO4xM&eOaW4O>zA)J$rWrP);5(iTm zTc>U_?}6YFr~-1?(?>8y06{=z*>7cIm7lKIdSu#ZB|!s@uF%j04%cQe~24+vPh~*DV$_YaA>6!CgDes z%=&j1why)YBo2JIweCI4s%?;G3C}S*^T)&L@F^-Wwgh)g=?5Cw5`6GgI4QZtZ;|t3 zQB&JwRpry5Tt^Ht=LEFAq-!DA$UE4d^FIyl$IedElF`boEFEX^2)%TgF+Gc1z&X!b z23}ju`{21NZ@{SVKh4C=eD@*rnM)!XFlZ4kkax z6vv~rPXNqp+&qc|*t-P$(jF-`-=tZ$8UQD6>Ub8-na_!z>}(NV*!^L#)bueZpT6t7 zK$331coYQ6?o>vqJ6x|HF0|v2#Ymslr$*wH3HrXmXfY^e!j^u=GI<*LO4jFza`6#n z@lJH>)sPedieY4Aq&SaOZHIBQ|LvJ0?dxNe2r7_DriZk= z4S)(*2bEXu&t3Zw;~7C&w#ea0jlET4Mq8RdLdXlk^Ztz0K!qeX%>hIbN(QyS@AtKe zb#GK??W$?e>g-hPdK>#$iqQ`T96J3qu3Q@X7WkOg8r;0g?7fx{=Xqtp;Q=5ORbeFo zVGZ+$`zWhEc5Zt#WFmn6aP#FU-Q~@vW|n>FjaU15P$3YLC)viPQFtoNV`*|y9e!K- zRWiyck~}-Xfp>O^bvU{q*ExpBCRFBPt~zWkHbfltC$yQ9$AdmcRxGZo+*+pY{P$M& zs&s7-5uorRbayCqAp%Lzq{<30lx%d}B+TST0WG3snmzI~(?OznYpAFaSsj~zL?)U2 zKNtjSc=e9qU|BRt!5Rix`g0C|v#Fhni;KGp*B@hGe+nq$Ytr{2xD93Nn#M8MA6-`* zO#y*y(xrr`?iMafh#^1NZmuj>Jd0fY(J<7zs2V0x2{K|SXPQOQq`oTWz3>(#MJ`*V zHaLh186tBs+z+PkNVIuXG$AxO~>52RmUa+^(xo&?u5WyAbPrp~WCHFVVt+#2>y;8>)86Kto{F z$wa1F=Acn{Mp500R~xhHtQJcvVXs&To;tXm^9AJ2cQV5oZ~M397sZmkuE(8RtmaJYKfPo*RVVqD6D(i zP#a9Vez2c>J0~5kr4Vw>7UZ126~%|>bpf51HpMJOQ15PV`s5UnI!*le;VkxqDH%yt zP#SSikJbummc2k~dRe#h{&hi~>L~r@#u=TfMnpUipRk5UEK(WIIaA0Zz0eM8Y>Ke+ zsu|?f`9OUWX4TA|HlaA~R-?ISyjM4PP(Emj&{6RAY(Z z*=o#4sBx25E(l3*`UUfe54AO=AJY*FU!ANfRb2kfCuDmVqbPPpAat%B8o%EmWW?i( zga^ckW@RR-K%2bJ3}}42aKF8;XMD(bpk&AE>J@I z%;XtIS|#tNQQR->g83k$$r?q8y;~huDQhIKfcyjHh$u&lTKJ%h(=8)uWo}KKPabX8 zn+9iw4q8wHR|W-n>enkU;WSTIwqo)(*QC4f#?p4`JYaO496Z!-=to{vf@LrF;swLj z7N7dob$#Wbm?9rg;X3@uJBhC06aHRLPyWVmAWNJ*VM0P>JTBfJU}9otA!D3cWM?tZ zW3L1zYQMpZYitM2^MN%tFfJ_4T&L-ul{jKxfGy)s`w6?w#E{kc#oM$Fmmvm5galUJ zH-gQ}Ttl=S?Iv}tdChXoT0&(TulrloDCE*p{F<-{$tpvE&SeK2b=!7|mCiSk*rD?jX5oC)Dwm877D4JhlI;y-^sX1ut-VgYEX+!+EDltM(AYy01286 zJU$Snw&F@E`8Equ!14OU5`K1H7Ngq2!Im(CC3hFAmbyAW^2f&6TS*!-fcsphj}L#< z^x;O!H-w|*If3G~_@Uj~2Uh`sIzzyPQ37{cb9cF(-YG5cy7pZ2bh*5(J~ewnQKU&n z9)qg&RYalv>C7_EkX*#~;h#HeN@gifgJ$n2gKN*^-IFo$rRP)t|KXP=c=fQCm1Wjd z=*zM~G%+lf7zng4x9sBO-s#ScH`RAfgP5TdoieJuzJZO4x@NroWR*S*(F~dg9);qX zDiZ!pLsL^TZLZ$st_|#3AhgAfT#@U>docupr`c11lQREg$~)lkJBR$!u8kF_CZJWg zt5&O%5S$=BR`VEcxH(U!+`>@l=sy`Cn-nR}a~U+Mlt|>I%esQXW^J5Cw{R~H)s_23+HQe=lHdTAAn0l(to8FAo z94Z?*x9bK?FX^+>d=GxjA~kZ^0*e(NvJJsQsJDPKp3Z%LlgbXEQbAl@>|G`Lf;)oYSQ20NK`+52(z}i{bu{U& zuwUZRa5ASiEyV(>Q*lUylDjQ@OkXm&K-!f*a}|z$w-Y6JwEvt@oQz�y2~;QCrOg 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 literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_Caligraphic-Regular.woff2 b/adoc/katex/fonts/KaTeX_Caligraphic-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ee5193d7c888fe2e82fb54342f2bb5d4c34b83a5 GIT binary patch literal 10240 zcmV+bDF4@YPew8T0RR9104M+e4gdfE07)1C04Jva0RR9100000000000000000000 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 n`rw@-F{Wjei(Pbp9SPw*Bq!Pn-VdZvp@y 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%0APg>lfK9+NEbfec22@_xp#;D&6-v*%$^l@Z zQK3!5B-6~Y&K5_U1g5H~RxTnyK=$m-v&nAZ8LFh3`9onUxs@BamMgiGb2+`8ahKgi zZI2TFRHDIj`x0n6joePT9-lFVCGsqI7J1GT zRgvdSQ4@K=6m^joP0&$7yziWUB1A@QOghxVmJ@+-y z!yLZuZ6A~0_rWzCh!t@v^Zs-`{;5J$vVW?~R4*ohyn(|Z2CTH!9ZVmpxd$zQjs9a_ z3DY&r)i7I|i?PXUtW$Y|_TI@fA@q#ypoSU|I>-y6jFQqpL9|5CI7uP7j)to5^9qlW zQL_Yr&$<39w;c;5zb_mRH1(MQ2l^qXc_3=!sso&LbXS5&wH}JTOklvMT8e#os2v-c zO(mRdQ{HG|_k8EKZ@*9nb?~4vTH5&0071A}npD1?_old6%Ev~NFRXR&Fh5NE!naOi z0H18B=XR=}?zTSA=9%HU?txAN!}r`Afu&i1cE1hE;?p6zGw7ReF4&1fz zXy6V17p>U+zq(K0XLkWh;|bYOZzmaGjD(EM{5z7rqXz`&ySr2FBIPsv;p{1y!&5%r z#4LVvi2k`Lly&+P-@^KZ;X4p7g|!I0QYQzBLD*MD+L2#k`P%gG&S3Ed3riMnP0uPd zfAv_`W)1^D6oikVkBbBi9CIu)vt?#3OVFTqR*=o}_a_!R68cL9^CywT5IGEy#}Ea~ zmqZamlrTgYLsT$75>*UQ!w_{0(ZKvmG%-XAL$onO2lFk_#SlFV(Z>+3dWPHjPTi#2mCk)k7O7)CVI=8&nlr9)bmz2^KrF3n1Zziv(|d5e>nG=wyi@EmD{)O@0C?JC@ZQ02A}C@bBV%9W2F9Hn3>*x}1sfUI zoHj`?GH8Jqo4Gj{IUp=iHZY6bX%{mC10w?`kj>$=i@^cHW@d2NsKVG07_q^jBVr?S zipxed5N{Vp0|O(ALq~E*1V~9F5Nzhbe8UH-qia_*y2c!Cu4CK^sS5Kz!WC$nYxUYBRjfd?k_|I!BK3B@#n+z z()D$2goCz?Oj1zTP3k5W7aKWT-;&+TBxCZ{m=MbKqN}Q^Xm+a=-P5+MFWN?Y7cDFE z`=Z@M5IdJml*>hw+sqZJuoWY>gCSpT{*GV=nridn zA5jQ+9MQ|7xTiiOx+Ln8oqLxtqs?dJ_pZ1~>=M^~2l1_pSFdA>&s}7md)ImEodD=Os+flwrt z$jZqpC{wONr7G2G)T&djL8B(kTC{4@u2Z*OefkX;G-TL_QDeqUm^7tm+KgFq<}FyX zWZ8;UYc_1!v1`x11BZ?rJ8|mFxeJ%BT)T1W&bGyu`A#s-E^+6YP;LunHzZ3?9=ptL2Jc5`!q(ymb24FCxyEMWiu M000310ssF14|n8Ps{jB1 literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_Fraktur-Bold.woff2 b/adoc/katex/fonts/KaTeX_Fraktur-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..dc3bd4c040abd23afb59d2fe385f80e23b0cff41 GIT binary patch literal 20360 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 {um(f~Q9HvR zp%49Mm#m~@(nGEo9Dd~Ew&(pJ8a!S0h7F7IA8%mZKSSBZi!ox)+cdVZEux8CS&|vI z&--fg`(olw1J!Xyv_sJzlQ9TP>{%G%&aLkGqRyn!)jp?c;Bd@7JqTB1Z9UbXVa<0Ma)^{xc34E?p?XyPNiE9JCwUCP4%ocRDlJiKfYwTje>DSIUe)aU+ zsWjV=nsap34{55FuB_r%oZ4R-mk)8=oprO@3KltG$m`IXG<*$p%$`TJzGss1Oc`e! z#hE33<4iT1x~aZ3w*Ch{eZ82bHajVGuNv6WKiylI2cn#l2=Vs`qOx>gk;y>fH2?8Y zbkOr(DBOGWmVE{-#(~4I!->P?Tz}*R^5m6WhJ^oVSaGD^UT9g@V8ZT0lbE@EL)UEJ zY;;2~i?8W_1*wsx4QMLjCJ*Db{_KKTa8*X#(jh;vj!`&-bQjFq8#J~_PG6>W&%>Gt zlHqNjHy%nD=-_!KmviK6Uyk&+i54OYea|8C9YUPL@Ic$#6%Mp?d(+BT+y51nzMfm} zR=93Uo30K05nXXUjzg!+LjeI`vr6@Ok@tD+s~gTBhiY=4SAK7dc7vre%;8Hg4E?83 zFR>_HyngETGQbL6*gl>1uQ54UJzG7N3|oV(^`QK%AeZoojqh3Bh5=vk+=8FZ`Of!G zAY<-5+qDnE+)I|ECdLIVFgf{t_Y+PJ&+na$4t<{`tVeNdRc%|gPzN()2sYd%ce*Hc zzO%MM_P8sd8&m^20?zZ{h8{(<=9}f{?`JoTGEAsoJ%2rXeN3p0cfV^N{#VSewnT-Y zb}CBpc%XtEU#O8*ir|4%k*)B05W5LaN`=-1O$nBL+fsX$Ob9ko+!IuctL+SqRd4B_WNMW?Z7?w*Dm4I zLX)*zMOTe>#B&C_hhc+OJTURaq@m)V3f$9FlNNey z-;CT2$H6n?KKE~oP+w2o&h1PWdK)7vq&T4poqZ*IKmH;cxwUFFZPAObSZEjR)bN4J z|NMBGis!m$PLT4qF+exhLSypU4AxfFBs7E7*98yZL2|o?ky@`=)`qCw z(%@G_leyvc>&kxH;xz4^P?OsoxZkPJL_AUguWIr}dLW-37(<%BSh5;f3zJ~>bBSyuOdkiXDnUZ5>+!!S5PppT03Ry72KggYy>_@iKqIt@q`dq?aPcd}TK&sl~)U^q~5Dzs6c$nY-$`-Mqm| z?%w#C(`U7}TE${uOlRGA2k?9CPW>iTzHzk_ zSzawugz*OkW{zDXL4wLg#a8+)>QFw$TxbSnHbu(h((_tOwfAo^ z@ox?V*xO;{C$f+r5di}~KmyCQy{+qS|D-o>3a|Tg;~&40-QPk2hZmiCVQIV9R6HhR zTeD_9>a{3N-c83cT)9mpd2mNKoR{z8PEFDM#O|$jSw$>1$8ye_e_wt4p7%UdKg%#-&vv&HJ`kK)#$MmC86=L&qI==8iHIYVMhF9jaL z#`>nf;f6I^WhsjOZ7v1#>hjJg`lsDss(1RBn`dMEy>@U{5(QqYhx)&(wfV@UQ(BdJ zP-w(nwQ3!^VNt~BM7sgZmyXmU(ccI=r~eenPb>;lLo;>9)ni2gQX*b|;Kaip1SPjk zGU9;g1!(~$g5P9#VlWdwO&|sim|9dtE90z*DkFZld}RU1%Bd|YvDoluM&7by>MJNE zz>r{~vl*rv)!>2r?V*wq|_VN{pP)x*=s{hOW*%QPwf{j)43SvCG-Cl*gaNBPL-vFjCtj47nvsWA@4_xxkHo z?}&c~sQF_E+pCs&P};FvP5BY_7{NS9T{bA8kF;A1mke$$!$dRs8!huuzWWA#pp)o=DoI+S0yu9)LiIvH?`uM z>bu?|81C^x-;*iv9CL?%gr!C)yrQMmqvUP!B# zXBggw@jX3QEhs1af^)JRI!672$$YXWd3MGT_Ow=obhmRV<v`R79L|EktJ5R~pR}fT$tJ{AxJzwb!k%EJ#7U}i+9_|dd8-HOLR9Y&S)`evb z=X=)#K45a;*>Vmm_rG{>`V0FxNy)C2#ZlUf9In?}dCxrRyQaYkG<2jYl^VkWQpCUh`di z7WF!Fl!>S&YBQ&cB;22ub;X^Zlo~9k+_P>>-qo+`b$3=&!-Uj3XIDttT2en5mLJdA{ZjNwL(>uWg4LArM>A*I%V zHn8xjQcOaTy!328RY3dSSP0B))i~h{CpK)|oTs0Igy;4i2+7asw`@yrv{Pv0d|jo^ zD>ql@U|g#fVK7o|;O!@oNr1U>guK@uemK)Ve;1Pk@feh@msn7XdZx~#@=N_j;TRc{ zb~kXVd5S#YN+eUAhOYcmzcO}KGVBv4&-&me&}Z`^t(W6k)*J`?D?K}&SJvn)0;2t< zCDb;;yI7^7hK7Ifo+rS}o%*!~LntCoZ@hb0T%P&v7&GxKd+Ryr&X@2?1rU}aciHI(a{k-O#4ufWo+tB@Ll(k>+ z8lvb$H+%3%8c;}G&)yl{NZGl5W#Z#Z%zZY{o<2!qXD7U`R1l@{<`P;2+mHk*%;|H!iZN;{~i^>&J3HBPa=(?5@!)@t zWr|ZVn7|sghu?Bj*YBF!xS&sg``Sc)F|d>^t~Z|U40Cx55OHCxt9mQn{N>e6s2c53 z;lXuN`YiyVC>Y4Rx71{D9PkTh#)@SOgY^t>c`lK?S5h8&0d=1_0^ZT!zHk_l1EU#5N(bE5da}#V)sCD9LMk z&bl#qVUrZd82G4F;5VTQK1GKCj~7?A5}V{vs@Gqez{FBwV$5Rq%mTF%W7wkjH_4=? z0&M@3-pfDg~IHGra@Z>}>{kfR{Lo|7t>p()XQ{F{z`mY39E_Rp%89B(lZ-#YRF zX3^m`7cD4F+3V;5I%T(=kb_+L-(a&f#(YCLl(cg&; z$fc&LI-`6|V(a7xPy+e+e|>5p`2gRV7*uJ5a-Lu6dAs;fNPYft^K(fWYD!$OCyAX? zNTKxP2G)F|mY5`^Rk8a95yPkApV%ZqklTb|8Z!Ov#{ptE`jeo+$cuQ_Yk*{WZSs>w zPox;hA=+O^E}um*01L=otiX6sqr|rh%yEs1pWhtPVp@h)h^s)!t4Q|nFWYAzta ze|qSDiAR4?T`zu)8znL2S&;Fy_NiM6XAmWI%58Z00q}zSP(5~+Y(K3lhs>!xgE2!O zSXq~EfCdY@lP_A(g9axWaErq~?NP-h71(9Bq)lEGegw`8aLP0zrt& zWWj@9Q^kmU9PVAtzxv^TW7zuyO3)bpt%Kvs>#*nPJuArPpJ3F0=QkjI_!y{ONXkhu z)xa_L0R<@Ty3Zk2&_$43kkOem;-jt7wIHAlZIxWtR8wC)afld}3kK#_mGpFe^G4ox zV|^9h1v*+h=ffpych#vCijR9J$6pu~lqiH4ZoKrAA+ad|nKUSp3R1K(R3_p-+^m*1 z7Yb{a%00%b|py=tfx6zM{y{Z!kByL+)7A7=^M<+k_+rzRl=XG-%R$`6;vq)1!Mv3+;Z zflituRsN}hDXhbbnt&uikX7*6dQ1V_w;1l; z;cjL~%@rs8&w23iK9Xyt1T-=$EMFG8n~#P#vnjtirmmEt0)O* zAw|otYgA>rW|%sF(>$X!HnKoIgF(qy`>NxIJpir-y{dtMC%6QL$cpgY*FN!_MPN8E zow}e1g|4yGy0(BeRT(ESR%Ho1^^_KPL0ZiYTUFKCzJ8;VGE1f;(yuf%qNQA!3N4)l z+{kW=Ft2;wGiZ3Mlw+C^WS+X_q@6Oys$J`zTCE0*dhrU??wy90;GZZD$NRSFD#vJ6 zcD7eql0D!RuUt;Km{@Kcc7{QaBmnBOfSQXrbDU`>(OaGzZMWx3Jq$u|G$}I?d=`(l ztic-Hp!&#cfDL^$9~kM8L4a_> zSDEXf3hx>9$q-e?xw+|Nv&1ZA{Z4shFQ*z+&ZwqS4GCi!eO9U^S5?Q|a6yv{8EX(b z8|IvRZ_8qO>C*G-LieQ#T!F}zTktdJD2MUh;+~31q(Mf!bitm-8Y7qu&L|y+7}F}; z2;HXDxc3vj(~#n5^Row(qu6v4NE=V4Vcw!UvH+Ph^AvG!|4dy68VG~_AQIH5XP+yi z^_0YIk65{m-Ebf3Fx>{^j9Lu7Z+M1)^lT&7px~!gSGy)9f(P0sD<8j{xA@lpC`#Gv zReA^CasFJPCXB51Z~N(U$AxwJ4SR`EUX()kTCBYMU-!DO3IAA`C>LXowOg+e0)K9d14npQj^{Qp5 zLWN6`+FJ`6Zww@L415$2?Sj6t`^*`(v5_tIp8qGuEj(f0qfWGnJ{ zqs!4w>~rNS!Nb_HMp)1dBW-K8Q_*d-5I7p#D+dJdiz4OZJ7GFks`kya4g^)|+tm_x zm+K}76tRE1aPQy1PvcK0%gSC9IUF0-Bo2Bo%c9id`N3HsT@253GToi$s4zm*rgaiW z(>fJxTJRI3MsD6fc`}nX0gXYA3qmty%`nKWK{@h}YW=-$wXfqxkvk*Nxo%_@vlwY z&cG$dUcG2hfHJ3QfA<(?yQG!|(9mRocN)Q^)D{^@3`rd460jUABe+k!VV1Csj!fAs zy|`y-Ik)zGPkTbtyM5ds<*?|tZe82F8U?kJ7IDWShm$ zSG?DOYxtwe$>{kugJkc1oXnCU2`FL^p5kn zP#?2}*%rl#>N$VVX~|X6k}deGzV8?P0%5xhUZxhkjQ}8I&ZyWLC*WC>5M1o%j9iW~ z57bjW2b~;m@i0dLX)5F3vxPwF&RdS)0jsr&vbmP}Kx=uJo@6N^toHkr@A`F*g0F+0 zx#DPSebYs#v!x{vbz4(V8AllV7bA?_Qm#cS>+e1&=&r*aygpO3B)rR&kLWS zKli6jbl!!Y?5Q1R=VFfadz^TF6Ql`z{9yi*eOD~)$&ZBY@FWUfDd*zj7a4!}9u`H3m4g}lavDe@!Rte6@r-YwLgFLO@R z*vmy<&{v+B{U2Lw`hRS#Oh&;d`t!{6>p%ZIP~xv=lJod4fCAHV;$#0mFFy6kiql7a$k~8E_hj8|xg89Zen}A3-3aA(A45BYq>hBm5*GB&Q`WC5k2q zCUYk9Cy^*0D19i{DSau)DugQuD`qSrESoJOE#fXlF3&GjFexy*F*-5EF~%|YGCwk{ zGaWO3Gwd{IG~P8ZHL^9vHQF`k0096100961a6JR8Uk^O>01E@?00000*s_@X00000 z*s_@X|L6Z81Ret90000800IC200000c-k$HvtICV6o;Sldu`jcnQd%&%GlB!gt;Ym zC0#@2nr-vnHw@3`m~8VCz!E?@_MQv|IPZq}K`#+jNr_0ayS#L(e3Q(U{3@AZ>%0^n z#W&$E-ieDR_80L+ycdrdx-*=2L-)D1#iC+0r# z)V=rCT{AaaBQH)rCu6fbv_kTa`C)Du_p?@ABMrC?2Ao>0GkA zl-pfz*H%G# zbFO;0eb4GiTUyeThSa4h<+krW?Br0`T8hccR#ZS;4S=Q_fN9w~yLnub+QFU{G)f19d?toD~*Mye}A-;WD@&-?`at zwgY?5wJz8rIdZwF>`SZ+SdqNI;H-tH0OO3W*1PnkHhBwo8!1rZ+UE z!YF7tTV#)z-Q9vP<;^cO6M4ZDb&(fM(GY2yVo2mWrWh9at|>-D zerU*N>obpA<>D)k-E#4@$L|@%6Yjsj_&zYc2j2vYA{}59c?lRrYG4$385l)2fl=fP zFpB&D7)8zkqex@uVcBY)LD=b(LV*xUIUw0czxjqempx3<6+_geLn@)OyIP*HBQ4NM z9$(!mk9C%>w2HcQCW@~nWrEjAW)3~RZs=Bt_Xg~&Xnzn)7=j%!_{&YV6sX|q zFD8M!fx{sNthCl0OdqPb2Q7h({$pPW(>2Z2Fk738vB_+#Q+b2--pMo}^o;JHh8ht% z$P1#3lF~szv_#Q3Ng=t8hN|!L3XhUevjl<9x&AA+9SbGDFB}jw^_c+&`XQ)!AZp~Q z1DthqSAt2k9*Vw9V8EzaihX*h9UGcWC7f+j-e_X?eCM}szfcEt@SrkU+W64`LAY6( zRKA|~rnp(k$3~Mctab1(KTQ0>w@zaKpKPh;cB-H5wm#72nc=(cfldR%_uL$TrCES> zzYWUbvk%j7tHZ$VRtsvhy07mJ+_mv&;0^y5t=Rp)x=-L|cL7V|3E5F^CmCRjgpAGn zJCeVn2L$N5yHoBW?xVUQ$F9sEPix|{<$fXb@~+F!uo~bI}k60wFtaYCkKi_ z*jGl{kzZo@+Vt?wVDSbEOBQcU&nh*4^;p+t4g)|GgpZ+*iv$fEb1XBnWo9l*(4co# zkj?Y=Cl)&r`b!4$Cy~VvISi4<5CzPaL=i)jFhm(cR4_jhRSZ$X5OoaE!2C-zF+>YP zv@t{n^DWWE5Iqdh#}KaNJ*S6x!0_IshFTv|BfXwve99PG-b<<{4AoOg^^8(Fx4hSs zE*MIel+qQYbZvQWDcvxXZndC0E$H3~A8)RbkEd_bdvLw$C+C#BQ|vPVw5|9VWKVE$7e{~nAF z03OE=K>z>%c-ltq6hv6vPfsml_C?p5r92gRK zVxRi*#1AYiWBfOQY$Qh6nQ)MUB}cho&RK3rT;;C%lWn-mnPP9bulmEUA6PR5ZuXIl z;uqP;{*Z&6zvPBh%;c65Te++LH>DTcfJ&#$hNp&;E-0w&WrovwR>1a=6#Dy}DkU$|F^$G^=Mw1uv8?9K_VOTivwPBMwVpRRt#(U38E<=q>}S># znMq}}$W&4nQ}^gX{7lw!UC8@Pcg<+Nt`E$~>5|ifFm`*UHy&!YR2E^WbUh;-)sh!d z(=;wc-zATX^R_IcrCRFI4{A-nTddrDHJwh?NQbV|ArrdWtK z7J^i+nr^GMqS;NX=!v#NeKs@_YtgdwephsOk>nv%FPcrCIa>vI9T+MBS3H$8Se4hL5tUOG$LyA5qyGykJ^H#ePqOjIDvOVqhi%BAV2YG z)Sdo7dBl^0hmE;~xm0`}{o!2G-=A#sd4*}b6h_bp^zZXKgSzbf4etHN4b(FZE>*gw zxt%#hLZyv$Nt~GH<1m4tUamJK*n(!X`RR5P5?%-NvhcO&eWG)sDb+5zEEGe2vp73{ znQ=_qjWtND%EahZZ1B5{3e?t|H);+kmp}?nBSv{{nW5UOh*Eqv4ayN6)G2?se zMjY@03HiXQB5v~XbaSvg2V%vCUe}XuVw>?Be-rZslow!Cc-mrMVgQ5x%?w5i*g!H6 zGXhlsYKn)100J-oqu2s#Ou7ZC^wf!G{@t_=Y;0we>23=4rs00bZfjeiG%NDP4r8?J8!+!*RT z4!{mN)+nS|gVM(0|KkA_xvr$!afleY3uvOz#Kf(n*QFWCjUKd>k_!wg<`#B19BgA( zVknr1Y)uVYZ=K_pMmcx%@m0P~YFrE7XY|pl{BMnd(t5W=pk0>MP?}$8>(}F3wtp57Tz=bc=5R$OUc+1DQF z_VhEm8%Hcc@F)<`2Z3jME?U%Dl;{7K_y6nmbzhKSz8K$;3F1j0d`A;p10Lj?AY)eT z*?LdEr?(N^qT5oewAOm(`S15*zxKHgk7Tuw7&^&HfzSz+M59!1kh*B&YqIM<)BXE> zt~kq~x0*mI_9ZovyjK;d!n0xSFtbgE)c^m_t-ANj-@9l3ULczY1%;v+1f@Hhrg58B z^?D9-#?9d~;;-x{L2)K)o|Lt_Cx#9MwSfqo?DceqCqXE2db4Y2lOpC2#3L*Y(b<1% z=>3Fu6L%05MKX%OMMy3@Um&{Gz^&K9XA9{x!eLNEm|gNySsP) z2#3%p!8wO9IEC>1y{cvV{wEcdd$zfbye`rq%Bc^rcG0?Nga;4=9>^mINW0|61&}MR zMR3^5 zCcC&n^Xm2Azx}ihHOX%0iYXH4@_1Bpv-7W8m$5}r@%E|UV8MoPzX=3pWzLBJJga+v zEEv6e@Q4mX=)=zd_T|nsNU=*38&T&Qfd_F)2d?zth5%t=rzf0QxIRZHa2iB=5n3sdS6Qh5p=KNa z>4TmB_)NBeTOWTu69I)M+2i4dKcUZ%Fxeg?uQ07hCbJzu*e=^1!c$zhC(1rjT!*+q zzQ>aw{g+Jw-MP$^)`SNLS4lqtfp3epulFlw+R7dY9lSUZWK<9vv^K9JN(yy74na%0IC`5v}7Q4%y+P}V|aW;%&R7Z zj{2ZQruX-RgN}7XC5oW;acrr-=Nx(HR3-t!JLT^MyTqI48`$^26xYr(XM~Z||#0 z$JFrN2c|&R|K8}*2yr@gGq@EHxYBxH?ODVoAjLt&hc;Qm%RfSSy=xKcCrXM5h(gq- z&cK$YY-^?0C16)1jC~6LUwWbl7b6yYJpItD6_DUN&#pTR)aY2MP8<$#OXlz1p>>!6 zpUaPz!H&&$YIQbPj!c1JZK<1r2QWARlT)xbgE1Gt<|0hE1XC`iw&R4;QXK%1MPM>tHN zkz|uCK~@1iUi7p1YyXoRn}do5u^9@k5w>L^yF9i`w&%)}Q52hzR`XXOiVGoCTA)&@ zCgmtLqOP2^B*67p$RzD5p{xlB5>?mpj2KGN@(gw%0(Ak2be$^5VqO+Z8Aa4u-EkU? zaKW(-24GSMAZpU?HdCh!%I+A(M59W?jLt5qZWLf$3-0y}TG5K+974H7@O)K7ZQ0{n zuokXG)3|^SNi@^>D?+Y6QCy_EI;scMzA!m8(5*Uo1L3rVJfIxm1YpdNc06Qu)HhOzuFXeduF?c{D+vPAUc6f z=FMB#RT}k49W145e4>NEubtGg!`YnRIJ>T-=cqG6F&am^qjmL|Tt9t-DS)LaPn>Zh z)7&R;(=~xH2pUYXo4|5zHc?sSO@$e^m@x+ci)Sg0Ae}*2hKI6@ERE-oKt6-80uL1l zGx8D=C}$AH@lb^@Gp{0nS_WZt9%>Ml&YMV}l|fjWhj_wFyn_U~8HDwCp3*0tIlN8# z$EwdfA$7pKaOl7?VGJBqoIG%xcEU;8X`ObAfwPM11uXl>!Enp^->JQ2d#14D3-7RZlW+gv_6uKmGx==x`SgopbI*?dae59&wk&DG3B}IwM*B zUr4kc7k5dw!8zldTE36yr0fn!D2NU?GL2{e9l)}MXPXHBx~9%1wMh3tc15S86FNOo zr=yw(nV0zk#yB1o%HSINVD#ecP>S&<;kJ9tf(|?jlirLXsmG>(z|P(Wk)YINl#doE z4j6AfK~(+KthmD%_dv8nIy_XJaN!p3k%}FB>qagx<}Wq`33!}uA>0VBpm%woi@*tg zSQk|igdNCsKNcZWY<$O1=ec83zVC3Uu_MBboLPR?dm9E-P;b^@1Q64AmD=HwSMr!t z3u9`V!*`ORQcyLSvu9|vXJM<0I7>~4?~;H;5p^tx_^m!vA9#9hh8!>+=nJ1sp7lfF*xYCi^2{OPQvVt}x0x~CI^ruo-gPa#&1xedrIkkXB_wN% zSYF@Q?;JKZNkT>f5LCiSKc~Ra&!8=-Cr?JAAJi%ILEZ+*f-P5 z1`s+s^KaQcV(f^~vq*TcSBtUGi>tPifb75Yh$&<`HZf*tS{sbmiHGS`*SA(@e0M4_1KXb zco&}F;!r!H7s>^^c%jRo-APn2wuVXTi_Tx=`BR{${*C1soV^9d{8}3!sQUCL zqllQ5Qp@r{TEW3nX9<6D+b<7u&CQQyf$_X=wM@yq2kph`o!^ST)27CrXOU`}AB(Bk zPBCo=*QgAsQBb_?Kv8pNQ8+zP=TK>tlt=g8#n6v^%F-E2Mk~O$hAEwmt8wlaaU)Gn z8sWl8zYj`Y9!DBhspN}|P##f@>8c|*Kd~gAnZb(G3*c$8vKbGiD~z+yX9TCob3J%x zhW0S^-Qgu*mEVWrz15&PD5CK_+ZoWA(2*A|lw(Wk5H?)xkP^yS%(TR*-VwFPYRNY$@j^LKZ?mB=sf~`r06D8m+oiM(gX(N0@ zx65czs?U_0a!JAZZ|iZK@vHP~a<)T_YKe{Ir7r65j3lpx!!&Qq1o75+lBkckoQ-MG z-sBP&TCm6;SO<_rNtq3sW5mmutL3yt5WkaFSWC5X?}jxRVoM061+?*|5sg!tUMvvi zr}&*GBX@vfqv`imTj@&LhFAfk3zFh)M5b>L+z=BtjYB+2l84w_GalqC>}3+#?M*wa zmhK*^W0nyzns2}-qzGHHMi1se2~RhY0L}Tkg1^RZN2SCMF37B8SyC342PEe-VW(XC z&%#`4CaH)z!uQ@@Zg9g+gk9`z3?l?zgJ=l6QqVNRvNlgAf8}FkFVqP>QgJbrpqU^p zWo@yaL^bifECvaiYOCx&4sGfCq@WsFe6C%Ruf-0{BXlg5lO);^U4vjb^)kdbnU6&% zH%#d^P34~N4oCN?wyJ(AHcmLYT-aQ?SVSA2_8C18CG6N=(8WtpXFh}SZN8n)>!(lc3**n7)Y8=!Y{=O zh)kn-4PJD@DDu|tB=eQ$CCS&pbE6I^bV)MuU5>5E*Nr%= zRarI5AZJdS2yB_v%Hm`Rre5b*z8J{RMiO|%0;$VQr4!ZkSjR_9Za!iKp&HP7>bX1vbbBy92RtQ{lDzOB{X$3ZAR*6+%DY=zl^ z$Rpkbqt586@X<|P&=M*oC!E=!#GywDpWS`7$MQg@skq3D&;bL~l5@orXvpp#y;1FGsY+E3yG32#e^ zxT9e6*pg5Mvy9g6N*G-b*&tqZe{3gOZ~oHJcxPTHYgG$DY`&WW=H8dO27J($Qx5wD~vG^x!EO zEhAze*BG^x1BYOBVo#e}vQL~WCN(PRqi{7nW!u9k-0+$YF0P^p0g6>F*;PNhH6@H4 zUE7znqyVD>dlQ7|hp8{UQD-QCYMqAKG;ra#(bP_XAO%;{=7i^dX<44eGgugLQ?uC^ zU4FUtuFQ9zKKUglnV3|lzh<<{#D2?7X2?O;j0J z4#0HxMk8sW(T>ev!wO6I5WV>%1mW0dX4pGDusr!C`GmJQ;Qp8Nev6ucgUgVGo8^wp z6b0^S-`PPm8b%!ukW81pOsa{O!o#O9h7(cOPpOu`o;S#!tk>&L!K(+G!EN1938X9U zavVvobbZ7n`{4t(C!I(9%jC=PeSvTW0Kf1 zHK&v)ggxs3IHd>?7vz!u57=W&?%r@|X`Pf73^2cH9;~#5a(BtgVvFmnRUO+W*ZhfQ zE|9Al8`d`*M7_M+y%*O>c!4y8#Ea27e4Qn_V|w%`sX zf}Sm1dl2%hKqInjL?S#MF&Cc`VehJHsJ)`5N{5j76DgYaSrNi zx%SYMM+}qG+uYP0HJUK`u}wxx-s9Q$5$h+{`i$c`r!;C$2VT+Czq@(q3BtDrCeipZ zeHa~>!CXCEPbjz`&-GT;yShKR2q%d0mrD2btXm#nJv`k{QtZXOh=O92b}H;-!&)dY zvSJl2YPFTfs}vYLuCQM{iW%7ip`nHkNMA;klBkusYp17+N|pkT2YNfETtg(mFs5uU z=aNYgJJHg*2^IT^_nXL=2dQ6CY|kGkAl_$;2fxjHgwzu@gne=)Wj!+LUpNVO*9z zPTRJ)d(CplMK)z7W8L{kvU$i947GTu4dw`yo=RvlVE~%@xN)B=tvZ!4`7ZBj_e)i3 zU=JvXszdm!B{&u21D5-8)TxGeoHi<0>0{&8-X526jHY_AOJ_tNj~NtdD_{r_bzf4y zU8|ZJB?$L8t@R}pZG4CbFNcMRDbb6>KD5AXjIU;Y1yUH7{D(s55H$Q*$W*@J*t*fk zOjAP)6r{jbmv4&17R2TZiaW_aKepd705#22Pw9OIRC&3BLsAqmaS2s*J$cVSG*- z&fYe6XDw;c#nFu@N;sU4n8@Qf^&az6_n$y+qP`U5L%bkS98|0;2dTo5Fi@PUZ? zpX8nuaE=;D5*7;20edcZ5F zAGf5V5{tpKZ|g(Fh&<=r!5k!|zyDsrEIsCrLC(9Kl?rJ5Zry*5oY~e3E=y)@CVgag3tK=u5J6XDtMj?SOKYkrkz z@(dS;aA+NJuZbD=-z4<90LML%bM`L5~3oRuqe$fB~W+IHmWlbKo zD(QZL%+3PM<19RucXGA=G-ww?~! zdzVWy6hc(0jBMu&RwY!TIx3VMs5R`Ul#kpRi#%63i%=IAt7+A8elUnr!IE$WtOj{y zG_Y*wY^b%xm-aSa&?wBO>%mW|g7*>=Zdtrne#YucVT8YloHX@mWA0CcAAT;Vgq>nQ z#$B~d*Ivw=sAOiESF_YA{lV5}ut;Sb+W5*(ttLPuW!Q0B|fwEbm*nYL+in=cdLgp|r=`o_}v?hxI?l?%j z#6&5!47gBD?_Zn@tzSrAN>mdBk?+$-nTC;VR&_@iD9hlvm=v^YTSighIY=-oF|yUO z;Y{Y$cOWC2;4%{1<1EhklrwSbs`@k&_0pLmNgK1CM&Mlul2|{}vx1S3=#&LvsA6ZC zEIM!8$C+F6XR+A8>@IV*KP>;#M=*5q_i3vgT<`+Y4~lmOmX8gzHf(_pdd<{F>v@No zHPcZRoZZl;uBhAay~V5ySXHNHK{c_?hO#_`U-IX6<{_5dMuw(Lsrk}CQINIv``vDx za<>wSmrWyu&{5jzGxDGjjU=*&b#D+-NZ1f^qBA#PFOPbyprgBFyt{V6;!T*JzJ>Em zj52MzK4~9{Y;v#3i^nhw2j~?-T`P2JI&x_$EB=Q`Sd!%uVmDlPn6mLI$_?;>99Y|9 zo!8z&-$*o%xVaE{&I_0pmhjd{dBd8vuX=)TU>lz{{N%GRBgOID_y~ozdZRp0z&>P{ zYoj@LLusYGYjC%l zI!bqh{GDJ(dYEQ=#e|R6K61yc=8P$t$UN6i6>pVB|85``k=u3HD|3gzT$ZktEMq+g z1x8Ht9CS!}O6}wlBTHwd8?w(@r8Jsb@>RmXux+vq*%76U0C=P+&{(~pY44F1_wt!9 z!b$R<&}O-)!>pp5d#N{%87-9G+iCTZAV?^l{42PtEOANsT9J+ybzVA#H=DOw^>}L? zgN|eXTZB*6nU>o7Mo0Po5B%ve6w5s{UlIBWd-U%KCJ6{`@D*C!ULCcnL6z#K)=MIU z+~d5XZW`h}4`M8OoEVXa5wR4CB>YO*{u16AFUfQqltRI0JRfgbF||;HiN-vaTEq%k zHLZw7XTbDt7VI#jWsRM?7bQ^$nqhcVpziN`9xdIdHbv$oS{9+8XsU2rG+)}c=EqgO zem`vh0)SHBAKx-)9>ixx|F<9{SN^R-Q_)>8o?G1qV2y%ykri02mF}{XA2C zV2Y&0>(HEDyUyA)f3+v~?Tef}$9$8#MSd4!gFiop0(!O?Kls~JUMPepf!YYx_9KtY$QeY@vv6|n;qW>-@)KD_?d_5Js>OVQ%L?^oeX;rST`&O9 zRdzenQJ;ZtIzL%{XZtp*cV$NTk+P(ia!;^6E)#6p7!wb(L406Xd9r_K3&h%bUi~E( ziV8ZSY%Z`Cq6Oz?Ln&`o;;y|mBAE+JrV96*9t5hPEI-8S2Mt%Fkci&!AG6M%gERXB zB;tTv1c(frcaJU+7oL_@Jk*I}w#d>fy15Cy_Y{e>nE?%4n<2T%{CT#m#Ufv~sXXWI zw8b)mOa^cUQ8}HbJBxHrN3)91jl3D*SvGPhHLSl2HynHU=ms0GSpso3r13UD0MI^F z7@kqJJXSg=)ARSS8BB3o%XlOhFHhGvPBUBrRvRlSfRNUz`#4YcKw5awwVt(Q<;(mhiopYdcl9yN_ zVY}uwl#Jn)O_BiEFz&;#kj%aUSA@cN@2m+sgK`vx^T3W3~>m#!z zMq^HL^sjwAv$J#ImP4SYr;>*h7s*`%U54~;4AJ?c|FviI=_?0H?2s&zeH~c%*V4-5 zt~Af+H2>9i4c1;-tnXis%-tnlc6XOmw+J;9(2O$DF}U0}FzFrnjK+j%zS$VWuAhS&!5}&7X;#~lBUXwkv3kjzo8>Fe z0A%Y{%dbb@Hw$l$9Dl3l<6Ot+q`&VnEE+*cVy+?XY!2g4eGd<>ZEE77OXqZ`JSHJf5YlUQr%UmdPCu%!2n$t+0*>MPpl z)Y8J`EYZzS<=B5X_H9?Xn4IA;oHz^Xj!|S*1Y+<(H;MJrcZ~^$%smDA7ttcxS`$CyI|cUj*ExO&>!OL>R`ZPHKiTmqJj{L zY!5nvH}|ta8uZAs?2L5XWb2lqCkM7T{M-=ys;@TFnYSUGk>)=;F3=JU@RsOBNjJ|( zQ@AgkZ0IE6DRBPT6(mf_H6Hg82BP7u#V*(Og!M6ge@@ZOEPId}a#blbds%%Qf?vb| z9=Nuyri)S*X}Flnayi3Wq&V;O&#$QsYC74fu-3&4y3KlW+1M}vK!HI&VFIK`eB>6@ zvz5j2Q3}2{Wqf@~+ug5YvyJm?Mspmy4ck1#!Mm+xV>1JRsY8C@?{1VaPwG2rmSAsJ z=hDy5(O1e0{Pd+#UMLE^r?iFD8aGvX^34;u&3h`cRbJ!$I*-f(Z&aV4j;>f&&uEo9 zZd-=_YpW^Cb=eqFp5Ai;eQ?3?#_M{^{MdkCT3k4tVp84XZ!Z(pR4b8tC;RgT$ zkt4=_O#IOTTbFQU{G7FWQn5;_XXOb;v~Nh3Z}W7{ynREHe$S4`js#zU*=-Q4u;(cu zaFtD4^R$|R4d=Oxsd=nd-0C>nr*?HxYl4;Ewt+)f%oY=82=A;RWmV5T*<5zeocjS@ z67Si&!2$rdc|23r-(~byvd*sKYK|~(gQieqoF@v8c;-%g0s4Mo8ZN+6KxbGAa{U9W z{x=6^Pm*ktQaNGczOUr^e~};kCs~3$A4(VGX7%|Ov=*^#7EdOpIYHZ#3#Tk5<8ov}r`5|V({G&?7xGrBe*q%de6$t(W-(w!YZsD`U=Wn@I*)PqwCQ#2e`@CKi; z;WR5Hk3m34_eqPq+}d(to;qMU!xfXR@C;;Iav25@-}R?YXMgkN<=4H%Yd_mpF(s3U zT`e2Xw#i7LtSD^4fb-(Dx7VN(%Ae=e$xXSaeRWXL(oB#5^BlomL3gGB>7Aw-a$QVj zN|dCQG}{`*C^|x9q^t86Vcak8Cu8d}8 zO;zL@mu}ec3w+ZyuAg8&YKyQ=PF$E1fr4uu1aL<-3If&lgWFEs9bwqmF-!MF#^)GP zd_(fo9vW|QR3C*Xn5@acQ3Q`ODB}7j$KOUI-u&{pKNj*_PWm)`_phQM2Cc2wK1Clj z5nwHR%6Eo#o;rakR$KL@p~=~{tc)f~DHS)KNmi9pnImUOj!*-x4ej#@*}CO~gImHa zYG1yiN=6BIx%|JDu(VHCnbRs$RKqoZ-F!KC;VBV|->Aw{6CfGr+`+Fay=@ECts=6*%}YzsReIYO4!4SS0EgL1m(MK%=O>L+|Q80Vk~ z4h*V98eT|^pAF5z=(KOM$L?muOE`~u>%16&eZhZ9Flouxj=w&>J0+JiS)UK`*e+G= z=t~+3*n=f}b5&vj0tgY1>_Mii3GiMoQYDJvcfg&%il+1Z6{U;KWn{72qR z215p$9PPbbMP15i%XfMhOKC}|wlMRNm(dg|m`TCY=hEzi4S$#+HBYRW73_H+YOHp9 zxD`HjSP+o9Wu~%a(kAY2z#E(Un=5>ij6ZVcj{iTbpnLaw|3cdb^+OiEug|!b9d-7x z99rlFW71J5!z~s)p}#B?uWNKs&}4W5FUJYf>S_?KBinhs=m8k zQ4VMP1l~s>AXNd@HEAmkTQy&QRzYF3#FqMf(ix@>61iCZSOs9Qwld&-^hgJ1uF$wT@X#UwJL3;}=rCG_VdSNKo7mF)Y^QXHbd zmmC+8G3DRQ6KViF)+bV4?W*aTs5fpA(}@A(d({E`_LZ*Di=|jPvYbbC%mQ-j}#t8x^GevP4zD_let}Ogi ziS5B;8i4Tmd<2%a<;m;`jCa%?y0;t~MIxrdgrm>SJQJ}qDb=flKUN@*%-lC4i0jXpHnM1Fm3_2h?2?A4g3L*qbf3RR zNb#Vf&%hP9cD@b*N4bfAe4cl`d~>o z|L2V&|54L-2UZBoj=bNYL0ah9u|k#j{A0dX`n>OzegQhQ;q^bGy!7%2PWZ4oU1JXs z{%!fl{;g{PSav9LK*gJ)3G&i{7EH1S(UL%zre`D!_onuOV}NUT^j6sK@XMQ3Sy<%7pZvR8 zGmLZ8mnX<*rh3cjQVk~{VzolRJ#eS~+|pJypaAQsJ3}A+b_7zySYxF37VDVS38D3M z5dF>O*td@ry6f8D6bbtRIefFxovL8iCfjg^xoY7SW$f}7m_)YyMDy6FJSQ`OdpvH3 zgf>X}w@BwpsY}_lof{bxR|oQY)^q_jUpqSX$n;B@!IRU1G)so&MlVletFu0(EEifvGE%=XrL9B?OU7)ZsV$-8 zu&iBHt|=|0;^HSE31-WRp<&GDe&PLg-#pb!8fWv*TS5-MmN|Ecla`#tw-}1m+1Zg{7eV8(!mA=ioXky4?^HO6g3CZSzG#0h$v*#3WuI|5G!z}_vY*)5PlSi1q1X2G z?(*g=J@mpR8r?^VBvBRpZy@hs+Ut4#uyO8BI{&xBpss!8#0yL+1Lh2>EfMOBv_KYH zH0kXAB1jR3+%^Y)9H{$j$d>vWiZ8s&q_CsRjT+knlV)#<4R}EYNdHoUI6`_+pNi)52Xn``HHnueesm;+Tphzg?PkYnD~2 zQd~h|qt9%Zs1ss)H{CA`l*WISJ~~E4I({u5$d?O&V&i0zFoa_|AOO38(YRVc@J-^sjsOUU7|fM z|3Ku`Z&h0(SpXrmWZ2xhRIHtxQr@7K2eC?=)(8R@fhQpQ(iU{xelx|7$WO^n0U1l` zF;-j|!xA!4^%kA-+Z?_aQDpp{Mr?5FvROpyIQF@~#xEF5S5KAU+LeQYjE(%`=avGJxb$T4eZHLK^awHBpDNbH ziDO*Qt#j(30e}BlF4%jc*I@kZM}Zf61i)(j2^7?|76*>CeZj^!{Komtaca<$rrU3=|{eN6q5~m$UocQuC#OVh^Y!f|a%@#{qz%`|?{2zH~ zHM9fAp6}ZrFyCL%wc9sVZ>mXF4{zD&<E4N7`><@!L0l47m8BR+e zAW_*AX`P;mwc+slGoyDSduiF>VOa~%7`$}7iR_*+UU@71Tb4Msf@V+UW;irk1AJzY zD;EDe9RcRRXR0C8YQOs7!v8LR(^z) zyLn?Mqj3fbaor<@(Vs3S3kwMNz!EiGVYh3qYooF(D7fVBVi7)+Ewd`HW{gRN1nI(G z)s=qO-;r!G|An~xr1d6uMyh8={_Kw?1IMs(2U1*5b#02z%FFwN3+BjIARs9P`G#g< zyPCp+iLuBVE!Gmvd3L|zJKv1jBb{9UfFEA1I6nXWd>#N{@AIpUHn|iphl6Ov*>TgY zyZhUqLbntG2f*zqtvH;$rO|F9ayUW^#ivp$XT8j?S^MCtuPhUO8>4}?En+MsiYjHO+bko=_iZ3xPx9)AE%f^M4M!hH*7jOrdxj-hJ>zdrrhWTJ6WaYBz@WeH1nbYrB+{ zJ=@-g3{aW0?I(7C!+=35YHQe30#K@)mA~lBWark=7f_T%M5WFy0j5|}%--Z!Du|^* zBPT03ubW2f0{+wubaWeRHQ@&8#RIP&4=^Q1wDd8V^!*O?Mo2N?WYeLsP*47y4HNZbwKhDJ5zU9F?-4=_kgb^Is(PNH z5b$or`$~k@+fHJ%g6@dWbJ<1)_k%I<@7mojiepmf0-IL73XmkJNZ7@Cz!mqKb3r6P z-RYI&`u9dD0U&>-(ltX)pW#t;W3#ubSpGh)AFv{m&veoxmjT3_m$SB;MJ~VnkHzux z^r&UO=IIMyFvi7m5ko}X{Mc+qDMUv?|J_6R|05@aW{pS;#$@Z05UUKagaT$k*UlK) z^xDWx*K`5FjE1V%@~4xR(0;iAO5lB`h25voj2S0Gi4|WMSvZy|9JL?t72h?8>c)Vy zi)&=tKtyJ|-}SL>WK2l$_GAF?_j`Y*B{hga4VQU2tm1tZM4${9U|ciHCw?Wu0hv*m zQS@00S&+q>!%C~HR@BDS#px0HJtCxPELAW$c$|uW(zK?21{_1G;&KsP@{cUhwBOo; z$1&v<_n}ipf*aZkTPZxRokN(X$G<9Bhm6t|McQ{86qnin@D679sy!KCyytf1kgi-~ z#8Aef?GS*na+oYJ2|%?2(E5S5~I{>smc{tw{;_zy7bUjJ1`;sPo^bt zIA-2Fz(e~gxVEbY8rMkQ#y4!Hlq2r3J&s-YUMM8TyCx#07=u7yKAXsz@VY@aQ@foc z8w!f1-@Xl7S2xmW%k_n9Et)}#yP~-`dmuhxRJDuO3=0ZztZi?`61$4b89O1 z;@GT>W45Pzk;jTdPAci)j+z3>F+B~ZNXQ;V*m9t=dy)?G9z&(bf|=vYakPlbN%Nwr z*RR(%?h>NRt&vlTSdtmu)B_(%2CnRYUE2+Dbt#1yg*C2a!}S39&8sf{o|ic9>cqU2MYQ7$B=#m z_cv1*ARxtW$9^o7zChj_Twu&Mz*eKKeftQLADYFec(*>ULZ+Q~QLyJEAEu?6j%)MC zg7GRcaqX#$@Wp~3J!UvF91{OO924S8s<8j;20v=G;zY0?N)S}F8m3aZ|Hsf9miS#R|W2S4{7|zwQynKNWuYOjKP&b92A682!vz2q-|W|Gj#`#L$D8W2XlH|6eK! z;OlIDS$%pTg7BrS>I*lC9-$u<55Py~?HPe0)mxD6xbEJFc~zia4P z;o~Lq;)>4doXzo3SX5rfPlCnt!}`)AR1)RZ#+2m~`zr;dE;%B+ml!z&f8=7}dj^hqc>#R}*GbZ`Ii`4x3#>;|-MNixGyujZ zru{{@%l1x(%A!S-K*t2Of!I)({OZt8;~Rl?3IfB&o z4PacrwR~^%`{CV7e%$&MU<*J66@ll7uOn$`qwy(Iq@|;47~)jJ0TQKrdm06)$Wxn1 zUpmKqk2?p_!N#`mZ@W%Jr{Qw6y#v5D03k+*JCG`c9BDYT6?uDe8_PetO_Hfbo9F%h zA4TC(f-WiN=JcBZxNj7f=3R z`v3o4S>J#2bHn^!K=$?ABgf$L|CbeGkHK~3#Xq6$g)CBZ ztv8qhU|iq5a{=I_?Bu%0F~S}|S@@;$v)(Lh)BSJpaSdAY*2ln{fiCW z8gc9D%ce-2iP^ogjG0_h>Ug*2!s)k z72&;#6EU@+XKkZ;^?7m!ic{C<^$<~m32Dbt2o{7+-6RAS_o5RQiP|JzPQ@95t=xY) zdlhB|z@2bs>nfRZhZN^Ue8Zq#hNct<2xSX`lAbaTmJWH$`h!iZp7e03ZkXU^R4&5U zCd9q%{Bhm@+ISWRP*BrVfK&LC&1Q5c#W_FXaf;R&Y?LEVhB@n!0n~YjcIdOWi`T2g zd};|;Z&}~eiS!zI)NvIm*Ajmg-hMx`4hp!U4-Io$$r3ilr)XJ-pi9=Kf`xj}ZVNm; zc2}6|*9DtOcMOYYm!S0ih`6Ld-MArw$vV7$VTm0o<2$a=3~j|!rff=gKWJQGA3(bm zW~Inc_ipDG#f9gLP3_frO~hH z(RxhZjtUEs#R^(2FhHp-MmK6O?^N^&en366oRU?TiS_nYZCeAjYgXVy&uzs{xfqm) zs{{VB1amVwFOIyuzgvZqP?~e2n|^oOUWqeMtK!H4+mN(GK$i6b*F& zQgLNuJk@!$$z#)*&rCdc+|}_m060PO+>_2?q>Ly_*wdrbDLS|cTY#Go#e$H)q;?Sw z=7WCA7Pin(lrm%VH=l%rj-E1}MH%09G09du9QHzT^@Oe@Tw?$OkMQNPBlkE$so28K z^<2GSVHTK{3wSo1&xCV1hZm$W>C4lfWEE!dw>1mq&F*eKpG@ANy`3A+R6hYF4chXY ze*4HBuH#|Q?`{ao&L&jQc#vW0(r^@P*QfVU!u!ImZ92*LlSpF*iC!=!m=zdT4{d48 zZTAsO7Ge?3mNjZzDV4Bz+m+B-B=VTME zee{Fy#4aNDVfcteN_WS#v~2-pe+D5%fwpX(TiD5R8o+`j3?ML9>w^%8mHsz2$?n7Z z!>fZnS8|_LWfCptfg)J3wPa$ojHyX+m};=gG))`m3!^FY77i2v`1DTyjh#Kgt-riG zU`p#>p{VwnKA2C$%i%##+=I-oS5NP*OX8;QYFF=?AbI@N~> zxk(^CPrs-;XwOh(lw5tVRt)^g#)`Cr3>3^oP z1uHtSFRhK8G!(_kzI2^U24*Hr6yz#55X3n{n5r@g_6q?Tbsei>IX6}k?7kUu3rinJ zNLSCXSoYOqLJ;{BO7L=oQXPM0-F`pAfUPpAS~zai`XCr!0HLBKWw~TX&la70{JA&5 zN@q)tj9&?*qLv(Ul}dHVaqTayX-(@Rsn!*W^;ckcX$ms$5RNlPor@wqxLcLLS`F_O z<8F+o>&FlP4@aC&Sn!~dFd4+{OPiQ7tj|2VB|Cc;Pa0*1K0N@;cQzRD;yngpkEwYs zlQ6_rZ3Ct8InE!si4}PM@~ts8CVvqHw0wD?xpniJ&gmTPAF~BXsfkW!HVU<%$Z(e% zn-o^W99m8lpw48T7Ym>6jV{d8Uy9~_S4f5*;0jD^*g>%^E-``he+L)NZ#b$~3%PL6 zecadz$j;RK7!yw*q#r-cNrok%(DD(=>3z~*!LT+dnEbydL0h-0_sgf*;JNa$Wp*J@ zrg`Y?k8g_bv0uJ}kxrY~WPvUF;F?-b`!U1K1hK~JgW+IMm_DFDWgsGq>rC{F8UM`A zer|mJ$0~qiiCAZ)*m!GI`)X+3vgNrh~VyaAc|8wyrg>+Xc6yLjA6sXzUj zEr~5{AjJ=T0Kfj!w`=aMsrUG%-{(9OnRf6#-ydD3VRqyi+9+g1Z8b$uJ4It^KX?Xk z#zORQyn8D|2Vy7dQTxm=8fkcaI{bgH0!Y3!I!+TvnO?mY^n1@Y>+T!x+PmrTE8)J3 zp}&8*WZ`HLVowqiBtnzijwCO}U``3@593hCuAY@dRv}1zB83Dj5I6y2SbwDHJh5`x zMOPC70y2J={Ps~gibK-XpH{6py87tyWz+7B2S*3)(=i;o&IS*<6%*WSY;;R?wkTnbzvg~aJggGqg$Iy^yOs3m> zmFEx=-MF=wsISVFTGH+>{l2$z+~e!jfX{PQm)n3HlYjgFIlZA?zq@jE64|H}FN!lp zM5&1iD!93fDsS}4DUYNUdTeyeM_brPV>$JQ+cQnz(Y;4iEljwtv1$UGJt)Gz7xK#o z2fAl=jSu>Kt5z-MJ;x$jE#Niu+RSQwE^pkwq1lL2wInMvk)rMi8ExRks9p>mm0TUO zpO~qNqz1)YXo}!M))6@fpcPdkO-$@qeDd2j2UjP@M+dD&sSpY{4`q?3>(JC&BY$Nd zYgf%gLBO&!Bx=HbI*%8&M4d|n$CGh_aLt;tE3a^Dr}AQEgViXuK{paI1Z3I=_bX$l zv=^zwR*k>h+dN&(TRNO9tEjqh`*{#5bf-0BI1hTW@kMh&F` zJ62_r6!WQMJZeqjEqP7@|=L%w`)~*3sR9?-x;WD?967lkPo~mQL}&UsJ7_Jm6C!xG?z1A0dzFH0M%pL;=34{B-e6$Q@v!dtI8_BPcUN?OcdnSy zRHce*g{Oj6f(FugdqLV}&@1I5PENx*t35prAP}=b6r)x!egqD8I$wKAwFGLo&YB1~ z$DzO9=9~tvGXcZw@0l&kSnZ5of?h9^{t>cmL&ix4+^nPLQ$nrTq~Do=J_87H`$hY= zyH-!h2ETd)5Gn%rZ1~!1s19Bn_!Uo|NP`N0v6F3JAO610U|r1*AgQ0wzJ*|V4AP?# z5p}&~%~+RFt#aN|6J};s=3<8O#7Ran9W%D%egwNVtsi{zwo{L)uPwKBwyNT62C`bF zR23#0m#@BsDul9v`ukdKzE)BVUS!O3TB50zM4rKPJys*psgLC1Afr6z z&s$S@&XpeXIo^LOo2+m|DFk90fh6fMkvGW9>3{hPAh&?@1JHRTp4T+Vrihh1A8aPu zdU7c8&P2ih*ak=?Kmb50d<9~FAP6)?xCM}vbO8_qK@d^cNHUjpA`i6Pk%uIY=25l zpL9>x?|wTfkPuWqb?Jio$dAZkYkg^191U;Lk{!YLtZhgZ+2;$fQyn> zj4~nr9<)uiYsQ%tFPpJ-UJqMm?ub`dVJ4>~WMEq-M#jd>9p@hyJ2eLk^WqB{jTFNU zP@6^B{_;BD(pDf3R~5Tis#yb2QWu^L_180V6WnJOaX@LF%dOun${F6&4;^Rb?WzXA zKZ%D4hi-byC#=i({fYWb0=@SfS!dy}SwpbQoAmM?9It!FrSQ(KI7XOIA6a#`Lq~=( z%zV!F=@ud=tH5TSW>y!#@=&ii)>h9F!fjLgR$f%Xh_p+N6Xh>Y$N{1|-i!uXvu|92|?+>#?#Yf)R%aq!epj8q@lELtO;TOYaR)HdIdG{@}Mt3rTRg z82ThX&SH0Q#TJn28*(s4w?Jyql4UDaty#Ac+Ghl(rlq52U}R!uK_F4A z$@Y_Jw_($kZ98`Dad2{R^I)(7fmIK=Uw_ zMrSZFv*HLxImYqy?D>%`zak&qJ-Cq%6+`7vHB=9s4DC|;yM;o5q2RTJ;QJk1cKheZ z&*q-tHY<|L=RiFE!a`mDxc8-&nRnZDaW3WYFDO7%2-I`HusVt-pL_VbmwU!PxF2DI n2OVF?Zva?BJXPQ(nw4k0m+j24>;DhV^bq^>A2=<9jQ{`uLNZi` literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_Main-Bold.ttf b/adoc/katex/fonts/KaTeX_Main-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..dc0185a12290672e819e1d62ac9a955311c60341 GIT binary patch literal 60784 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 DvjTj6 literal 0 HcmV?d00001 diff --git a/adoc/katex/fonts/KaTeX_Main-Bold.woff b/adoc/katex/fonts/KaTeX_Main-Bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..acf48e66893be130a57bb66b9506becef9b72f81 GIT binary patch literal 35464 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%0DBe5}C#ke#N-e*jJ!67~X2qoJ9|WECVv5YL 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